在R工作开发回归模型,我有类似的东西:
c_lm = lm(trainingset$dependent ~ trainingset$independent)
c_pred = predict(c_lm,testset$independent))
每一次,我从R得到一个神秘的错误:
Warning message:
'newdata' had 34 rows but variables found have 142 rows
这实际上转换为R无法找到testset data.frame的独立列.这只是因为lm中公式右边的确切名称必须在预测中.要修复它,我可以这样做:
tempset = trainingset
c_lm = lm(trainingset$dependent ~ tempset$independent)
tempset = testset
c_pred = predict(c_lm,tempset$independent))
或者一些类似的变化,但在我看来,这真的很草率.
是否有另一种方法来清理两者之间的转换,以便自变量的数据框在预测中不必具有与lm中完全相同的名称?
最佳答案 不,不,不,不,不,不!如果您想要模型公式附带的所有其他糖,请不要以您的方式使用公式界面.你写了:
c_lm = lm(trainingset$dependent ~ trainingset$independent)
你重复训练集两次,这是浪费手指/时间,多余,并且最重要的是导致你遇到的问题.当你现在调用predict时,它将在testset中寻找一个名为trainingset $independent的变量,当然这个变量不存在.相反,在调用lm()时使用data参数.例如,这与您的公式适合相同的模型,但是效率很高,并且与predict()一起正常工作
c_lm = lm(dependent ~ independent, data = trainingset)
现在,当您调用predict(c_lm,newdata = testset)时,您只需要一个数据框,其中包含一个名称独立的变量(或模型公式中的任何内容).
在我展示它们时编写公式的另一个原因是易读性.从公式中获取对象名称可以让您更轻松地查看模型的内容.