R - newdata 有 X 行,但变量有 X 行

数据挖掘 r 线性回归 机器学习模型
2022-03-09 10:36:12

我有一个包含 454 个变量的数据集,尺寸为 1142obs。我使用“插入符号”来分隔训练和测试数据集。
训练 = 99 var 的 858 obs
测试 = 99 var 的 284 obs

我像这样制作了一个线性回归模型(提前为响应前的额外 $ 符号道歉,我将其包括在此处,否则将无法正确显示):

lm1 <-lm(training$$response ~ training$balloons, data=training)

然后我尝试做出这样的预测:

lm.predict <-predict(lm1, newdata=testing)

R提出:

Warning message:  
'newdata' had 284 rows but variables found have 858 rows  

lm.predict还会生成一个长度为 858 个数字的向量,而不是 284 个。有什么想法吗?

1个回答

将您的问题缩减为最小的可重现示例并提供数据或生成数据。对于您的问题,我可以使用具有两列的数据框进行重现(我们不在乎它是 99 列还是 2 列):

training = data.frame(response=runif(858), balloons=runif(858))
testing = data.frame(response=runif(284), balloons=runif(284))

现在您正在拟合模型,并收到此错误:

lm1 <-lm(training$response ~ training$balloons, data=training)
lm.predict <-predict(lm1, newdata=testing)
## Warning message:
## 'newdata' had 284 rows but variables found have 858 rows 

您的问题是因为您在模型中指定向量(即training使用$列表示法的列)并且还在data参数中指定数据框(被忽略)。如果你把它排除在外,你会得到同样的错误:

> lm1 <-lm(training$response ~ training$balloons)
> lm.predict <-predict(lm1, newdata=testing)
Warning message:
'newdata' had 284 rows but variables found have 858 rows 

如果您的观察来自数据框,那么您不需要将数据指定为向量,您可以给出一个在数据框的上下文中评估的公式:

> lm1 <-lm(response ~ balloons, data=training)

进而:

> lm.predict <-predict(lm1, newdata=testing)

正如预期的那样,这是 284 个预测。