使用 R 因子进行预测

问题描述 投票:0回答:1

我对使用 R 中的因子进行多元线性回归感到困惑。A 是二元变量,编码为 1 和 -1 作为 lm 中的因子。那么,在进行预测时,我们如何对待 A=-1 和 A=1 的系数呢?我试图找出前五个观测值的拟合值,但似乎预测和我的计算结果并不相同。我在这里犯了什么错误?

set.seed(1)
expit <- function(x) 1 / (1 + exp(-x))
n <- 10000
X1 <- rnorm(n)
A <- 2*rbinom(n, 1, expit(X1))-1
X2 <- rnorm(n)
Y <- X1 + X2 + A*X1 + rnorm(n)
mydata <- data.frame(X1, A, X2, Y)

mydata$A <- as.factor(mydata$A)

mod <- lm(Y ~ X1 + X2 + as.factor(A) + as.factor(A):X1)

predict(mod, newdata = mydata[1:5,])

-0.2107963 0.2664868 -0.4601201 2.5115522 -0.1143373

coef(mod2)[1] + coef(mod2)[2]*mydata[1:5,"X1"] + coef(mod2)[3]*mydata[1:5,"X2"] + coef(mod2)[4]*as.integer(mydata[1:5,"A"]) + coef(mod2)[5]*as.integer(mydata[1:5,"A"])*mydata[1:5,"X1"] 

-1.4523706 0.6258031 -2.1150596 5.6605056 0.5332321

r
1个回答
0
投票

R 将因子视为从 1 开始的整数,然后针对每个连续的因子级别递增 1。 “级别”只是我们人类解释的标签,但对于计算机(和模型)来说,它们不被使用。

p1 <- predict(mod2, newdata = mydata[1:5,])
p2 <- coef(mod2)[1] + coef(mod2)[2]*mydata[1:5,"X1"] + 
  coef(mod2)[3]*mydata[1:5,"X2"] + 
  coef(mod2)[4]*as.integer(mydata[1:5,"A"]==1) + 
  coef(mod2)[5]*as.integer(mydata[1:5,"A"]==1)*mydata[1:5,"X1"] 

> all(p1==p2)
# [1] TRUE
© www.soinside.com 2019 - 2024. All rights reserved.