从lapply的glm拟合列表中提取p值

5
我正在使用lapply逐个独立变量执行多个glm回归来确定一个因变量。现在我特别关注每个独立变量的Pr(>|z|)。但是,我不确定如何从lapply的列表中仅报告Pr(>|z|)。如果我只运行一个模型: coef(summary(fit))[,"Pr(>|z|)"] 或者 summary(fit)$coefficients[,4] 会起作用(如here所述),但尝试类似于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
2个回答

9

您想要做的事情是:

lapply(fits, function(f) summary(f)$coefficients[,4])

然而,如果每个项只是一个p值,您可能更喜欢使用向量而不是列表,因此您可以使用sapply而不是lapply

sapply(fits, function(f) summary(f)$coefficients[,4])

6
当您运行lapply(fits, summary)时,它会创建一个summary.glm对象的列表,每个对象都使用print.summary.glm进行打印。
如果您保存这个列表,可以使用htmltools::tagList(lapply(fits, summary))将其转换为HTML格式。
 summaries <- lapply(fits, summary)

您可以随后提取系数矩阵。
 coefmat <- lapply(summaries, '[[', 'coefficients')

然后是第四列

 lapply(coefmat, '[', , 4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接