繁体   English   中英

在R glm模型中选择统计上显着的变量

[英]Selecting the statistically significant variables in an R glm model

我有一个结果变量,比如说Y和100个可能影响Y的维度列表(比如X1 ... X100)。

运行我的glm并查看我的模型摘要后,我看到那些具有统计意义的变量。 我希望能够选择这些变量并运行另一个模型并比较性能。 有没有办法可以解析模型摘要并只选择那些重要的?

虽然@kith铺平了道路,但还有更多可以做的事情。 实际上,整个过程可以自动化。 首先,让我们创建一些数据:

x1 <- rnorm(10)
x2 <- rnorm(10)
x3 <- rnorm(10)
y <- rnorm(10)
x4 <- y + 5 # this will make a nice significant variable to test our code
(mydata <- as.data.frame(cbind(x1,x2,x3,x4,y)))

我们的模型是:

model <- glm(formula=y~x1+x2+x3+x4,data=mydata)

并且系数的布尔矢量确实可以通过以下方式提取:

toselect.x <- summary(model)$coeff[-1,4] < 0.05 # credit to kith

但这并不是全部! 另外,我们可以这样做:

# select sig. variables
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables
sig.formula <- as.formula(paste("y ~",relevant.x))  

编辑:正如后面的海报所指出的那样,后一行应该是sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))以包含所有变量。

并且只使用OP最初需要的重要变量来运行回归:

sig.model <- glm(formula=sig.formula,data=mydata)

在这种情况下,估计值将等于1,因为我们将x4定义为y + 5,这意味着完美的关系。

您可以通过“summary”功能访问glm结果的pvalues。 系数矩阵的最后一列称为“Pr(> | t |)”,并保存模型中使用的因子的p值。

这是一个例子:

#x is a 10 x 3 matrix
x = matrix(rnorm(3*10), ncol=3)
y = rnorm(10)
res = glm(y~x)
#ignore the intercept pval
summary(res)$coeff[-1,4] < 0.05

对于有Maxim.K命令问题的人

sig.formula <- as.formula(paste("y ~",relevant.x))

用这个

sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))

最终的代码就像

toselect.x <- summary(glmText)$coeff[-1,4] < 0.05 # credit to kith
# select sig. variables
relevant.x <- names(toselect.x)[toselect.x == TRUE] 
# formula with only sig variables
sig.formula <- as.formula(paste("y ~",paste(relevant.x, collapse= "+")))  

这可以解决你单独挑选第一个变量所面临的问题。

sig.formula < - as.formula(paste(“y~”,related.x))

你只粘贴相关的第一个变量。其他的被忽略(例如,尝试将条件反转为> 0.5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM