编辑以显示我已经拥有的代码......
我的工作是预测一部电影在有线电视平台上的前15周会赚多少钱。我通过在前14周内每周使用回归来做到这一点。但我需要自动化计算每个回归的步骤:
按周设置的子集总数据(14周总计)。所以14个不同的数据框。
df.names = paste("data",1:14,sep="")
for(i in 1:14){
d.frame = subset(myData,Week==i)
assign(df.names[i],d.frame)
}
将每周的数据框设置为训练和测试集。
set.seed(101)
train_idx = sample(1:nrow(data1),round(0.7 * nrow(data1)),replace=FALSE)
data1_train = data1[train_idx,]
data1_test = data1[-train_idx,]
对每周的训练集运行线性回归。
Week1_Regress = lm( x ~ coef1 + coef 2 + ... + coefi, data = data1_train)
将每个回归的系数提取到CSV文件中。
write.csv(Week1_Regress$coef,"Selected Folder")
使用测试集计算RMSE并将其提取到CSV中。
test = predict(Week1_Regress, data1_test)
rmse = function(test,obs) {
sqrt(sum((obs - test)^2) / length(test))
}
我可以单独完成每个步骤,但我正在寻找循环或lapply解决方案,这样我就不必输入5个步骤的14个版本。
答案 0 :(得分:0)
在浏览SO之后,我提出了以下解决方案,该解决方案似乎运行良好:
df.names = paste("models",1:14,sep="")
for(i in 1:14){
set.seed(101)
data = subset(MyData,Week==i)
data_select = sample(1:nrow(data),round(0.7 * nrow(data)),replace = FALSE)
d.frame = data[data_select,]
model = lm(y ~ independent variables,data=d.frame)
assign(df.names[i],model$coef)
}
coefficients = data.frame(models1,models2,...,models14)
write.csv(coefficients, "folder destinaton/filename.csv")
然后,为了获得14周的RMSE,我复制了与上面相同的结构,但是通过将assign(df.names[i],model$coef)
替换为:
d.frame.test = data[-data_select,]
test = predict(model,d.frame.test)
rmse = sqrt(sum(d.frame.test$dependent_variable - test))/nrow(d.frame.test)
assign(df.names[i],rmse)
}
errors = data.frame(rmse1,rmse2,...,rmse14)
write.csv(errors,"folder destinaton/errors.csv"