세집단의 각각의 평균과 표준편차 포함
세집단 비교 및 사후검정
# 📦 패키지 설치 및 로드
if (!require("tidyverse")) install.packages("tidyverse")
if (!require("writexl")) install.packages("writexl")
if (!require("broom")) install.packages("broom")
library(tidyverse)
library(writexl)
library(broom)
# ✅ 1. 데이터 불러오기 (이미 불러왔으면 생략)
# data1 <- read.csv("your_file.csv")
# ✅ 2. 범주형 변수 변환
data1$condition <- factor(data1$condition, levels = c(1, 2, 3), labels = c("Flat", "Cup", "Count"))
data1$group <- factor(data1$group, levels = c(1, 2), labels = c("Normal", "Cognitive Impairment"))
# ✅ 3. 보행 변수 목록 정의
gait_vars <- c(
"loadingresponsetime", "loadingresponsegc", "midstancetime", "midstancegc",
"terminalstancetime", "terminalstancegc", "preswingtime", "preswinggc",
"swingphase", "swingsi", "cadence", "cadencesi",
"stancephasetime", "stancesi", "cofsi", "velocity"
)
# ✅ 4. 결과 저장용 리스트 생성
anova_results <- list()
tukey_results <- list()
summary_stats <- list()
# ✅ 5. 집단별로 분석 반복
for (grp in levels(data1$group)) {
sub_data <- filter(data1, group == grp)
for (var in gait_vars) {
formula <- as.formula(paste(var, "~ condition"))
model <- aov(formula, data = sub_data, na.action = na.omit)
# 📊 평균 및 표준편차 계산
summary_tbl <- sub_data %>%
group_by(condition) %>%
summarise(
Mean = round(mean(.data[[var]], na.rm = TRUE), 2),
SD = round(sd(.data[[var]], na.rm = TRUE), 2),
.groups = 'drop'
) %>%
mutate(Group = grp, Variable = var)
summary_stats[[paste0(grp, "_", var)]] <- summary_tbl
# 📈 ANOVA 결과 저장
anova_tbl <- tidy(model) %>%
mutate(Group = grp, Variable = var)
anova_results[[paste0(grp, "_", var)]] <- anova_tbl
# ✅ Tukey HSD 사후검정 (조건이 유의한 경우)
if ("condition" %in% anova_tbl$term && anova_tbl$p.value[anova_tbl$term == "condition"] < 0.05) {
tukey <- TukeyHSD(model, "condition")
tukey_df <- as.data.frame(tukey$condition) %>%
rownames_to_column("Comparison") %>%
mutate(Variable = var, Group = grp)
tukey_results[[paste0(grp, "_", var)]] <- tukey_df
}
}
}
# ✅ 6. 결과 병합
anova_df <- bind_rows(anova_results)
tukey_df <- bind_rows(tukey_results)
summary_df <- bind_rows(summary_stats)
# ✅ 7. 엑셀 파일로 저장
write_xlsx(
list(
ANOVA_Results = anova_df,
Summary_Mean_SD = summary_df,
TukeyHSD_Results = tukey_df
),
path = "groupwise_anova_analysis.xlsx"
)
cat("✅ 분석 결과가 'groupwise_anova_analysis.xlsx'에 저장되었습니다.\n")