2016-03-24 5 views
0

Я хочу создать эффективную границу.Как создать эффективную границу с помощью R

Я вычислил дисперсию и возврат моих портфелей. С этими данными я создал таблицу с 2 столбцами: дисперсия в первом и возвращение во втором.

Затем я оценил свои портфели в соответствии с их дисперсией (с их соответствующими доходами), от самого низкого до самого высокого.

Теперь я хочу создать эффективную границу. Это значит, что я не хочу иметь портфель, который будет иметь более высокую дисперсию для того же или более низкого уровня возврата. Поэтому, начиная с первой строки моей таблицы и перехода ко второй, я хочу, чтобы ее можно было устранить, если возврат портфеля ниже, чем у первой строки (с увеличением дисперсии). Я хочу сделать это для всех моих портфелей.

Затем я хотел бы иметь возможность построить результат. Как это возможно?

Вот иллюстрация:

    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. 

Спасибо за ваш ответ.

ответ

0

Вы можете подмножество в dataframe, чтобы исключить строки, в которых возвращение ниже предыдущего возвращения с:

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, сортировать по дисперсиями, то подмножество в строки, которые находятся на прокатном максимум:

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: вы можете трубу, Staight в ggplot:

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

scatterplot

Смежные вопросы