Omega bình phương để đo hiệu quả trong R?


10

Cuốn sách thống kê tôi đang đọc khuyến nghị omega bình phương để đo lường hiệu quả của các thí nghiệm của tôi. Tôi đã chứng minh bằng cách sử dụng thiết kế biểu đồ phân chia (kết hợp giữa thiết kế bên trong và giữa các chủ thể) rằng các yếu tố bên trong đối tượng của tôi có ý nghĩa thống kê với p <0,001 và F = 17.

Bây giờ tôi đang tìm kiếm sự khác biệt lớn như thế nào ... có triển khai omega bình phương ở đâu đó cho R (hoặc trăn không? Tôi biết ... người ta có thể mơ;) Tìm kiếm trên internet các nội dung liên quan đến R là một đau * , tôi không biết làm cách nào để tìm đồ với C.

cảm ơn!


3
Tôi không biết về một chức năng như vậy, nhưng có lẽ ai đó có thể xem các công thức trong Olejnik và Algina (2003) cps.nova.edu/marker/olejnik2003.pdf và viết một hàm
Jeromy Anglim

3
@Jeromy Tham khảo rất hay! Cái này cũng đáng để xem: Thống kê kích thước hiệu ứng được đề xuất cho các thiết kế đo lặp lại (BRM 2005 37 (3)), j.mp/cT9uEQ
chl

2
@chl Cảm ơn. Rõ ràng, ezANOVA () trong gói ez trong R báo cáo bình phương eta bình phương.
Jeromy Anglim

Câu trả lời:


7

Một chức năng để tính toán bình phương omega là đơn giản để viết. Hàm này lấy đối tượng được trả về bằng phép thử aov, tính toán và trả về và bình phương omega:

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

chỉnh sửa: chức năng cập nhật cho các mô hình 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)
}

3

Gần đây tôi đã phải báo cáo một .ω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
}

Đó là một chức năng lộn xộn có thể dễ dàng được làm sạch. Nó tính toán một phần và có lẽ chỉ nên được sử dụng trên các thiết kế giai thừa giữa các chủ thể.ω2


2

Tôi muốn đề xuất rằng bình phương eta tổng quát được coi là ( ref , ref ) một thước đo phù hợp hơn về kích thước hiệu ứng. Nó được bao gồm trong đầu ra ANOVA trong gói ez cho R.


5
Trên thực tế, eta-squared là một thống kê rất thiên vị tích cực. Do đó, nó tồi tệ hơn nhiều trong tình huống này so với bình phương omega, mặc dù vì tính đơn giản của nó, nó phổ biến hơn.

Tôi đồng ý với người dùng ở trên. Đây là một liên kết để sao lưu nó. daniellakens.blogspot.nl/2015/06/ khăn
Deleet 15/03/18


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.