1

我一直在使用该glm函数进行回归分析,它对我很好。不过我想知道,我想要回归的一些事情涉及大量的回归因素。我有两个主要问题:

  1. 是否可以为回归量提供文本向量?
  2. 的 p 值部分summary(glm)可以排序吗?最好通过每个回归器的 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")
4

2 回答 2

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=如果您想要模型中的交互项,则需要通过使用不同的参数使结构更加复杂。该参数指定在向量元素之间放置哪些符号。例如,如果您"*"在上面的代码中指定,您将拥有一个包含所有可能交互的饱和模型。如果您只需要一些交互,但不是全部,您将需要首先创建包含所有交互的公式部分(使用“*”作为折叠参数),然后在单独的粘贴函数中添加剩余的项(使用“+ ”作为折叠参数)。总而言之,您要创建一个与您的公式相同的字符串,然后将其转换为公式类。

对于第二个问题,您需要将 summary 的输出转换为可以排序的数据结构。例如,数据框。假设您的 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()给一个变量,然后根据需要继续使用它。

于 2013-07-05T07:53:14.580 回答
4

一个示例数据框:

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
于 2013-07-05T07:59:29.640 回答