You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于汇总数据执行单因素ANOVA?解决代码无结果问题

基于汇总数据的单因素ANOVA分析解决方案
  • 步骤1:加载ind.oneway.second函数
    直接将GitHub上的ind.oneway.second.R完整代码复制到R控制台或脚本中运行,确保函数被正确定义。核心代码示例如下:

    ind.oneway.second <- function (mean, sd, n, conf.level = 0.95) {
      k <- length(mean)
      if (length(sd) != k) 
          stop("The length of sd must be equal to that of mean")
      if (length(n) != k) 
          stop("The length of n must be equal to that of mean")
      N <- sum(n)
      df.between <- k - 1
      df.within <- N - k
      grand.mean <- sum(mean * n)/N
      ss.between <- sum(n * (mean - grand.mean)^2)
      ss.within <- sum((n - 1) * sd^2)
      ms.between <- ss.between/df.between
      ms.within <- ss.within/df.within
      F.value <- ms.between/ms.within
      p.value <- pf(F.value, df.between, df.within, lower.tail = FALSE)
      ci.mean.diff <- function(m1, m2, sd1, sd2, n1, n2, conf.level) {
          se.diff <- sqrt(sd1^2/n1 + sd2^2/n2)
          t.value <- qt((1 - conf.level)/2, df = n1 + n2 - 2, lower.tail = FALSE)
          lower <- (m1 - m2) - t.value * se.diff
          upper <- (m1 - m2) + t.value * se.diff
          c(lower, upper)
      }
      mean.diff <- outer(mean, mean, "-")
      se.diff <- outer(sd, sd, function(x, y) sqrt(x^2/n + y^2/n))
      t.value <- qt((1 - conf.level)/2, df = df.within, lower.tail = FALSE)
      ci.lower <- mean.diff - t.value * se.diff
      ci.upper <- mean.diff + t.value * se.diff
      anova.table <- data.frame(Df = c(df.between, df.within, N - 1), 
          SS = c(ss.between, ss.within, ss.between + ss.within), 
          MS = c(ms.between, ms.within, NA), F = c(F.value, NA, NA), 
          `p-value` = c(p.value, NA, NA), check.names = FALSE)
      rownames(anova.table) <- c("Between Groups", "Within Groups", 
          "Total")
      result <- list(anova.table = anova.table, grand.mean = grand.mean, 
          df.between = df.between, df.within = df.within, F.value = F.value, 
          p.value = p.value, mean.diff = mean.diff, ci.lower = ci.lower, 
          ci.upper = ci.upper, conf.level = conf.level)
      class(result) <- "rpsychi"
      result
    }
    
  • 步骤2:调用函数并提取ANOVA表
    定义数据后,显式调用函数并提取结果中的ANOVA表:

    m <- c(10,11,12,12)
    sd <- c(8,8,8,8)
    n <- c(1000, 2000, 300, 100)
    
    # 调用函数
    anova_result <- ind.oneway.second(mean = m, sd = sd, n = n)
    
    # 打印ANOVA表
    print(anova_result$anova.table)
    

    运行后即可得到包含自由度、平方和、均方、F值及p值的标准ANOVA结果。

  • 手动计算备选方案
    若加载函数出现问题,可手动计算核心统计量并构建ANOVA表:

    # 基础计算
    k <- length(m)
    N <- sum(n)
    grand_mean <- sum(m * n)/N
    
    # 组间统计量
    ss_between <- sum(n * (m - grand_mean)^2)
    df_between <- k - 1
    ms_between <- ss_between / df_between
    
    # 组内统计量
    ss_within <- sum((n - 1) * sd^2)
    df_within <- N - k
    ms_within <- ss_within / df_within
    
    # F值与p值
    F_val <- ms_between / ms_within
    p_val <- pf(F_val, df_between, df_within, lower.tail = FALSE)
    
    # 构建ANOVA表
    anova_table <- data.frame(
      Source = c("Between Groups", "Within Groups", "Total"),
      Df = c(df_between, df_within, N - 1),
      SS = c(ss_between, ss_within, ss_between + ss_within),
      MS = c(ms_between, ms_within, NA),
      F = c(F_val, NA, NA),
      `p-value` = c(p_val, NA, NA)
    )
    
    print(anova_table)
    

内容的提问来源于stack exchange,提问作者mira2007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:13:10