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

时间:2013-12-17 00:53:42

标签: r

在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中完全相同的名称?

1 个答案:

答案 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的变量(或模型公式中的任何内容)。

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