lm和预测 – 数据框架名称的一致性

在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)时,您只需要一个数据框,其中包含一个名称独立的变量(或模型公式中的任何内容).

在我展示它们时编写公式的另一个原因是易读性.从公式中获取对象名称可以让您更轻松地查看模型的内容.

点赞