#r #loops #regression #quantitative-finance #performanceanalytics
#r #циклы #регрессия #количественный-финансы #performanceanalytics
Вопрос:
library("PerformanceAnalytics")
данные:
dput(head(all_returns5, n = 25))
structure(c(NA, 0.0127576508492631, -0.0136465076457385, 0.024306527050457,
0.0105905227296192, 0.00170260583823545, 0.00718128277256991,
0.00586860402322142, 0.0151164985424574, 0.0159574248302818,
0.00499428585372597, -0.00887664957569334, 0.00105954910979489,
-0.001152238197206, -0.00444480741549869, 0.00105617627274368,
0.00744484484443464, 0.00426836832012567, 0.00107116244411332,
0.00196203363775194, -0.00629245692483171, 0.00524543005619238,
-0.00225940746129893, 0.00663963281493696, 0.00562598092478561,
NA, 0.0120981992422189, -0.0113201724823986, 0.0249611906463298,
0.0106580760970605, 0.000364737785248703, 0.00653118163660005,
0.00499259772576921, 0.0128739559010203, 0.0202916489382277,
0.00550467062962512, -0.00484865851267591, 0.0012957392154338,
-0.00124865674804386, -0.00587223531372894, -0.000762183503300262,
0.00189928452655175, 0.00347922741357132, 0.00189669822772509,
-0.00199912159808557, -0.00676813815499955, 0.00762402407908214,
-0.001243366186505, 0.00498724722171628, -0.0042675972294608,
NA, 0.00641802582479989, 0.00538141680614102, -0.00528658875904287,
0.00930662557781203, 0.0137208297320657, 0.00523147783456657,
0.00301929583567651, 0.00510586278051228, 0.0331361109078938,
0.0117636124646494, 0.00181532660568906, -0.00746210004191683,
0.00225678023887554, 0.00516617799392516, -0.00627497216217998,
0.00545331505308311, -0.0085223920387747, 0.00989601470516921,
-0.00481877226063276, -0.00728508771929826, 0.00638422896628521,
0.00809099848979722, 0.000940655933317824, 0.00316737947207457,
NA, 0.00701062547924214, -0.00148663838427798, 0.00791633379330392,
0.00378296584522264, 0.0126341480923153, 0.000602559103959122,
-0.00410910379029406, 0.0130539944511632, 0.0141497840665705,
0.00602409638554224, -0.00361346272971308, 0.00117431699651172,
0.00131093248697689, -0.00585701981050812, -0.00242592271703346,
0.00260552371026579, 0.00540540540540535, 0.0047904604356217,
0.00205796604356023, -0.00670888242341261, 0.0109238774595954,
-0.00228388328333795, 0.0119238785062694, -0.00256600715780941,
NA, 0.00726924377324467, -0.00413986013986023, 0.0247738891073535,
0.00422102839600935, 0.0137562094000765, 0, 0.00215389585913517,
0.0174090591585621, 0.0133086876155268, 0.00448220149059253,
-0.00726404815026194, -0.0076307949615847, 0.00847948596408066,
-0.00720701900981824, 0.00220936349289858, 0.00482888935544823,
0.00699958211450058, -0.00373482726423902, 0.000781005935645229,
-0.00312158576556887, 0.00798496946923422, -0.00295122708915807,
0.0114244170950824, -0.00123222262155365, NA, 0.00608596424496,
-0.000756143667296816, -0.00302686341278846, 0.0197343453510437,
0.0148864905098622, 0.00990099009900991, -0.00290486564996362,
0.00509832483612538, 0.0311594202898551, 0.00210822206605754,
-0.00245441795231416, -0.0042179261862918, 0.00635368866925523,
-0.00245527884952645, -0.00914205344585095, 0.013484740951029,
-0.00420168067226878, 0.0014064697609002, -0.00105337078651691,
-0.00843585237258337, 0.00708968450903935, 0.000703977472720885,
0.00844178684488228, 0.00244157656086497, NA, 0, 0, -0.00343642611683859,
0.0137931034482759, 0.0136054421768708, 0.00335570469798663,
0, 0.00668896321070211, 0.0332225913621262, 0, 0.00321543408360125,
-0.00641025641025639, 0, 0, 0, 0.00967741935483857, -0.00319488817891367,
0, 0.00320512820512819, -0.00319488817891367, 0.00641025641025639,
0, 0.00955414012738842, 0.00315457413249209, NA, 0.0101867572156198,
-0.00403361344537823, 0.0134998312521095, 0.0153180153180152,
0, 0.0127910790423089, 0.00777202072538863, 0.0292416452442159,
0.01311270683734, -0.00123266563944546, -0.00493674791730936,
-0.00837209302325581, 0.00469043151969983, -0.00809212573918461,
0.00784436774395969, 0.0177459526774595, -0.00244723156928717,
0.00919963201471941, 0.00425402613187487, 0.000605143721633894,
0.0139098881161173, -0.0020876826722338, 0.0203227734608489,
0.00878734622144095, NA, 0.0104281009879255, -0.00869092884302014,
0.0213698630136987, 0.007510729613734, 0.00585729499467513, 0.00476442562202228,
0.00316122233930449, 0.00105042016806722, 0.0194123819517313,
0.00823468862583643, -0.00918836140888202, 0.00257599175682643,
-0.000513874614594068, -0.00205655526992288, -0.00566718186501802,
0.0020725388601035, 0.00620475698035161, 0.00411099691675232,
-0.00204708290685773, -0.0102564102564102, 0.00984455958549213,
-0.000513083632632028, 0.00513347022587252, -0.00306435137895811,
NA, 0.0169746454662656, -0.0160574688358335, 0.0244792785054757,
0.00775518759169991, 0.00457570715474209, 0.0126293995859212,
0.00674708648538136, 0.0241673436230707, 0.0067420186396987,
0.00354540082726018, -0.00902845927379781, -0.00693206575559524,
0.00239329876346228, -0.00775964982093114, 0.00220573491076803,
0.0184073629451782, 0.000785854616895953, -0.00490773458971339,
0.00887749062931542, -0.0148611654282361, 0.00813815005954743,
-0.0059066745422327, 0.013269954446425, 0.0158326817826426), class = c("xts",
"zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", index = structure(c(1421020800,
1421107200, 1421193600, 1421280000, 1421366400, 1421625600, 1421712000,
1421798400, 1421884800, 1421971200, 1422230400, 1422316800, 1422403200,
1422489600, 1422576000, 1422835200, 1422921600, 1423008000, 1423094400,
1423180800, 1423440000, 1423526400, 1423612800, 1423699200, 1423785600
), tzone = "UTC", tclass = "Date"), .Dim = c(25L, 10L), .Dimnames = list(
NULL, c("DB3018", "LU0929189636", "LU0256881987", "LU0219424305",
"LU0219424131", "LU0196036957", "IE0032904330", "IE0031574977",
"IE0004766675", "IE00BKWQ0G16")))
>
У меня есть следующая функция, которая использует два ряда возврата, а именно портфолио и бенчмарк. Это выглядит так:
CAPM.beta(data[,1], data[,2], Rf = 0)
CAPM.beta.bull(data[,1], data[,2], Rf = 0)
CAPM.beta.bear(data[,1], data[,2], Rf = 0)
Приведенная ниже таблица по существу вычисляет соотношение CAPM.beta.bull / CAPM.beta.bear
:
TimingRatio(data[,1], data[,2], Rf = 0)
Пакет поставляется с собственной функцией rolling window:
apply.fromstart(R, FUN = "mean", gap = 14)
однако вышесказанное ограничено ЗАБАВОЙ, в которой используется ввод 1 возвращаемой серии. например. «среднее»
Я хотел бы рассчитать CAPM.beta.bull
amp; CAPM.beta.bear
ИЛИ TimingRatio
за заданный интервал скользящего окна.
Заранее благодарю вас
Комментарии:
1. Не могли бы вы, пожалуйста, предоставить воспроизводимый пример и пояснить, что вы хотите в конечном результате?
2. я думаю, что вопрос очень ясен. примените функцию к скользящему окну. Это конкретный вопрос для пакета PA, и он был помечен соответствующим образом. для их оценки требуются длительные данные временных рядов, которые есть у любого, кто использует этот пакет. в качестве альтернативы data(portfolio_bacon) предоставляет образцы из пакета PA. Спасибо.
3. Итак, вы просите людей, пытающихся помочь вам бесплатно, выполнить дополнительную работу по созданию примера для тестирования вместо того, чтобы делать это самостоятельно. Окей, доки.
4. спасибо, что придерживаетесь правил прямо здесь. опубликованы примеры данных.
Ответ №1:
Приведенный ниже код использует скользящее окно 25, вводя «окно» непосредственно в формулу PA. Он использует XTS
возвраты в качестве входных данных.
это для 3 типов бета-версий, доступных в пакете.
results <- data.frame()
for (i in 25:nrow(all_returns5)){
# rolling window to be put in -1 also needs to be adjusted in the for loop at i in x:...)
start_n <- i - 24
end_n <- i
# get the date
date_tmp <- index(all_returns5[i])
# apply the formula on the looped datasets
output_bear <- as.matrix(CAPM.beta.bear(all_returns5[start_n:end_n,2], all_returns5[start_n:end_n,1], Rf = 0))
output_bull <- as.matrix(CAPM.beta.bull(all_returns5[start_n:end_n,2], all_returns5[start_n:end_n,1], Rf = 0))
output_beta <- as.matrix(CAPM.beta(all_returns5[start_n:end_n,2], all_returns5[start_n:end_n,1], Rf = 0))
FINAL_OUTPUT <- cbind(output_bear, output_bull, output_beta)
rownames(FINAL_OUTPUT) <- as.character(date_tmp)
colnames(FINAL_OUTPUT) <- c("Beta Bear (-)", "Beta Bull ( )", "Beta")
# store results in frame
results <- rbind(results, FINAL_OUTPUT)
print(FINAL_OUTPUT)
}