我正在尝试从多个多线性回归中输出系数,存储每个系数,然后将系数乘以未来数据集以预测未来收入。
总共有91次回归。每个人都有一个' DBA'编号为0到90.这些是针对680个日期。我有循环运行所有回归并输出系数。我需要帮助存储每个独特的91系数向量。
x = 0
while(x<91) {
pa.coef <- lm(formula = Final_Rev ~ OTB_Revenue + ADR + Sessions,data=subset(data, DBA == x))
y <- coef(pa.coef)
print(cbind(x,y))
x = x + 1
}
在存储了每个唯一向量之后,我需要将向量乘以未来的日期&#39;输出预测收入。&#39;
非常感谢任何帮助!
谢谢!
答案 0 :(得分:1)
由于您需要存储迭代中的数据,因此请考虑在for
或while
等标准循环上使用 apply 函数。并且因为您需要按组进行子集,所以请考虑使用by
(面向对象的包装器到tapply
),它按因子对数据帧进行切片并将子集传递给函数。这样一个所需的功能会调用lm
和predict.lm
。
下面演示随机数据和 otherdata 数据帧(每个 DBA 组10行),以返回预测 Final_Rev的命名列表向量(根据 DBA 组,每个长度为10)。
数据强>
set.seed(51718)
data <- data.frame(DBA = rep(seq(0,90), 10),
Sessions = sample(100:200, 910, replace=TRUE),
ADR = abs(rnorm(910)) * 100,
OTB_Revenue = abs(rnorm(910)) * 1000,
Final_Rev = abs(rnorm(910)) * 1000)
set.seed(8888)
other_data <- data.frame(DBA = rep(seq(0,90), 10),
Sessions = sample(100:200, 910, replace=TRUE),
ADR = abs(rnorm(910)) * 100,
OTB_Revenue = abs(rnorm(910)) * 1000,
Final_Rev = abs(rnorm(910)) * 1000)
<强>预测强>
final_rev_predict_list <- by(data, data$DBA, function(sub){
pa.model <- lm(formula = Final_Rev ~ OTB_Revenue + ADR + Sessions, data=sub)
predict.lm(pa.model, new_data=other_data)
})
final_rev_predict_list[['0']]
# 1 92 183 274 365 456 547 638 729 820
# 831.3382 1108.0749 1404.8833 1024.4387 784.5980 455.0259 536.9992 100.5486 575.0234 492.1356
final_rev_predict_list[['45']]
# 46 137 228 319 410 501 592 683 774 865
# 1168.1625 961.9151 536.2392 1125.5452 1440.8600 1008.1956 609.7389 728.3272 1474.5348 700.1708
final_rev_predict_list[['90']]
# 91 182 273 364 455 546 637 728 819 910
# 749.9693 726.6120 488.7858 830.1254 659.7508 618.7387 929.6969 584.3375 628.9795 929.3194