从glm的lapply列表中提取p值

nof*_*lly 5 r lapply glm

我使用lapply一次通过一个自变量对一个因变量执行几个glm回归.现在我Pr(>|z|)对每个自变量特别感兴趣.但是,我不确定如何Pr(>|z|)使用来自lapply的列表进行报告.

如果我只是在一次运行一个模型: coef(summary(fit))[,"Pr(>|z|)"]summary(fit)$coefficients[,4] 将工作(如描述在这里),但试图用类似的东西lapply似乎不工作.我可以使用lapplyglm使用访问器方法或直接从模型调用来获取p值吗?

#mtcars dataset
vars <- names(mtcars)[2:8]
fits <- lapply(vars, function(x) {glm(substitute(mpg ~ i, list(i = as.name(x))), family=binomial, data = mtcars)})
lapply(fits,summary) # this works
lapply(fits, coefficients) # this works
#lapply(fits, summary(fits)$coefficients[,4])# this for example does not work
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 9

你想做:

lapply(fits, function(f) summary(f)$coefficients[,4])
Run Code Online (Sandbox Code Playgroud)

但是,如果每个项目只是一个p值,您可能宁愿使用向量而不是列表,因此您可以使用sapply而不是lapply:

sapply(fits, function(f) summary(f)$coefficients[,4])
Run Code Online (Sandbox Code Playgroud)


mne*_*nel 6

运行时lapply(fits, summary),会创建一个summary.glm对象列表,每个对象都使用打印print.summary.glm

如果你保存这个

 summaries <- lapply(fits, summary)
Run Code Online (Sandbox Code Playgroud)

然后,您可以浏览并提取系数矩阵

 coefmat <- lapply(summaries, '[[', 'coefficients')
Run Code Online (Sandbox Code Playgroud)

然后是第4栏

 lapply(coefmat, '[', , 4)
Run Code Online (Sandbox Code Playgroud)