我正在尝试使用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))
答案 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