R学习笔记-单因素重复测量方差分析

R语言之重复测量方差分析------ezANOVA的使用与解析 - 知乎

单因素重复测量方差分析(One-Way Repeated Measures ANOVA)------R软件实现 - 梦特医数通

R 复制代码
### 清空environment
rm(list = ls())
### 加载包
if (!require("tidyverse")) install.packages("tidyverse")
library(tidyverse)#用于数据清理、操作、可视化和分析
if (!require("conflicted")) install.packages("conflicted")
library(conflicted)#让 R 遇到冲突时抛出错误,并让您明确选择要调用的函数
library(readxl)
if (!require("ez")) install.packages("ez")#用于方差分析
library(ez)
R 复制代码
### 读取数据
file_path <- "D:/LLYdata/EEG_EMG_expdata/behavior/result/MATLAB/analysis_data.xlsx"
data <- read_excel(file_path, range = cell_rows(1:25))#读取excel的第1到25行的所有列
### 设置数据
# 选择需要的四列并转换为长格式
data_long <- data %>%
  rstatix::select(goRT_uni_gocorrect, goRT_i_clgocorrect, goRT_i_crgocorrect, goRT_onlygocorrect) %>%
  pivot_longer(cols = everything(), names_to = "condition", values_to = "RT") %>%
  mutate(subject = rep(1:(nrow(data)), each = 4))  # 为每个被试添加一个唯一的标识符
R 复制代码
# 计算描述性统计
means <- c(mean(data$goRT_uni_gocorrect), mean(data$goRT_i_clgocorrect), mean(data$goRT_i_crgocorrect), mean(data$goRT_onlygocorrect))
sds <- c(sd(data$goRT_uni_gocorrect), sd(data$goRT_i_clgocorrect), sd(data$goRT_i_crgocorrect), sd(data$goRT_onlygocorrect))
ns <- rep(nrow(data), 4)
# 生成结果数据框
result <- data.frame(
  Condition = c("goRT_uni_gocorrect", "goRT_i_clgocorrect", "goRT_i_crgocorrect", "goRT_onlygocorrect"),
  Mean = means,
  SD = sds,
  N = ns
)

# 使用 ezANOVA 进行单因素重复测量方差分析
anova_results <- ezANOVA(
  data = data_long,
  dv = RT,       # 因变量
  wid = subject,           # 受试者
  within = condition,      # 重复测量因素
  detailed = TRUE
)
# 成对比较
AOV<-aov(RT ~ condition,data_long) #检验不同时间之间的差异
R 复制代码
# 打开文件以写入
sink(output_file)
# 添加自定义文本
cat("###Condition (uni/i_cl/i_cr/onlygo) 的重复测量方差分析###\n\n")
# 描述性结果
cat("Condition\tMean\tSD\tN\n")
for (i in 1:nrow(result)) {
  cat(paste(result$Condition[i], "\t", 
            round(result$Mean[i], 2), "\t", 
            round(result$SD[i], 2), "\t", 
            result$N[i], "\n"))
}
# 方差分析结果
print(anova_results)
# 事后两两比较结果
TukeyHSD(AOV,p.adjust.methods="bonferroni") 
# 关闭文件
sink()
R 复制代码
# 保留的变量
keep_vars <- c("data", "file_path", "output_file")
# 获取当前环境中的所有变量
all_vars <- ls()
# 找出需要删除的变量
vars_to_remove <- setdiff(all_vars, keep_vars)
# 删除不需要的变量
rm(list = vars_to_remove)
R 复制代码
rm(list = ls())#清空environment
### 加载包
if (!require("tidyverse")) install.packages("tidyverse")
library(tidyverse)#用于数据清理、操作、可视化和分析
if (!require("conflicted")) install.packages("conflicted")
library(conflicted)#让 R 遇到冲突时抛出错误,并让您明确选择要调用的函数
library(readxl)
library(ez)

### 读取数据
file_path <- "D:/LLYdata/EEG_EMG_expdata/behavior/result/MATLAB/analysis_data.xlsx"
data <- read_excel(file_path, range = cell_rows(1:25))#读取excel的第1到25行的所有列
# 设置结果输出文件路径
output_file <- "D:/LLYdata/EEG_EMG_expdata/behavior/result/R/results.txt"

################################################################
###go RT: Condition (uni/i_cl/i_cr/onlygo) 的重复测量方差分析###
################################################################
# 计算描述性统计
means <- c(mean(data$goRT_uni_gocorrect), mean(data$goRT_i_clgocorrect), mean(data$goRT_i_crgocorrect), mean(data$goRT_onlygocorrect))
sds <- c(sd(data$goRT_uni_gocorrect), sd(data$goRT_i_clgocorrect), sd(data$goRT_i_crgocorrect), sd(data$goRT_onlygocorrect))
ns <- rep(nrow(data), 4)
# 生成结果数据框
result <- data.frame(
  Condition = c("goRT_uni_gocorrect", "goRT_i_clgocorrect", "goRT_i_crgocorrect", "goRT_onlygocorrect"),
  Mean = means,
  SD = sds,
  N = ns
)

# 选择需要的四列并转换为长格式
data_long <- data %>%
  rstatix::select(goRT_uni_gocorrect, goRT_i_clgocorrect, goRT_i_crgocorrect, goRT_onlygocorrect) %>%
  pivot_longer(cols = everything(), names_to = "condition", values_to = "RT") %>%
  mutate(subject = rep(1:(nrow(data)), each = 4))  # 为每个被试添加一个唯一的标识符

# 使用 ezANOVA 进行单因素重复测量方差分析
anova_results <- ezANOVA(
  data = data_long,
  dv = RT,       # 因变量
  wid = subject,           # 受试者
  within = condition,      # 重复测量因素
  detailed = TRUE
)
# 成对比较
AOV<-aov(RT ~ condition,data_long) #检验不同时间之间的差异


# 打开文件以写入
sink(output_file)
# 添加自定义文本
cat("###Condition (uni/i_cl/i_cr/onlygo) 的重复测量方差分析###\n\n")
# 描述性结果
cat("Condition\tMean\tSD\tN\n")
for (i in 1:nrow(result)) {
  cat(paste(result$Condition[i], "\t", 
            round(result$Mean[i], 2), "\t", 
            round(result$SD[i], 2), "\t", 
            result$N[i], "\n"))
}
# 方差分析结果
print(anova_results)
# 事后两两比较结果
TukeyHSD(AOV,p.adjust.methods="bonferroni") 
# 关闭文件
sink()
相关推荐
雾岛听蓝19 小时前
深入解析内存中的整数与浮点数存储
c语言·经验分享·笔记·visualstudio
jimmyleeee19 小时前
人工智能基础知识笔记十八:Prompt Engineering
笔记·prompt
Ro Jace19 小时前
模式识别与机器学习课程笔记(11):深度学习
笔记·深度学习·机器学习
Yupureki19 小时前
从零开始的C++学习生活 9:stack_queue的入门使用和模板进阶
c语言·数据结构·c++·学习·visual studio
小小洋洋19 小时前
笔记:TFT_eSPI不支持ESP32C6;ESP8266运行LVGL注意事项
笔记
小年糕是糕手19 小时前
【数据结构】单链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
聪明的笨猪猪19 小时前
Java JVM “垃圾回收(GC)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
半夏知半秋20 小时前
lua对象池管理工具剖析
服务器·开发语言·后端·学习·lua
CoookeCola20 小时前
Google Landmarks Dataset v2 (GLDv2):面向实例级识别与检索的500万图像,200k+类别大规模地标识别基准
图像处理·人工智能·学习·目标检测·计算机视觉·视觉检测
syt_biancheng20 小时前
C++ 多态(1)
jvm·c++·学习