R:预测新数据集的值
R: predict values on new dataset
我将一个模型拟合到训练数据集 (DT1
) 并希望基于同一模型并在新数据集 (DT2
) 上使用完全相同的参数进行预测。
这是我试过的:
library(data.table)
set.seed(1)
n <- 10
# Sample 1
DT1 <- data.table(x = rnorm(n), y = rnorm(n))
mdl <- DT1[, lm(y ~ poly(x, 3))]
# Sample 2
DT2 <- data.table(x = rnorm(n))
DT2[, yhat_a := cbind(1, x, x**2, x**3) %*% coef(mdl)]
DT2[, yhat_b := predict.lm(mdl)]
DT2[, yhat_c := predict.lm(mdl, type = "terms")]
DT2[, yhat_d := predict.lm(mdl, DT2)]
DT2[, yhat_e := predict.lm(mdl, DT2, type = "terms")]
预期预测应对应于 yhat_a
,但如您所见,predict.lm()
函数的 none 产生预期预测。
> print(DT2)
x yhat_a yhat_b yhat_c yhat_d yhat_e
1: 0.91897737 -2.9089955 0.39129117 0.14244620 -0.02386652 -0.27271149
2: 0.78213630 -2.1789312 0.93415007 0.68530510 0.25958313 0.01073816
3: 0.07456498 0.1452663 -0.01907297 -0.26791794 0.95832991 0.70948493
4: -1.98935170 -6.8834694 -2.13507075 -2.38391572 -4.25695978 -4.50580475
5: 0.61982575 -1.4310139 0.85431936 0.60547439 0.53332504 0.28448007
6: -0.05612874 0.3090645 0.01438047 -0.23446450 0.94734161 0.69849664
7: -0.15579551 0.3784421 0.70651054 0.45766557 0.90972644 0.66088147
8: -1.47075238 -3.1916187 0.34014661 0.09130164 -1.93990943 -2.18875440
9: -0.47815006 0.2741404 0.59593158 0.34708661 0.61523830 0.36639333
10: 0.41794156 -0.6792907 0.80586363 0.55701866 0.77941821 0.53057324
我错过了什么?
查看 答案了解更多信息。 poly()
的默认值包括 raw = FALSE
,其中列被缩放为正交。
如果您设置 raw = TRUE
,那么您手动计算的 yhat_a
将等于您的 yhat_d
。
我将一个模型拟合到训练数据集 (DT1
) 并希望基于同一模型并在新数据集 (DT2
) 上使用完全相同的参数进行预测。
这是我试过的:
library(data.table)
set.seed(1)
n <- 10
# Sample 1
DT1 <- data.table(x = rnorm(n), y = rnorm(n))
mdl <- DT1[, lm(y ~ poly(x, 3))]
# Sample 2
DT2 <- data.table(x = rnorm(n))
DT2[, yhat_a := cbind(1, x, x**2, x**3) %*% coef(mdl)]
DT2[, yhat_b := predict.lm(mdl)]
DT2[, yhat_c := predict.lm(mdl, type = "terms")]
DT2[, yhat_d := predict.lm(mdl, DT2)]
DT2[, yhat_e := predict.lm(mdl, DT2, type = "terms")]
预期预测应对应于 yhat_a
,但如您所见,predict.lm()
函数的 none 产生预期预测。
> print(DT2)
x yhat_a yhat_b yhat_c yhat_d yhat_e
1: 0.91897737 -2.9089955 0.39129117 0.14244620 -0.02386652 -0.27271149
2: 0.78213630 -2.1789312 0.93415007 0.68530510 0.25958313 0.01073816
3: 0.07456498 0.1452663 -0.01907297 -0.26791794 0.95832991 0.70948493
4: -1.98935170 -6.8834694 -2.13507075 -2.38391572 -4.25695978 -4.50580475
5: 0.61982575 -1.4310139 0.85431936 0.60547439 0.53332504 0.28448007
6: -0.05612874 0.3090645 0.01438047 -0.23446450 0.94734161 0.69849664
7: -0.15579551 0.3784421 0.70651054 0.45766557 0.90972644 0.66088147
8: -1.47075238 -3.1916187 0.34014661 0.09130164 -1.93990943 -2.18875440
9: -0.47815006 0.2741404 0.59593158 0.34708661 0.61523830 0.36639333
10: 0.41794156 -0.6792907 0.80586363 0.55701866 0.77941821 0.53057324
我错过了什么?
查看 poly()
的默认值包括 raw = FALSE
,其中列被缩放为正交。
如果您设置 raw = TRUE
,那么您手动计算的 yhat_a
将等于您的 yhat_d
。