R语言 方差分析 效应 η2
时间: 2025-02-06 22:10:49 浏览: 36
### R语言中方差分析及计算效应量η²
#### 使用`aov()`函数进行单因素方差分析并提取η²
为了执行方差分析,可以利用R中的`aov()`函数。此函数允许指定模型公式和数据框作为输入参数。对于单因素设计而言,模型公式的结构通常为`response ~ factor`。
```r
# 加载必要的库
library(car)
# 创建样本数据集
data <- data.frame(
treatment = as.factor(rep(c("A", "B"), each=5)),
outcome = c(2, 4, 6, 8, 7, 9, 10, 12, 14, 13)
)
# 执行ANOVA测试
anova_result <- aov(outcome ~ treatment, data=data)
# 查看摘要统计信息
summary(anova_result)[^4]
# 提取SS(平方和)
ss_total <- sum((data$outcome - mean(data$outcome))^2)
ss_effect <- anova_result[[1]]$'Sum Sq'[1]
eta_squared <- ss_effect / ss_total
print(paste("Effect size (η²): ", round(eta_squared, digits=3)))[^1]
```
上述代码展示了如何创建一个简单的数据帧用于演示目的,并通过调用`aov()`来进行单因素方差分析。接着,从返回的对象中获取总的平方和(`ss_total`)与处理效果对应的平方和(`ss_effect`),进而按照定义计算得到η²值。
#### 双因素方差分析及其交互项的影响评估
当涉及到两个或更多自变量时,则需采用多因素方差分析方法。此时不仅关注主效应还应该考察不同因素间的相互作用是否显著影响响应变量。可以通过调整模型公式的形式来包含这些额外成分:
```r
interaction_data <- expand.grid(treatment=c('A','B'), time=c('pre', 'post'))
set.seed(123); interaction_data$response <- rnorm(nrow(interaction_data),mean=5,sd=2)+as.numeric(interaction_data$treatment)*2+ifelse(interaction_data$time=='post',3,0)
int_anova <- aov(response~treatment*time,data=interaction_data)
summary(int_anova)[^2]
# 对于有交互作用的情况下的广义Eta Squared计算方式略有差异
ss_between_groups <- int_anova[[1]][['Sum Sq']][c(1,2)]
ss_interaction <- int_anova[[1]][['Sum Sq']][3]
ss_within_group <- int_anova[[1]][['Sum Sq']][4]
generalized_eta_sq <- function(ss_between, ss_error){
return(sum(ss_between)/(sum(ss_between)+ss_error))
}
gen_eta_sq_value <- generalized_eta_sq(c(ss_between_groups, ss_interaction), ss_within_group)
cat(sprintf("Generalized Eta Squared Value: %.3f\n", gen_eta_sq_value))[^3]
```
这段脚本构建了一个具有时间和治疗两种分类变量的数据集,并引入随机噪声模拟实际观测值。之后运用扩展后的模型表达式——即`treatment * time`—指示程序同时估计各单独因子的作用强度以及它们之间可能存在的协同变化模式。最后部分实现了针对存在交叉效应情形下更为通用版本的η²度量指标计算逻辑。
阅读全文
相关推荐


















