使用14个数据帧执行多次回归以提取系数和RMSE

时间:2016-09-23 01:03:44

标签: r loops regression

编辑以显示我已经拥有的代码......

我的工作是预测一部电影在有线电视平台上的前15周会赚多少钱。我通过在前14周内每周使用回归来做到这一点。但我需要自动化计算每个回归的步骤:

  1. 按周设置的子集总数据(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) }

  2. 将每周的数据框设置为训练和测试集。

    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,]

  3. 对每周的训练集运行线性回归。

    Week1_Regress = lm( x ~ coef1 + coef 2 + ... + coefi, data = data1_train)

  4. 将每个回归的系数提取到CSV文件中。

    write.csv(Week1_Regress$coef,"Selected Folder")

  5. 使用测试集计算RMSE并将其提取到CSV中。

    test = predict(Week1_Regress, data1_test) rmse = function(test,obs) { sqrt(sum((obs - test)^2) / length(test)) }

  6. 我可以单独完成每个步骤,但我正在寻找循环或lapply解决方案,这样我就不必输入5个步骤的14个版本。

1 个答案:

答案 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"