Функция quantmod periodReturn — как обрабатывать значения NA?

Я использую функцию quantmod periodReturn, она дает правильные результаты для столбца с пригодными для использования значениями.

Это функция: periodReturn(timeseries, period='weekly', type='log')

Это ввод:

                    dax_data.csv nikkei_data.csv spx_data.csv
1990-01-04 01:00:00           NA           38713           NA
1990-01-05 01:00:00           NA           38275           NA
1990-01-08 01:00:00           NA           38295           NA
1990-01-09 01:00:00           NA           37951           NA
1990-01-10 01:00:00           NA           37697           NA
1990-01-11 01:00:00           NA           38170           NA

Это результат:

                    weekly.returns
1999-11-26 01:00:00             NA
1999-12-03 01:00:00    0.026679863
1999-12-10 01:00:00   -0.003482017
1999-12-17 01:00:00    0.041124348
1999-12-22 01:00:00    0.021583488
1999-12-30 01:00:00    0.069259912

Я хочу использовать все три столбца (ldo).

Как мне указать периодвозврата только для всех строк без данных и начать, как только они появятся?

Вот dput данных, чтобы сделать это воспроизводимым:

dput(head(timeseries)) 
structure(c(NA, NA, NA, NA, NA, NA, 38713, 38275, 38295, 37951, 
37697, 38170, NA, NA, NA, NA, NA, NA), .Dim = c(6L, 3L), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "", class = c("xts", 
"zoo"), index = structure(c(631411200, 631497600, 631756800, 
631843200, 631929600, 632016000), tzone = "", tclass = c("POSIXct", 
"POSIXt")), .Dimnames = list(NULL, c("dax_data.csv", "nikkei_data.csv", 
"spx_data.csv")))

person Spurious    schedule 27.03.2013    source источник
comment
Вы можете использовать библиотеку PerformanceAnalytics.   -  person CHP    schedule 27.03.2013
comment
предоставьте вывод dput(head(timeseries)), как я запросил вчера   -  person GSee    schedule 27.03.2013
comment
dput(head(timeseries)) структура(c(NA, NA, NA, NA, NA, NA, 38713, 38275, 38295, 37951, 37697, 38170, NA, NA, NA, NA, NA, NA), .indexCLASS = c(POSIXct, POSIXt), tclass = c(POSIXct, POSIXt), .indexTZ = , tzone = , class = c(xts, zoo), index =structure(c(631411200, 631497600, 631756800, 631843200, 631929600, 632016000 ), tzone = , tclass = c(POSIXct, POSIXt)), .Dim = c(6L, 3L), .Dimnames = list(NULL, c(dax_data.csv, nikkei_data.csv, spx_data.csv)))   -  person Spurious    schedule 27.03.2013


Ответы (2)


вместо использования timeseries в качестве аргумента используйте

   timeseries[apply(!is.na(timeseries), 1, all), ]
person Ricardo Saporta    schedule 27.03.2013
comment
Это подавляет все сообщения об ошибках, но я получил только один столбец в качестве вывода. Я хочу, чтобы все столбцы были выведены. - person Spurious; 27.03.2013
comment
Все NA теперь удалены, но я не хочу, чтобы они удалялись, я просто хочу, чтобы они не учитывались при расчете доходности. - person Spurious; 27.03.2013

periodReturn не работает для данных временных рядов с несколькими столбцами. Следовательно, мы должны применить его ко всем столбцам и объединить вывод

weekly_return = do.call(merge.xts,lapply(colnames(timeseries),function(x){ 
z = periodReturn(timeseries[,x],period = "weekly",type="log");
colnames(z) = x;
return(z) 
} ))
person Silence Dogood    schedule 18.09.2015