提问人:Sephirothmn 提问时间:11/11/2023 最后编辑:Sephirothmn 更新时间:11/11/2023 访问量:18
如何获得 Games-Howell 检验的单尾 p 值(由大多数 R 函数计算)?
How do I obtain a one-tailed p-value for Games-Howell's test (as calculated by most R functions)?
问:
我试图理解:
1 - 为什么 p 值的计算方式与 Games Howell 检验中的计算方式相同,并且
2 - 如何修改 R 函数以获得检验的单侧(替代:更大)p 值
在计算测试的 p 值时,我能找到的大多数 R 函数(此处和此处)都是这样计算的:
p <- ptukey(t * sqrt(2), groups, df, lower.tail = FALSE)
跟:
- t:韦尔奇 t 统计量的绝对值
- groups:被比较的组数
- df:自由度,使用韦尔奇校正估计
- sqrt(2): q=t*sqrt(2),其中 q 是 Tukey 检验
我找不到一本手册或一篇论文来解释该 p 值背后的数学原理。例如,为什么这个双侧检验的 p 值是这样计算的,而不是这样计算的:
p <- 2 * ptukey(t * sqrt(2), groups, df, lower.tail = FALSE)
在双侧检验中,p 值不应该是我在指定的 Tukey 分布中看到比 q (t*sqrt(2)) 更极端的值的概率吗?我希望通过找到获得比 |t|*sqrt(2) 更极端的值的概率并将该值乘以 2 来完成此计算,因为 Tukey 的分布是对称的。 我是否太习惯于正态分布,错过了一些重要的东西?
此外,如果有人能为我指出正确的方向来修改以下 R 函数以计算 Games-Howell 测试的“单侧”版本,我将不胜感激(具体来说,我对实现替代“B 组的均值> A 组的均值”感兴趣):
(功能摘自:https://rpubs.com/aaronsc32/games-howell-test )
games.howell <- function(grp, obs) {
#Create combinations
combs <- combn(unique(grp), 2)
# Statistics that will be used throughout the calculations:
# n = sample size of each group
# groups = number of groups in data
# Mean = means of each group sample
# std = variance of each group sample
n <- tapply(obs, grp, length)
groups <- length(tapply(obs, grp, length))
Mean <- tapply(obs, grp, mean)
std <- tapply(obs, grp, var)
statistics <- lapply(1:ncol(combs), function(x) {
mean.diff <- Mean[combs[2,x]] - Mean[combs[1,x]]
#t-values
t <- abs(Mean[combs[1,x]] - Mean[combs[2,x]]) / sqrt((std[combs[1,x]] / n[combs[1,x]]) + (std[combs[2,x]] / n[combs[2,x]]))
# Degrees of Freedom
df <- (std[combs[1,x]] / n[combs[1,x]] + std[combs[2,x]] / n[combs[2,x]])^2 / # Numerator Degrees of Freedom
((std[combs[1,x]] / n[combs[1,x]])^2 / (n[combs[1,x]] - 1) + # Part 1 of Denominator Degrees of Freedom
(std[combs[2,x]] / n[combs[2,x]])^2 / (n[combs[2,x]] - 1)) # Part 2 of Denominator Degrees of Freedom
#p-values
p <- ptukey(t * sqrt(2), groups, df, lower.tail = FALSE)
# Sigma standard error
se <- sqrt(0.5 * (std[combs[1,x]] / n[combs[1,x]] + std[combs[2,x]] / n[combs[2,x]]))
# Upper Confidence Limit
upper.conf <- lapply(1:ncol(combs), function(x) {
mean.diff + qtukey(p = 0.95, nmeans = groups, df = df) * se
})[[1]]
# Lower Confidence Limit
lower.conf <- lapply(1:ncol(combs), function(x) {
mean.diff - qtukey(p = 0.95, nmeans = groups, df = df) * se
})[[1]]
# Group Combinations
grp.comb <- paste(combs[1,x], ':', combs[2,x])
# Collect all statistics into list
stats <- list(grp.comb, mean.diff, se, t, df, p, upper.conf, lower.conf)
})
# Unlist statistics collected earlier
stats.unlisted <- lapply(statistics, function(x) {
unlist(x)
})
# Create dataframe from flattened list
results <- data.frame(matrix(unlist(stats.unlisted), nrow = length(stats.unlisted), byrow=TRUE))
# Select columns set as factors that should be numeric and change with as.numeric
results[c(2, 3:ncol(results))] <- round(as.numeric(as.matrix(results[c(2, 3:ncol(results))])), digits = 3)
# Rename data frame columns
colnames(results) <- c('groups', 'Mean Difference', 'Standard Error', 't', 'df', 'p', 'upper limit', 'lower limit')
return(results)
}
任何帮助或建议都非常感谢。
我查看了 Games-Howell 的原始论文,但他们只谈到了双尾测试,并说测试应该按照我上面引用的 R 函数中的实现来执行,没有进一步的理由或解释(对于统计学家来说,这可能很明显,这是正确的方法,不幸的是,这对我来说并不明显)。
答: 暂无答案
评论