如果我在R中有一个线性模型的汇总表,我怎样才能得到仅与交互估计相关联的p值,或者只是组拦截等,而不必计算行数?
例如,对于 lm(y ~ x + group)
等模型,其中 x
为连续且 group
为分类, lm
对象的汇总表具有以下估计值:
-
拦截
-
x,所有组的斜率
-
5与整体拦截的群体差异
-
5与整体坡度的组内差异 .
我想找出一种方法将每个这些作为一组p值,即使组的数量或模型公式发生变化 . 也许汇总表以某种方式用于将行组合在一起的信息?
以下是具有两个不同模型的示例数据集 . 第一个模型有四组不同的p值,我可能想单独得到,而第二个模型只有两组p值 .
x <- 1:100
groupA <- .5*x + 10 + rnorm(length(x), 0, 1)
groupB <- .5*x + 20 + rnorm(length(x), 0, 1)
groupC <- .5*x + 30 + rnorm(length(x), 0, 1)
groupD <- .5*x + 40 + rnorm(length(x), 0, 1)
groupE <- .5*x + 50 + rnorm(length(x), 0, 1)
groupF <- .5*x + 60 + rnorm(length(x), 0, 1)
myData <- data.frame(x = x,
y = c(groupA, groupB, groupC, groupD, groupE, groupF),
group = rep(c("A","B","C","D","E","F"), each = length(x))
)
myMod1 <- lm(y ~ x + group + x:group, data = myData)
myMod2 <- lm(y ~ group + x:group - 1, data = myData)
summary(myMod1)
summary(myMod2)
2 回答
您可以通过
summary()$coefficients
访问所有系数及其相关统计数据,如下所示:其中你只想要p值,即第4列:
最后,您只需要特定系数的p值,无论是截距还是交互项 . 一种方法是通过
grepl()
将系数名称(names(summary(myMod1)$coefficients[,4])
)与RegEx匹配,并使用grepl
作为索引返回的逻辑向量:现在有broom包来处理统计函数的输出 . 在这种情况下,使用
tidy()
函数:结果是data.frame,因此您可以轻松过滤交互术语(名称中包含冒号):
broom
与dplyr包配合得很好;例如,提取非交互组系数: