我一直在使用glm
函数进行回归分析,这对我很有帮助。我想知道,我想要回归的一些事情涉及大量的回归因素。我有两个主要问题:
summary(glm)
的p值部分可以完全排序吗?优选地,通过每个回归量的p值。实施例
A # sample data frame
names(A)
[1] Dog Cat Human Limbs Tail Height Weight Teeth.Count
a = names(A)[4:7]
glm( Dog ~ a, data = A, family = "binomial")
答案 0 :(得分:4)
关于第一个问题,请参阅as.formula
。基本上你想要做以下事情:
x <- names(A)[4:7]
regressors <- paste(x,collapse=" + ")
form <- as.formula(c("Dog ~ ",regressors))
glm(form, data = A, family = "binomial")
如果您想在模型中使用交互项,则需要使用不同的collapse=
参数使结构更复杂一些。该参数指定在向量的元素之间放置哪些符号。例如,如果您在上面的代码中指定"*"
,那么您将拥有一个包含所有可能交互的饱和模型。如果您只需要一些交互,但不是全部,则需要先创建包含所有交互的公式部分(使用“*”作为折叠参数),然后在单独的粘贴函数中添加其余项(使用“+” “作为崩溃的论点。总而言之,您希望创建一个与公式相同的字符串,然后将其转换为公式类。
对于第二个问题,您需要将摘要的输出转换为可以排序的数据结构。例如,数据框。假设你的glm模型的名称是model
:
library(plyr)
coef <- summary(model)[12]
coef.sort <- as.data.frame(coef)
names(coef.sort) <- c("Estimate","SE","Tval","Pval")
arrange(coef.sort,Pval)
将arrange()
的结果分配给varable,并根据需要继续使用。
答案 1 :(得分:3)
示例数据框:
set.seed(42)
A <- data.frame(Dog = sample(0:1, 100, TRUE), b = rnorm(100), c = rnorm(100))
a <- names(A)[2:3]
首先,您可以使用字符向量a
创建一个带有reformulate
的模型公式:
glm(Dog ~ a, data = A, family = "binomial")
form <- reformulate(a, "Dog")
# Dog ~ b + c
model <- glm(form, data = A, family = "binomial")
其次,这是一种通过p值对模型摘要进行排序的方法:
modcoef <- summary(model)[["coefficients"]]
modcoef[order(modcoef[ , 4]), ]
# Estimate Std. Error z value Pr(>|z|)
# b 0.23902684 0.2212345 1.0804232 0.2799538
# (Intercept) 0.20855908 0.2025642 1.0295951 0.3032001
# c -0.09287769 0.2191231 -0.4238608 0.6716673