2

我一直在用 lm() 在 R 中拟合一个模型,并使用矩阵乘法“手动”进行预测。

当根据使用 predict.lm() 所做的预测检查结果时,我注意到结果有所不同,但只有当我对新数据集(即未训练模型的数据集)我应用的数据集进行预测时预测变量的多项式(或样条)。

谁能解释为什么会这样?我认为无论我使用的是新数据集还是多项式,这两种方法都会给出相同的答案。

下面的可重现示例。

# Make data, fit model
set.seed(1); df_train = data.frame(matrix(rnorm(3000), ncol = 3))
set.seed(2); df_test = data.frame(matrix(rnorm(300), ncol = 3))
fit = lm(X1 ~ poly(X2, 2) + poly(X3, 2), data = df_train)
# fit = lm(X1 ~ X2 + X3, data = df_train) #no issues using linear terms
mm_train = model.matrix(formula(fit), df_train)
mm_test = model.matrix(formula(fit), df_test)

# Using predict and matrix multiplication give same results on train data
preds_1 = round(predict(fit, df_train), 5)
preds_2 = round(mm_train %*% fit$coefficients, 5)
all(preds_1 == preds_2) #TRUE

# Using predict and matrix multiplication give different results on test data
preds_1 = round(predict(fit, df_test), 5) 
preds_2 = round(mm_test %*% fit$coefficients, 5)
all(preds_1 == preds_2)  #FALSE
4

0 回答 0