Omega do kwadratu dla miary efektu w R?

10

W książce statystyk, którą czytam, zaleca się omega kwadrat do zmierzenia efektów moich eksperymentów. Udowodniłem już, że stosując projekt podzielonego wykresu (połączenie projektu między podmiotami i projektu między podmiotami), moje czynniki w obrębie podmiotów są statystycznie istotne przy p <0,001 i F = 17.

Teraz chcę zobaczyć, jak duża jest różnica ... czy istnieje gdzieś implementacja omegi kwadratowej dla R (lub python? Wiem ... można marzyć;) Wyszukiwanie w Internecie rzeczy związanych z R jest ból * , nie wiem, jak udaje mi się znaleźć rzeczy z C.

dzięki!

levesque
źródło
3
Nie znam takiej funkcji, ale być może ktoś mógłby spojrzeć na formuły w Olejniku i Alginie (2003) cps.nova.edu/marker/olejnik2003.pdf i napisać funkcję
Jeromy Anglim
3
@Jeromy Nice odniesienia! Warto też przyjrzeć się temu: Zalecane statystyki wielkości efektu dla projektów z powtarzanymi pomiarami (BRM 2005 37 (3)), j.mp/cT9uEQ
chl
2
@chl Thanks. Najwyraźniej ezANOVA () w pakiecie ez w raportach R uogólnił eta do kwadratu.
Jeromy Anglim

Odpowiedzi:

7

Funkcja obliczania kwadratu omega jest łatwa do napisania. Ta funkcja pobiera obiekt zwrócony przez test aov i oblicza i zwraca i omega do kwadratu:

omega_sq <- function(aovm){
    sum_stats <- summary(aovm)[[1]]
    SSm <- sum_stats[["Sum Sq"]][1]
    SSr <- sum_stats[["Sum Sq"]][2]
    DFm <- sum_stats[["Df"]][1]
    MSr <- sum_stats[["Mean Sq"]][2]
    W2 <- (SSm-DFm*MSr)/(SSm+SSr+MSr)
    return(W2)
}

edycja: zaktualizowana funkcja dla modeli n-way aov:

omega_sq <- function(aov_in, neg2zero=T){
    aovtab <- summary(aov_in)[[1]]
    n_terms <- length(aovtab[["Sum Sq"]]) - 1
    output <- rep(-1, n_terms)
    SSr <- aovtab[["Sum Sq"]][n_terms + 1]
    MSr <- aovtab[["Mean Sq"]][n_terms + 1]
    SSt <- sum(aovtab[["Sum Sq"]])
    for(i in 1:n_terms){
        SSm <- aovtab[["Sum Sq"]][i]
        DFm <- aovtab[["Df"]][i]
        output[i] <- (SSm-DFm*MSr)/(SSt+MSr)
        if(neg2zero & output[i] < 0){output[i] <- 0}
    }
    names(output) <- rownames(aovtab)[1:n_terms]

    return(output)
}
Janak Mayer
źródło
3

Niedawno musiałem zgłosić .ω2

partialOmegas <- function(mod){
    aovMod <- mod
    if(!any(class(aovMod) %in% 'aov')) aovMod <- aov(mod)
    sumAov     <- summary(aovMod)[[1]]
    residRow   <- nrow(sumAov)
    dfError    <- sumAov[residRow,1]
    msError    <- sumAov[residRow,3]
    nTotal     <- nrow(model.frame(aovMod))
    dfEffects  <- sumAov[1:{residRow-1},1]
    ssEffects  <- sumAov[1:{residRow-1},2]
    msEffects  <- sumAov[1:{residRow-1},3]
    partOmegas <- abs((dfEffects*(msEffects-msError)) /
                  (ssEffects + (nTotal -dfEffects)*msError))
    names(partOmegas) <- rownames(sumAov)[1:{residRow-1}]
    partOmegas
}

Jest to brudna funkcja, którą można łatwo wyczyścić. Oblicza częściowy i prawdopodobnie powinien być stosowany tylko w układach silnych między podmiotami.ω2

Stephen Martin
źródło
2

Sugerowałbym, że uogólniony kwadrat eta jest uważany ( ref , ref ) za bardziej odpowiednią miarę wielkości efektu. Jest zawarty w wyjściu ANOVA w pakiecie ez dla R.

Mike Lawrence
źródło
5
W rzeczywistości eta-kwadrat jest wysoce pozytywnie tendencyjną statystyką. Jest zatem znacznie gorszy w tej sytuacji niż kwadrat omega, choć ze względu na swoją prostotę jest bardziej popularny.
Zgadzam się z użytkownikiem powyżej. Oto link do kopii zapasowej. daniellakens.blogspot.nl/2015/06/…
Deleet