当我在R中执行回归并使用类型因子时,它可以帮助我避免在数据中设置分类变量。但是,如何从回归中删除一个不重要的因子,只显示重要变量?
例如:
dependent <- c(1:10)
independent1 <- as.factor(c('d','a','a','a','a','a','a','b','b','c'))
independent2 <- c(-0.71,0.30,1.32,0.30,2.78,0.85,-0.25,-1.08,-0.94,1.33)
output <- lm(dependent ~ independent1+independent2)
summary(output)
这导致以下回归模型:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.6180 1.0398 4.441 0.00676 **
independent1b 3.7471 2.1477 1.745 0.14148
independent1c 5.5597 2.0736 2.681 0.04376 *
independent1d -3.7129 2.3984 -1.548 0.18230
independent2 -0.1336 0.7880 -0.170 0.87203
如果我想提出无关紧要的独立1级(b,d),我有办法做到这一点吗?
在这种情况下,将数据设置为具有分类变量很容易,但是当我包含周数或具有很多级别的其他因素时,它会变得不方便。
以下是使用分类变量构建模型的方法。正如您所看到的那样,最终构成数据更加困难,但也让我有更多的控制权。
regressionData <- data.frame(cbind(1:10,c(-0.71,0.30,1.32,0.30,2.78,0.85,-0.25,-1.08,-0.94,1.33),c(0,1,1,1,1,1,1,0,0,0),c(0,0,0,0,0,0,0,1,1,0),c(0,0,0,0,0,0,0,0,0,1),c(1,0,0,0,0,0,0,0,0,0)))
names(output) = c('dependent','independent2','independenta', 'independentb','independentc','independentd')
attach(regressionData)
result <- lm(dependent~independent2+independentb+independentc+independentd)
summary(result)
现在我可以删除independent2,因为它无关紧要
result <- lm(dependent~independentb+independentc+independentd)
summary(result)
我会删除独立的,因为它不重要
result <- lm(dependent~independentb+independentc)
summary(result)
但在这种情况下,调整后的R平方下降(我甚至不打算进行部分F检验),因为它会很重要,但在很多情况下这不是真的,我需要删除分类回归,因为它正在消耗自由度,这在这种情况下很重要,并可能掩盖其他重要变量的价值。
答案 0 :(得分:1)
如果您只想从输出中删除非重要级别但包含它们用于估算,您可以使用coeftest
包中的AER
函数,然后使用正确的indexig,您将获得你想要什么。
library(AER)
coeftest(output)[-c(2,4), ]
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.6180039 1.0397726 4.4413595 0.006756325
independent1c 5.5596699 2.0736190 2.6811434 0.043760158
independent2 -0.1335893 0.7880382 -0.1695214 0.872031752
如果您不想使用AER
包,您还可以执行以下操作:
summary(output)$coefficients[-c(2,4),]
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.6180039 1.0397726 4.4413595 0.006756325
independent1c 5.5596699 2.0736190 2.6811434 0.043760158
independent2 -0.1335893 0.7880382 -0.1695214 0.872031752
我更喜欢最后一个,因为您不需要安装额外的包。
我不知道这是否是您正在寻找的。 p>
答案 1 :(得分:1)
如果您愿意仅使用系数表而不是整个摘要,您可以这样做:
提取整个系数表:
ss <- coef(summary(output))
只选择您想要的行:
ss_sig <- ss[ss[,"Pr(>|t|)"]<0.05,]
printCoefmat
漂亮打印具有重要星等的系数表。
> printCoefmat(ss_sig)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.6180 1.0398 4.4414 0.006756 **
independent1c 5.5597 2.0736 2.6811 0.043760 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(这个答案类似于@Jilber,但它会自动为您找到不重要的行,而不是要求您手动指定它们。)
然而,我必须同意@Charlie上面的评论,这是不好的统计实践...人为地将预测因素分为显着/非显着性(p = 0.049和p = 0.051的预测因子将被区别对待),特别糟糕的是分类预测变量,其中重要的特定参数集将取决于对比度/哪个级别用作基线......
答案 2 :(得分:1)
您可以使用选项exclude
删除因子变量的级别:
lm(dependent ~ factor(independent1, exclude=c('b','d')) + independent2)
这样,因子b,d将不会包含在回归中。
干杯