통계학

판별분석 6. 표준화된 변수의 판별분석

써머23 2025. 6. 15. 12:21
728x90

--------------------------------------------------------

# 2. 패키지 불러오기
library(readxl)
library(MASS)
library(ggplot2)
library(caret)
library(dplyr)

# 3. 데이터 불러오기
data <- read_excel("d:/mydata/QDA용.xlsx", sheet = "Sheet1")

# 4. 그룹 변수를 factor로 변환
data$그룹 <- as.factor(data$그룹)

# 5. 변수 선택 및 표준화 (z-score)
X_raw <- data[, c("Con", "Ozs", "Spd")]
X_scaled <- scale(X_raw)  # 평균 0, 표준편차 1
y <- data$그룹

# 6. LDA 판별분석 수행 (표준화된 변수 사용)
lda_result <- lda(X_scaled, grouping = y)

# 7. 예측 수행
pred <- predict(lda_result, X_scaled)

# 8. 예측 결과 비교: 혼동행렬 및 정확도
conf_mat <- confusionMatrix(pred$class, y)
print(conf_mat)

# 9. 카이제곱 검정
chisq_result <- chisq.test(table(y, pred$class))
print(chisq_result)

# 10. 시각화용 데이터 정리
data$Predicted <- pred$class
df_plot <- data %>%
  group_by(그룹, Predicted) %>%
  summarise(n = n(), .groups = 'drop')

# 11. 막대 그래프
ggplot(df_plot, aes(x = 그룹, y = n, fill = Predicted)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "실제 집단 vs 예측 집단 (표준화된 변수 사용)", x = "실제 그룹", y = "개수") +
  theme_minimal()

# 12. 새로운 선수 예측을 위한 표준화
new_player_raw <- data.frame(Con = 65, Ozs = 40, Spd = 140)

# 기존 데이터와 동일한 방식으로 표준화 (동일 평균, 표준편차 사용)
new_player_scaled <- scale(new_player_raw, center = attr(X_scaled, "scaled:center"), 
                           scale = attr(X_scaled, "scaled:scale"))

# 13. 예측
new_prediction <- predict(lda_result, new_player_scaled)
print(new_prediction)
cat("👉 새로운 선수의 예측 집단 (표준화된 LDA):", as.character(new_prediction$class), "\n")

728x90