2016-03-24 11 views
0

erstellen Ich möchte eine effiziente Grenze erstellen.wie eine effiziente Grenze mit R

Ich habe die Varianz und die Rendite meiner Portfolios berechnet. Mit diesen Daten habe ich eine Tabelle mit 2 Spalten erstellt: die Varianz in der ersten und die Rückgabe in der zweiten.

Dann habe ich meine Portfolios nach ihrer Varianz (mit ihren jeweiligen Renditen), von der niedrigsten bis zur höchsten einsortiert.

Jetzt möchte ich eine effiziente Grenze erstellen. Das heißt, ich möchte kein Portfolio haben, das eine höhere Varianz für dasselbe oder ein niedrigeres Ertragsniveau hätte. Wenn ich also von der ersten Zeile meiner Tabelle zur zweiten Zeile gehe, möchte ich in der Lage sein, sie zu eliminieren, wenn die Rendite des Portfolios niedriger ist als die der ersten Zeile (mit zunehmender Varianz). Ich möchte dies für alle meine Portfolios tun.

Dann würde ich gerne in der Lage sein, das Ergebnis zu plotten. Ist es irgendwie möglich? Hier

ist eine Darstellung:

    variance   return 
portfolio 1   0,010    0,15 
portfolio 2   0,012    0,12 
portfolio 3   0,013    0,20 
portfolio 4   0,014    0,21 
portfolio 5   0,016    0,10 

     Rows 2 and 5 are the one that I want to eliminate. 

Vielen Dank für Ihre Antwort.

Antwort

0

können Sie die Datenrahmen Teilmenge Reihen auszuschließen, bei denen die Rendite niedriger als die vorherige Rückkehr mit:

df <- data.frame(v=c(.01, .012, .013, .014, .016), 
        r=c(.15,.12,.20,.21,.10)) 
df2 <- df[c(1, which(df$r>lag(df$r))),] 
0

dplyr verwenden, sortiert nach den Varianzen, dann zu den Reihen der Teilmenge, die auf dem Roll maximal sind:

df <- data.frame(v=c(.01, .012, .013, .014, .016), 
       r=c(.15,.12,.20,.21,.10)) 
df %>% arrange(v) %>% subset(r == cummax(r)) 

EDIT: können Sie Rohr, das staight in ggplot:

df %>% arrange(v) %>% subset(r == cummax(r)) %>% 
    ggplot(aes(y=v,x=r)) + geom_point() 

scatterplot

Verwandte Themen