R中韦尔奇校正的单向方差分析的事后测试

朱利普

我已经oneway.test()在R中使用韦氏校正进行单向ANOVA测试,因为我有违反等方差假设的数据(变换不能解决问题)。

一个简单的数据示例:

> dput(df)
structure(list(Count = c(13, 14, 14, 12, 11, 13, 14, 15, 13, 
12, 20, 15, 9, 5, 13, 14, 7, 17, 18, 14, 12, 12, 13, 14, 11, 
10, 15, 14, 14, 13), Group = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a", "b", "c"
), class = "factor")), .Names = c("Count", "Group"), row.names = c(NA, 
-30L), class = "data.frame")

library(car) 
grp = as.factor(c(rep(1, 10), rep(2, 10),rep(3, 10)))
leveneTest(df$Count,grp) #unequal variances

#one-way ANOVA with welch's correction
oneway.test(Count ~ Group, data=df, na.action=na.omit, var.equal=FALSE)

我有多个小组,所以我现在想进行成对事后测试。无论如何,要对oneway.test()函数中的对象执行此操作?如果没有,如何对方差不相等的组进行成对测试?我无法在线找到该问题的答案。任何意见,将不胜感激。

r2evans

这是两种方法:

数据

library(car) 
df <- structure(list(Count = c(13, 14, 14, 12, 11, 13, 14, 15, 13, 12, 20, 15, 9, 5, 13, 14, 7, 17, 18, 14, 12, 12, 13, 14, 11, 10, 15, 14, 14, 13),
                     Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a", "b", "c" ), class = "factor")),
                .Names = c("Count", "Group"),
                row.names = c(NA, -30L), class = "data.frame")

基数R

首先,一组唯一的Group因素

allPairs <- expand.grid(levels(df$Group), levels(df$Group))
## http://stackoverflow.com/questions/28574006/unique-combination-of-two-columns-in-r/28574136#28574136
allPairs <- unique(t(apply(allPairs, 1, sort)))
allPairs <- allPairs[ allPairs[,1] != allPairs[,2], ]
allPairs
##      [,1] [,2]
## [1,] "a"  "b" 
## [2,] "a"  "c" 
## [3,] "b"  "c" 

现在分析:

allResults <- apply(allPairs, 1, function(p) {
    dat <- df[ df$Group %in% p, ]
    ret <- oneway.test(Count ~ Group, data = dat, na.action = na.omit, var.equal = FALSE)
    ret$groups <- p
    ret
})
length(allResults)
## [1] 3
allResults[[1]]
##  One-way analysis of means (not assuming equal variances)
## data:  Count and Group
## F = 0.004, num df = 1.000, denom df = 10.093, p-value = 0.9508

如果您希望这是一个矩阵,则可能是这样:

mm <- diag(length(levels(df$Group)))
dimnames(mm) <- list(levels(df$Group), levels(df$Group))
pMatrix <- lapply(allResults, function(res) {
    ## not fond of out-of-scope assignment ...
    mm[res$groups[1], res$groups[2]] <<- mm[res$groups[2], res$groups[1]] <<- res$p.value
})
mm
##           a         b         c
## a 1.0000000 0.9507513 0.6342116
## b 0.9507513 1.0000000 0.8084057
## c 0.6342116 0.8084057 1.0000000

(对于F统计量,这可以轻松完成。)

使用 dplyr

首先,一组唯一的Group因素

library(dplyr)
## http://stackoverflow.com/questions/28574006/unique-combination-of-two-columns-in-r/28574136#28574136
allPairs <- expand.grid(levels(df$Group), levels(df$Group), stringsAsFactors = FALSE)  %>%
    filter(Var1 != Var2) %>%
    mutate(key = paste0(pmin(Var1, Var2), pmax(Var1, Var2), sep='')) %>%
    distinct(key) %>%
    select(-key)
allPairs
##   Var1 Var2
## 1    b    a
## 2    c    a
## 3    c    b

如果顺序确实很重要,则可以dplyr::arrange(Var1, Var2)在调用之后,尽早添加到此管道中expand.grid

现在分析:

ret <- allPairs %>%
    rowwise() %>%
    do({
        data.frame(.,
                   oneway.test(Count ~ Group, filter(df, Group %in% c(.$Var1, .$Var2)),
                               na.action = na.omit, var.equal = FALSE)[c('statistic', 'p.value')],
                   stringsAsFactors = FALSE)
    })

ret
## Source: local data frame [3 x 4]
## Groups: <by row>
##   Var1 Var2   statistic   p.value
## 1    b    a 0.004008909 0.9507513
## 2    c    a 0.234782609 0.6342116
## 3    c    b 0.061749571 0.8084057

(我没有对这两种方法的性能做出任何声明;通常像这样的示例那样,其中的一种数据很少,但是另一种数据会以更大的数据集领先。它们似乎都执行相同的统计成对比较。结果相同。交给您!)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R使用事后模式运行多个独立的单向方差分析

来自分类Dev

R - 混合设计方差分析事后检验

来自分类Dev

R:如何使用 cld 函数从单向方差分析中获取结果

来自分类Dev

R中的阶乘方差分析

来自分类Dev

R中的边际方差分析

来自分类Dev

R中的阶乘方差分析

来自分类Dev

Posthoc测试在R中使用Multcomp嵌套方差分析

来自分类Dev

进行方差分析测试。列中的p值。

来自分类Dev

SAS中的单向随机效应方差分析:PROC GLM还是MIXED?

来自分类Dev

将 SAS 中的数据集转换为单向方差分析

来自分类Dev

从R中的方差分析(glm)中提取残留偏差

来自分类Dev

在R中循环许多单侧方差分析

来自分类Dev

嵌套在R中的3种方差分析

来自分类Dev

在R中循环许多单侧方差分析

来自分类Dev

在R中自动执行多个主题内方差分析

来自分类Dev

如何解释R中双向方差分析的结果?

来自分类Dev

如何为lm()建立平衡的单向方差分析

来自分类Dev

高方差分析的方差分析

来自分类Dev

如何从R中的重复测量方差分析模型中获得残差

来自分类Dev

双向方差分析-在r中重复测量,缺少理想效果

来自分类Dev

如何为R中的重复测量方差分析建模

来自分类Dev

如何用R中的条件p值和置信区间绘制方差分析?

来自分类Dev

R中2x2x2方差分析的结构数据

来自分类Dev

如何解释 R 中的双向方差分析表 (lmer) 输出?

来自分类Dev

与方差分析一起替代r

来自分类Dev

尝试创建大小不等R的方差分析表

来自分类Dev

如何估算R的变化来源?(用于双向方差分析)

来自分类Dev

尝试创建大小不等R的方差分析表

来自分类Dev

对 R 中方差分析的两个因素

Related 相关文章

热门标签

归档