Omega im Quadrat für das Maß der Wirkung in R?

10

Das Statistikbuch, das ich lese, empfiehlt Omega-Quadrat, um die Auswirkungen meiner Experimente zu messen. Ich habe bereits unter Verwendung eines Split-Plot-Designs (Mischung aus Innersubjekten und Zwischensubjektdesign) bewiesen, dass meine Innersubjektfaktoren mit p <0,001 und F = 17 statistisch signifikant sind.

Jetzt möchte ich sehen, wie groß der Unterschied ist ... gibt es irgendwo eine Implementierung von Omega im Quadrat für R (oder Python? Ich weiß ... man kann träumen;). Die Suche im Internet nach R-bezogenen Dingen ist eine Schmerz die * , ich weiß nicht, wie ich es schaffe, Sachen mit C zu finden.

Vielen Dank!

levesque
quelle
3
Mir ist eine solche Funktion nicht bekannt, aber vielleicht könnte sich jemand die Formeln in Olejnik und Algina (2003) cps.nova.edu/marker/olejnik2003.pdf ansehen und eine Funktion schreiben
Jeromy Anglim
3
@ Jeromy Schöne Referenz! Auch dieser ist einen Blick wert: Empfohlene Effektgrößenstatistik für Designs mit wiederholten Messungen
chl
2
@chl Danke. Anscheinend verallgemeinert ezANOVA () im ez-Paket in R verallgemeinerte eta im Quadrat.
Jeromy Anglim

Antworten:

7

Eine Funktion zur Berechnung des Omega-Quadrats ist einfach zu schreiben. Diese Funktion nimmt das vom aov-Test zurückgegebene Objekt und berechnet und gibt das Omega-Quadrat zurück:

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)
}

edit: aktualisierte Funktion für n-way aov Modelle:

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
quelle
3

Ich musste kürzlich ein melden .ω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
}

Es ist eine unordentliche Funktion, die leicht bereinigt werden kann. Es berechnet das partielle und sollte wahrscheinlich nur für faktorielle Designs zwischen Subjekten verwendet werden.ω2

Stephen Martin
quelle
2

Ich würde vorschlagen, dass das verallgemeinerte Eta-Quadrat als geeigneteres Maß für die Effektgröße angesehen wird ( ref , ref ). Es ist in der ANOVA-Ausgabe im ez-Paket für R enthalten.

Mike Lawrence
quelle
5
Tatsächlich ist eta-squared eine sehr positiv voreingenommene Statistik. Es ist daher in dieser Situation viel schlimmer als Omega-Quadrat, obwohl es aufgrund seiner Einfachheit populärer ist.
Ich stimme dem Benutzer oben zu. Hier ist ein Link zum Sichern. daniellakens.blogspot.nl/2015/06/…
Deleet