假设我有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)
等
答案 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
最好放弃。它甚至检查了更多的变量,但在这种情况下,它没有产生更好的模型。
正如所指出的,通常仅基于数据优化模型没有多大意义。如果您仍然坚持,建议是交叉验证并查看模型是否仍然存在(根据此随机数据不应该存在)。此外,从实质性角度考虑该模型是否“有意义”(事实上非常建议),从不会受到伤害。