Как заголовок, я хочу проверить надежность одностороннего анова, когда допущение независимости нарушается.Сценарий есть корреляция между различными подгруппами.Я использовал mvrnorm для генерации коррелированных наборов данных и выполняю имитацию 1000 раз, чтобы рассчитать мощность anova для каждой корреляции от 0,1 до 0,9.
Однако для каждой итерации значение p для anova остается постоянным.Я надеюсь узнать, не подходит ли это из-за того, как я генерировал коррелированные подмножества, или из-за чего-то еще ??На самом деле я нахожу, что значение p меняется, но очень и очень незначительно ... Я ожидаю увидеть, когда корреляция увеличится, мощность уменьшится ??, но в моем случае это либо 1, либо 0 ... (я поставилSD для каждой группы будет 1 для простоты).
myfun3 <- function(index, cor, samplesize, mean1, mean2, mean3){
library(MASS)
data = mvrnorm(n=samplesize, mu=c(mean1, mean2, mean3),
Sigma=matrix(c(1, rep(cor, 3), 1, rep(cor, 3), 1), 3, 3), empirical=TRUE)
newdat<- data.frame(data)
library(tidyr)
newdat_long <- gather(newdat, group, y, X1:X3, factor_key = TRUE)
aov_result <- summary(aov(y ~ group, newdat_long))[[1]][["Pr(>F)"]][[1]]
ks_result <- kruskal.test(y ~ group, newdat_long)$p.value
return(list(aov_result, ks_result))
}
cal_power_cor <- function(iteration = 1000, samplesize=30, cor, mean1 = 10, mean2=10.5, mean3=10.8){
result_list <- lapply(1:iteration, myfun3, samplesize = samplesize, cor = cor, mean1 = mean1, mean2 = mean2,
mean3 = mean3)
result <-data.frame(matrix(unlist(result_list), ncol = 2, byrow = T))
colnames(result)<- c("anova", "kruskal")
power_aov <- sum(result$anova<0.05)/1000
power_kruskal <- sum(result$kruskal<0.05)/1000
return(list("power_aov" = power_aov, "power_kruskal" = power_kruskal))
}
cal_power_cor(cor = 0.2)
cal_power_cor(cor = 0.5)
cal_power_cor(cor = 0.9)