# 📦 패키지 설치 (최초 1회만 실행)
install.packages("tidyverse")
install.packages("broom")
install.packages("writexl")
install.packages("car") # VIF
install.packages("lmtest") # Durbin-Watson
# 📚 패키지 불러오기
library(tidyverse)
library(broom)
library(writexl)
library(car)
library(lmtest)
# 📥 데이터 불러오기
data <- read_csv("2025.04.18-1coding.csv")
# 🏷️ 범주형 변수 지정
data$group <- factor(data$group, levels = c(1, 2), labels = c("Normal", "Impaired"))
data$condition <- factor(data$condition, levels = c(1, 2, 3), labels = c("Flat", "Cup", "Count"))
# 🧪 종속변수 목록
outcome_vars <- c(
"loadingresponsetime", "loadingresponsegc", "midstancetime", "midstancegc",
"terminalstancetime", "terminalstancegc", "preswingtime", "preswinggc",
"swingphase", "swingsi", "stancephasetime", "stancesi", "cadence", "cofsi"
)
# 📊 결과 저장 리스트
coef_results <- list()
model_results <- list()
anova_results <- list()
# 🔁 회귀분석 + 요약 + ANOVA + 진단 반복 수행
for (var in outcome_vars) {
formula <- as.formula(paste(var, "~ group * condition"))
model <- lm(formula, data = data)
# 회귀 계수
coef_summary <- tidy(model) %>% mutate(outcome = var)
# 모형 요약
model_summary <- glance(model) %>% mutate(outcome = var)
# ANOVA
anova_summary <- anova(model) %>%
as.data.frame() %>%
rownames_to_column(var = "term") %>%
mutate(outcome = var)
# 저장
coef_results[[var]] <- coef_summary
model_results[[var]] <- model_summary
anova_results[[var]] <- anova_summary
# 📈 다중공선성 확인
cat("\n📌", var, "VIF:\n")
print(vif(model))
# 📈 Durbin-Watson Test (잔차 독립성)
cat("Durbin-Watson Test:\n")
print(durbinWatsonTest(model))
}
# 📋 결과 병합
final_coef <- bind_rows(coef_results)
final_model <- bind_rows(model_results)
final_anova <- bind_rows(anova_results)
# 🧾 엑셀로 저장
write_xlsx(list(
"Coefficients" = final_coef,
"Model_Summary" = final_model,
"ANOVA_Table" = final_anova
), path = "regression_full_report.xlsx")