我使用lapply一次通过一个自变量对一个因变量执行几个glm回归.现在我Pr(>|z|)对每个自变量特别感兴趣.但是,我不确定如何Pr(>|z|)使用来自lapply的列表进行报告.
如果我只是在一次运行一个模型:
coef(summary(fit))[,"Pr(>|z|)"]
或
summary(fit)$coefficients[,4]
将工作(如描述在这里),但试图用类似的东西lapply似乎不工作.我可以使用lapply和glm使用访问器方法或直接从模型调用来获取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)
你想做:
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)
运行时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)