R 如何存储“中的回归结果”;至于;是否在唯一名称下的列表中循环?
我正在对股票数据运行一个多滚动窗口分位数回归,结果输出是一个xts文件,每个时间点的系数都是估计的。然后从分位数近似得到最终估计量。然后在我所有的股票中使用for参数将5个回归循环在一起 我想做什么?我需要循环并存储xts输出,它看起来像下面的列表,并以唯一的名称显示,以便稍后在我的方法的下一步中使用它R 如何存储“中的回归结果”;至于;是否在唯一名称下的列表中循环?,r,list,loops,quantreg,R,List,Loops,Quantreg,我正在对股票数据运行一个多滚动窗口分位数回归,结果输出是一个xts文件,每个时间点的系数都是估计的。然后从分位数近似得到最终估计量。然后在我所有的股票中使用for参数将5个回归循环在一起 我想做什么?我需要循环并存储xts输出,它看起来像下面的列表,并以唯一的名称显示,以便稍后在我的方法的下一步中使用它 (Intercept) rmrf smb hml rmw cma 2015-05-21 -0.00107
(Intercept) rmrf smb hml rmw cma
2015-05-21 -0.001070362 0.9647046 -0.1206183 -0.05204882 0.01866969 -0.0361021
2015-05-22 -0.001070362 0.9647046 -0.1206183 -0.05204882 0.01866969 -0.0361021
2015-05-26 -0.001070362 0.9647046 -0.1206183 -0.05204882 0.01866969 -0.0361021
2015-05-27 -0.001070362 0.9647046 -0.1206183 -0.05204882 0.01866969 -0.0361021
2015-05-28 -0.001070362 0.9647046 -0.1206183 -0.05204882 0.01866969 -0.0361021
2015-05-29 -0.001070362 0.9647046 -0.1206183 -0.05204882 0.01866969 -0.0361021
当我想将结果存储到列表中时,我的问题就出现了。发生这种情况是因为我希望数据集的名称与我执行回归的列的名称相同
代码已简化为一个回归。我解决这一问题的最佳尝试如下:
testlist <- list()
for(i in 1:ncol(stocks) {
stock_data <- stocks[,i]
# merge data together
regression_input <- merge(stock_data, rmrf, smb, hml, rmw, cma, rf)
#rename
colnames(regression_input) = c("stock_returns" , "rmrf" , "smb" , "hml" , "rmw" , "cma" , "rf")
quantile005 <- as.xts(
rollapply(zoo(regression_input),
width=200,
FUN = function(Z)
{
t = rq(stock_returns ~ rmrf + smb + hml + rmw + cma, tau=0.05, data = as.data.frame(Z),
method="br", model = TRUE);
return(t$coef)
},
by.column=FALSE, align="right")
)
final_estimators <- # additional calculations are performed with results stored here
#save
name <- paste(rownames(i), sep = "")
testlist[[name]] <- final_estimators
}
您的意思是需要合并具有相同行名的数据吗? 您可以使用merge函数(a,b,by=rownames(a))
如果要存储行名,可以将其保存到一个特定变量,然后在最终数据帧中应用它
(Intercept)表示您在进行回归时没有给它命名,它也是一个名称。太接近了!您已正确隔离了错误设置名称的代码部分:
name <- paste(rownames(return_data[,1]), sep = "")
您好,adamtongji,我需要在循环中临时存储股票的名称,然后在将数据文件放入列表时使用该名称命名数据文件(稍后我需要能够从列表中使用该名称调用此数据集)。我认为,在一个向量中存储1000个股票名称,并在我进行回归时逐个调用每个股票名称,这比从循环的“I”部分调用prablom更为落后。包含我的回归输出的数据集与仅包含返回数据的向量“回归输入”下的数据集不同。确实非常接近!我刚完成最后一次编辑,就看到了你的答案。谢谢你的回复。现在工作。
# Create list to store dataframes
testlist <- list()
# Loop over entire regression methodology
for(i in 1:ncol(test_3_stocks)) {
# Get regression input together
stock_data <- test_3_stocks[,i] - ff_data[,7]/100
regression_input <- merge(stock_data, rmrf, smb, hml, rmw, cma, rf)
colnames(regression_input) = c("stock_returns" , "rmrf" , "smb" , "hml" , "rmw" , "cma" , "rf")
#Rolling window regression - Quantile coefficients data
quantile005 <- as.xts(
rollapply(zoo(regression_input),
width=200,
FUN = function(Z)
{
t = rq(stock_returns ~ rmrf + smb + hml + rmw + cma, tau=0.05, data = as.data.frame(Z),
method="br", model = TRUE);
return(t$coef)
},
by.column=FALSE, align="right")
)
print(tail(summary(quantile005)))
tmp <- summary(quantile005)
name <- colnames(as.data.frame(test_3_stocks[,i]))
testlist[[name]] <- tmp
}
> tail(testlist$TEST1)
(Intercept) rmrf smb hml rmw cma
2015-05-21 1255.853 -7.16453 531.4655 1870.740 1422.398 -4034.082
2015-05-22 1256.221 -40.88781 512.3803 1700.796 1569.501 -3830.814
2015-05-26 1256.413 -152.42752 713.5793 1754.086 1452.681 -3771.936
2015-05-27 1256.707 15.39627 451.2127 1568.405 1246.730 -3665.781
2015-05-28 1257.893 -133.72554 705.0280 1816.560 1232.326 -4188.772
2015-05-29 1258.239 -148.11936 624.4424 1837.348 1098.122 -4301.114
name <- paste(rownames(return_data[,1]), sep = "")
name <- row.names(return_data)[i]