欧米茄平方用于衡量 R 中的效果?

机器算法验证 r 方差分析 规模效应 裂区
2022-03-01 20:40:57

我正在阅读的统计书推荐使用欧米茄平方来衡量我的实验效果。我已经使用裂区设计(受试者内和受试者间设计的混合)证明了我的受试者内因素在 p<0.001 和 F=17 时具有统计学意义。

现在我想看看有多大的区别......有没有在某个地方为 R(或 python)实现 omega squared?我知道......一个人可以梦想;)在互联网上搜索与 R 相关的东西是一个痛苦*,我不知道我如何设法用 C 找到东西。

谢谢!

4个回答

计算欧米茄平方的函数很容易编写。该函数取 aov 测试返回的对象,并计算并返回和 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)
}

编辑: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)
}

我最近不得不报告一个ω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
}

这是一个很容易清理的杂乱功能。它计算部分,并且可能只应用于主体间因子设计。ω2

我在某人的 .Rprofile 中发现了一个欧米茄平方函数,他们在网上提供了该函数:

http://www.estudiosfonicos.cchs.csic.es/metodolo/1/.Rprofile

我建议将广义 eta 平方视为(refref)更合适的效果大小度量。它包含在R的ez 包的 ANOVA 输出中。