Проверка устойчивости одностороннего анова при нарушении предположения о независимости - PullRequest
0 голосов
/ 16 ноября 2018

Как заголовок, я хочу проверить надежность одностороннего анова, когда допущение независимости нарушается.Сценарий есть корреляция между различными подгруппами.Я использовал 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)
...