Omega kuadrat untuk mengukur efek dalam R?

10

Buku statistik yang saya baca merekomendasikan omega kuadrat untuk mengukur efek percobaan saya. Saya telah membuktikan menggunakan desain plot terpisah (campuran antara subyek dan desain antara subyek) bahwa faktor dalam subyek saya signifikan secara statistik dengan p <0,001 dan F = 17.

Sekarang saya ingin melihat seberapa besar perbedaannya ... apakah ada implementasi omega kuadrat di suatu tempat untuk R (atau python? Saya tahu ... orang dapat bermimpi;) Mencari di internet untuk hal-hal yang berkaitan dengan R adalah sakit * , saya tidak tahu bagaimana saya bisa menemukan barang dengan C.

Terima kasih!

levesque
sumber
3
Saya tidak mengetahui fungsi seperti itu, tetapi mungkin seseorang dapat melihat formula dalam Olejnik dan Algina (2003) cps.nova.edu/marker/olejnik2003.pdf dan menulis fungsi
Jeromy Anglim
3
@ Jerom Referensi bagus! Yang ini juga layak untuk dilihat: Statistik ukuran efek yang disarankan untuk desain tindakan berulang (BRM 2005 37 (3)), j.mp/cT9uEQ
chl
2
@ chl, terima kasih. Rupanya, ezANOVA () dalam paket ez dalam laporan R generalisasi eta kuadrat.
Jeromy Anglim

Jawaban:

7

Fungsi untuk menghitung omega kuadrat mudah untuk ditulis. Fungsi ini mengambil objek yang dikembalikan oleh tes aov, dan menghitung serta mengembalikan dan omega kuadrat:

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: fungsi yang diperbarui untuk model aov n-way:

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

Saya baru-baru ini harus melaporkan .ω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
}

Ini adalah fungsi yang berantakan yang dapat dengan mudah dibersihkan. Ini menghitung parsial , dan mungkin seharusnya hanya digunakan pada desain faktorial antar subyek.ω2

Stephen Martin
sumber
2

Saya akan menyarankan bahwa eta square umum dianggap ( ref , ref ) ukuran ukuran efek yang lebih tepat. Ini termasuk dalam output ANOVA dalam paket ez untuk R.

Mike Lawrence
sumber
5
Sebenarnya, eta-squared adalah statistik yang sangat positif. Karenanya, ini jauh lebih buruk dalam situasi ini daripada omega-kuadrat, meskipun karena kesederhanaannya, ia lebih populer.
Saya setuju dengan pengguna di atas. Berikut tautan untuk mencadangkannya. daniellakens.blogspot.nl/2015/06/...
Deleet