R:列车数据和测试数据具有相同的预测

时间:2018-04-03 06:44:26

标签: r lm predict

我正在尝试使用lm和预测函数来测试预测是否足够正确。事实证明,列车数据和测试数据具有相同的预测。

set.seed(1);
x = matrix(rnorm(300*100),300,100)
y = rnorm(300);
test.x = matrix(rnorm(300*100),300,100)
test.y = rnorm(300);

xy = data.frame(y, x)
fit = lm(y~x, xy)

x.df = data.frame(x)
pred1 = predict(fit, newdata=x.df)

test.x.df = data.frame(test.x)
pred = predict(fit, newdata=test.x.df)

sum(abs(pred1-pred))

1 个答案:

答案 0 :(得分:1)

lm()中,您使用的是公式y ~ x。虽然您的数据中有一列y,但没有列x。因此,虽然lm()正在使用您的所有x列,但它的名称错误

names(fit$model)
[1] "y" "x"

每当您使用该模型致电predict()时,它都会返回模型的拟合值,因为它不匹配列。

将其更改为:

fit = lm(y ~ ., xy)

你会看到它看起来不同:

names(fit$model)
[1] "y"    "X1"   "X2"   "X3"   "X4"   "X5"   "X6"   "X7"   "X8"   "X9"   "X10" 
... 
[100] "X99"  "X100"

最后,它将使用您在newdata参数中传递的数据:

sum(abs(pred1-pred))
[1] 196.9676