在R中一次丢弃一个预测器

时间:2014-02-25 10:08:36

标签: r statistics linear-regression

假设我有4个预测变量x1,x2,x3,x4。 我希望有一个代码可以一次删除每个预测器。

例如

set.seed(10)
y<-c(1:20)
x1<-c(1:20)*runif(20,min=0,max=2)
x2<-c(1:20)*runif(20,min=0,max=2)
x3<-c(1:20)*runif(20,min=0,max=2)
x4<-c(1:20)*runif(20,min=0,max=2)

lm1<- lm(y~x1+x2+x3+x4) #full model 

#drop each predictor once 

lm2.1<- lm(y~x2+x3+x4)
lm2.2<- lm(y~x1+x3+x4)
lm2.3 <- lm(y ~ x1+x2+x4)
lm2.4 <- lm(y ~ x1+x2+x3)

2 个答案:

答案 0 :(得分:5)

如果您想查看每个字词的贡献,可以使用drop1

drop1(lm1)

# Single term deletions
# 
# Model:
# y ~ x1 + x2 + x3 + x4
#        Df Sum of Sq    RSS    AIC
# <none>              104.15 43.002
# x1      1    15.465 119.61 43.771
# x2      1    64.166 168.31 50.602
# x3      1    29.485 133.63 45.987
# x4      1     0.910 105.06 41.176

这类似于anova(lm1, lm2.1, lm2.2, lm2.3, lm2.4)

答案 1 :(得分:1)

我将继续并假设您正在寻找以数据为导向的最佳模型。

自动化流程并找出哪个是最佳模型(数据明智):

step(lm(y~x1+x2+x3+x4))

在你的情况下,它产生:

lm(y~x1+x2+x3)

是最好的模特。

这也将产生每个模型的贡献。请注意,在这种情况下,它会考虑删除每个案例,并评估哪个变量最好丢弃。在这种情况下,显然X4最好放弃。它甚至检查了更多的变量,但在这种情况下,它没有产生更好的模型。

正如所指出的,通常仅基于数据优化模型没有多大意义。如果您仍然坚持,建议是交叉验证并查看模型是否仍然存在(根据此随机数据不应该存在)。此外,从实质性角度考虑该模型是否“有意义”(事实上非常建议),从不会受到伤害。