모평균벡터의 신뢰영역
# 패키지 로드
library(readxl)
library(rgl)
library(car)
install.packages("misc3d")
library(misc3d)
# 데이터 불러오기
data <- read_excel("d:/mydata/PCA용.xlsx", sheet = "Sheet1")
df <- na.omit(data[, c("컨택률", "스윙률", "타구속도")])
# 기본 통계량
n <- nrow(df)
p <- ncol(df)
alpha <- 0.05
# 평균 벡터와 공분산 행렬
mean_vec <- colMeans(df)
cov_mat <- cov(df)
# Hotelling T² 기반 반지름
f_crit <- qf(1 - alpha, df1 = p, df2 = n - p)
radius <- (p * (n - 1) / (n - p)) * f_crit / n
# 고유값과 고유벡터
eig <- eigen(cov_mat)
eigval <- eig$values
eigvec <- eig$vectors
# 구면 좌표계 격자 생성
theta <- seq(0, 2 * pi, length.out = 40)
phi <- seq(0, pi, length.out = 40)
x0 <- outer(cos(theta), sin(phi))
y0 <- outer(sin(theta), sin(phi))
z0 <- outer(rep(1, length(theta)), cos(phi))
# 변환된 좌표 초기화
x <- y <- z <- matrix(0, nrow = 40, ncol = 40)
# 좌표 변환 및 회전 적용
for (i in 1:40) {
for (j in 1:40) {
point <- c(x0[i, j], y0[i, j], z0[i, j])
scaled <- eigvec %*% diag(sqrt(eigval * radius)) %*% point + mean_vec
x[i, j] <- scaled[1]
y[i, j] <- scaled[2]
z[i, j] <- scaled[3]
}
}
# 3D 시각화 (타원체만)
open3d()
surface3d(x, y, z, color = "skyblue", alpha = 0.4)
axes3d() # 축 보이기
title3d(xlab = "Contact", ylab = "Swing", zlab = "ExitV")
-------------------------------------------------
선형결합(가중치 벡터)을 통한 스칼라로된 신뢰구간 구하기
# 필요한 패키지
library(readxl)
# 데이터 불러오기
df <- read_excel("d:/mydata/PCA용.xlsx")
df <- na.omit(df[, c("컨택률", "스윙률", "타구속도")])
# 기본 통계량
n <- nrow(df)
p <- ncol(df)
alpha <- 0.05
# 평균 벡터, 공분산 행렬
xbar <- colMeans(df)
S <- cov(df)
# 선형결합 벡터 l (동일 비중 평균)
l <- c(1, 1, 1)
l <- l / sqrt(sum(l^2)) # 단위벡터로 정규화
# 신뢰구간 중심
center <- as.numeric(t(l) %*% xbar)
# 신뢰구간 반지름 계산
f_crit <- qf(1 - alpha, df1 = p, df2 = n - p)
radius <- sqrt((p * (n - 1)) / (n * (n - p)) * f_crit * as.numeric(t(l) %*% S %*% l))
# 결과 출력
cat("선형결합된 평균 =", center, "\n")
cat("95% 신뢰구간: [", center - radius, ",", center + radius, "]\n")