Разделить список на подсписки по асимметрии - PullRequest
0 голосов
/ 04 марта 2020

У меня есть список, состоящий из 200+ наблюдений за 200+ возвратами акций. Я хотел бы разделить его на три подсписка по асимметрии.

List 1 будет включать в себя все наблюдения запасов, у которых асимметрия меньше 30% квантиля, List 2 будет включать акции с асимметрией выше 30% квантиля, но ниже 70% квантиля и List 3 будет включать остальные.

Пока что я вычислил асимметрию для возврата каждой акции, исключая первый столбец, который обозначает дату, но я не знаю, как продолжить.

skew<-apply(returns[, -1], 2, skewness)

Вот это MWE

 dput(head(returns[,1:6]))
structure(list(Date = structure(c(10991, 11020, 11051, 11081, 
11112, 11142), class = "Date"), ASHTEAD.GROUP = c(-46.83, -14.55, 
-1.81999999999999, -12.27, 17.73, -10.46), BARRATT.DEVELOPMENTS = c(-57.05, 
4.91999999999999, 21.64, 15.41, -17.05, 16.07), BRITISH.LAND = c(-40.18, 
8.70000000000005, 10.98, 39.56, 12.64, -39.98), AVIVA = c(-127, 
3.5, 144.5, -50.5, 95, 78), DIAGEO = c(-55, 6.5, 89, -6, 22.5, 
46)), row.names = c(NA, 6L), class = "data.frame")

1 Ответ

1 голос
/ 04 марта 2020

Примерно так должно работать:

library(tidyverse)
library(e1071)
returns %>%
   tidyr::gather(stock, value, ASHTEAD.GROUP:DIAGEO) %>%
   group_by(stock) %>%
   mutate(skew = abs(skewness(value)) * 100) %>%
   ungroup() %>%
   mutate(skew_cat = cut(skew, c(0, 30, 70, 100))) %>%
   split(.$skew_cat)

Попробуйте создать воспроизводимый пример.

...