在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中完全相同的名称?
答案 0 :(得分:3)
不,不,不,不,不,不! 如果您想要模型公式附带的所有其他糖,请不要以您的方式使用公式界面。你写道:
c_lm = lm(trainingset$dependent ~ trainingset$independent)
你重复trainingset
两次,这是浪费手指/时间,多余,而且至少会导致你遇到问题。现在打电话给predict
时,它会在 testset
中查找名为trainingset$independent
的变量,当然不存在。相反,请在调用data
时使用lm()
参数。例如,这与您的公式符合相同的模型,但效率很高,并且与predict()
c_lm = lm(dependent ~ independent, data = trainingset)
现在,当您致电predict(c_lm, newdata = testset)
时,您只需拥有一个数据框,其中包含名称为independent
的变量(或模型公式中的任何内容)。
在我展示公式时编写公式的另一个原因是易读性。从公式中获取对象名称可以让您更轻松地查看模型的内容。