我正在运行很多回归,我只对一个特定变量的系数和p值的影响感兴趣。因此,在我的脚本中,我希望能够从glm摘要中提取p值(获得系数本身很容易)。我知道查看p值的唯一方法是使用summary(myReg)。还有其他方法吗?
e.g:
fit <- glm(y ~ x1 + x2, myData)
x1Coeff <- fit$coefficients[2] # only returns coefficient, of course
x1pValue <- ???
我已经尝试将fit$coefficients
视为矩阵,但我仍然无法简单地提取p值。
是否可以这样做?
谢谢!
答案 0 :(得分:47)
你想要
coef(summary(fit))[,4]
从summary(fit)
显示的表格输出中提取 p 值的列向量。在模型拟合上运行summary()
之前,实际上不会计算 p - 值。
顺便说一下,如果可以的话,使用提取器函数而不是深入研究对象:
fit$coefficients[2]
应该是
coef(fit)[2]
如果没有提取器功能,str()
是您的朋友。它允许您查看任何对象的结构,它允许您查看对象包含的内容以及如何提取它:
summ <- summary(fit)
> str(summ, max = 1)
List of 17
$ call : language glm(formula = counts ~ outcome + treatment, family = poisson())
$ terms :Classes 'terms', 'formula' length 3 counts ~ outcome + treatment
.. ..- attr(*, "variables")= language list(counts, outcome, treatment)
.. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
.. .. ..- attr(*, "dimnames")=List of 2
.. ..- attr(*, "term.labels")= chr [1:2] "outcome" "treatment"
.. ..- attr(*, "order")= int [1:2] 1 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(counts, outcome, treatment)
.. ..- attr(*, "dataClasses")= Named chr [1:3] "numeric" "factor" "factor"
.. .. ..- attr(*, "names")= chr [1:3] "counts" "outcome" "treatment"
$ family :List of 12
..- attr(*, "class")= chr "family"
$ deviance : num 5.13
$ aic : num 56.8
$ contrasts :List of 2
$ df.residual : int 4
$ null.deviance : num 10.6
$ df.null : int 8
$ iter : int 4
$ deviance.resid: Named num [1:9] -0.671 0.963 -0.17 -0.22 -0.956 ...
..- attr(*, "names")= chr [1:9] "1" "2" "3" "4" ...
$ coefficients : num [1:5, 1:4] 3.04 -4.54e-01 -2.93e-01 1.34e-15 1.42e-15 ...
..- attr(*, "dimnames")=List of 2
$ aliased : Named logi [1:5] FALSE FALSE FALSE FALSE FALSE
..- attr(*, "names")= chr [1:5] "(Intercept)" "outcome2" "outcome3" "treatment2" ...
$ dispersion : num 1
$ df : int [1:3] 5 4 5
$ cov.unscaled : num [1:5, 1:5] 0.0292 -0.0159 -0.0159 -0.02 -0.02 ...
..- attr(*, "dimnames")=List of 2
$ cov.scaled : num [1:5, 1:5] 0.0292 -0.0159 -0.0159 -0.02 -0.02 ...
..- attr(*, "dimnames")=List of 2
- attr(*, "class")= chr "summary.glm"
因此,我们注意到coefficients
组件可以使用coef()
提取,但其他组件没有提取器,例如null.deviance
,您可以将其提取为summ$null.deviance
答案 1 :(得分:4)
我过去曾使用过这种技术从summary
或拟合模型对象中提取预测数据:
coef(summary(m))[grepl("var_i_want$",row.names(coef(summary(m)))), 4]
让我可以轻松编辑我想要获取数据的变量。
或者正如@Ben指出的那样,使用match
或%in%
,比grepl
更清晰:
coef(summary(m))[row.names(coef(summary(m))) %in% "var_i_want" , 4]
答案 2 :(得分:2)
您可以直接输入名称
,而不是数字coef(summary(fit))[,'Pr(>|z|)']
系数摘要中提供的其他数据:
Estimate Std. Error z value Pr(>|z|)
答案 3 :(得分:1)
嗯,这将是另一种方式,但不是最有效的方式来执行它:
a = coeftable(model).cols[4]
pVals = [ a[i].v for i in 1:length(a) ]
这确保了glm中提取的值不在StatsBase中。 在那里,你可以根据你的要求玩pVals。 希望能帮助到你, EBBY
答案 4 :(得分:1)