-
Notifications
You must be signed in to change notification settings - Fork 0
/
resources.qmd
296 lines (223 loc) · 15.7 KB
/
resources.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
---
output: html_document
editor_options:
chunk_output_type: console
---
# 확률론 {.unnumbered}
콜모고로프 확률 공리는 현대 확률론의 엄밀한 수학적 기반을 제공한다. 이 공리 체계는 측도론에 기반하여 확률을 공리적으로 정의하며, 세 가지 기본 규칙인 비음성, 규범화, 가산 무한 가법성으로 구성된다.
콜모고로프 확률 공리로부터 확률론의 기본 개념들이 정립된다. 조건부 확률은 어떤 사건이 주어졌을 때 다른 사건이 일어날 확률로 정의되며, 두 사건의 관계를 이해하는 데 핵심적이다. 독립 사건의 개념도 콜모고로프 확률 공리로부터 엄밀하게 정의되는데, 두 사건이 독립이라는 것은 한 사건의 발생 여부가 다른 사건의 발생 확률에 영향을 미치지 않음을 의미한다.
또한 확률 변수와 기대값의 개념도 콜모고로프 확률 공리에 기반하여 정의된다. 확률 변수는 표본공간에서 정의된 실수 값 함수로, 그 값에 따라 확률이 부여된다. 기대값은 확률 변수의 평균값으로 정의되며, 확률분포의 특성을 요약하는 중요한 수치이다.
콜모고로프 확률 공리는 또한 사건의 무한 배열, 즉 무한 차원의 확률 공간을 다룰 수 있는 틀을 제공한다. 이를 통해 극한 관련 법칙들, 예를 들어 대수의 법칙이나 중심극한정리 등을 엄밀하게 증명할 수 있으며, 가산 무한 사건 공간의 확률을 다룰 수 있게 된다.
```{mermaid}
flowchart TB
Z[라플라스 확률정의] --> A
A[콜모고로프 확률 공리] -->|기초 제공| B[조건부 확률]
A -->|기초 제공| C[독립 사건의 확률]
A -->|기초 제공| D[확률 변수의 기대값]
A -->|기초 제공| E[가산 무한 사건<br>공간의 확률]
B -->|연장 개발| F[베이즈 정리]
C -->|연장 개발| G[독립 확률 변수의 합과 곱]
D -->|연장 개발| H[대수의 법칙]
E -->|연장 개발| I[보렐-칸텔리 렘마]
B -->|연장 개발| R[빈도주의 가설검정]
R -->|응용| S[통계적 유의성<br>검정]
F -->|응용| J[확률적 추론<br> 의사결정]
G -->|응용| K[중심극한정리]
H -->|응용| L[대규모 표본추출<br>이론]
I -->|응용| M[무한 시퀀스의<br>수렴성]
J -->|응용 확장| N[기계 학습<br>데이터 과학]
K -->|응용 확장| O[통계적 추정<br>구간 추정]
L -->|응용 확장| P[표본 크기 <br> 검정력 분석]
M -->|응용 확장| Q[측도론과 확률론]
S -->|응용 확장| T[다중 검정과 FDR]
F -->|응용 확장| U[베이지안 네트워크<br> 그래피컬 모델]
H -->|연장 개발| V[강법칙과 약법칙]
V -->|응용| W[수렴 속도<br>베리-에셴 정리]
D -->|연장 개발| X[조건부 기대값<br>마팅게일]
X -->|응용| Y[순차적 의사결정<br>강화학습]
```
기초 통계학은 확률론의 기본 개념과 원리를 바탕으로 실제 데이터 분석에 필요한 통계적 방법론을 다루고 있다. 콜모고로프 확률 공리는 현대 확률론의 엄밀한 토대를 제공하지만, 그 자체로는 매우 추상적이고 일반적이어서 실제 데이터 분석에 직접 적용하기에는 어려움이 있다. 따라서 기초 통계학에서는 콜모고로프 확률 공리로부터 출발하여, 실제 데이터 분석에 유용하고 필수적인 개념과 방법론을 선별하여 중점적으로 다루게 된다.
기초 통계학에서 주로 다루는 주제들은 크게 확률의 기본 개념, 확률분포, 통계적 추정, 가설검정 등으로 나눌 수 있다. 조건부 확률, 베이즈 정리, 독립 사건 등은 확률의 기본 개념을 이해하는 데 필수적이며, 이를 바탕으로 확률분포와 확률변수의 성질을 공부하게 된다. 확률분포 중에서도 이항분포, 정규분포, 포아송 분포 등 데이터 분석에 자주 활용되는 분포들이 중점적으로 다뤄진다.
통계적 추정과 가설검정은 기초 통계학의 핵심 주제라고 할 수 있다. 중심극한정리와 대수의 법칙 등 표본 분포에 관한 이론을 바탕으로, 모평균 추정, 모비율 추정, 구간추정 등 다양한 통계적 추정 방법을 배우게 된다. 또한 가설검정의 기본 개념과 원리를 익힌 후, t-검정, 카이제곱 검정, F-검정 등 대표적인 통계적 검정 방법도 학습하게 된다.
이러한 주제들은 실제 데이터 분석에 직접 활용될 뿐만 아니라, 빅데이터 분석, 기계학습 등 응용 통계학의 기반이 되기 때문에 기초 통계학에서 반드시 다뤄야 할 내용이다. 또한 이런 방법론을 익히는 과정에서 통계적 사고력과 데이터 분석 능력을 기를 수 있다.
한편, 기초 통계학의 범위를 벗어나는 주제들도 있다. 예를 들어, 측도론, 마팅게일, 강화학습 등은 고급 확률론이나 전문 분야에서 다뤄지는 내용이다. 또한 수리통계학에서는 추정량의 점근적 성질, 최적 검정 등 통계적 방법론의 이론적 측면을 깊이 있게 탐구한다.
```{mermaid}
flowchart TB
Z[라플라스 확률정의] --> A
A[콜모고로프 확률 공리] -->|기초 제공| B[조건부 확률]
A -->|기초 제공| C[독립 사건의 확률]
A -->|기초 제공| D[확률 변수의 기대값]
A -->|기초 제공| E[가산 무한 사건<br>공간의 확률]
subgraph 기초 통계학
B -->|연장 개발| F[베이즈 정리]
C -->|연장 개발| G[독립 확률 변수의 합과 곱]
D -->|연장 개발| H[대수의 법칙]
B -->|연장 개발| R[빈도주의 가설검정]
R -->|응용| S[통계적 유의성<br>검정]
F -->|응용| J[확률적 추론<br>의사결정]
G -->|응용| K[중심극한정리]
H -->|응용| L[대규모 표본추출<br>이론]
K -->|응용 확장| O[통계적 추정<br>구간 추정]
L -->|응용 확장| P[표본 크기<br>검정력 분석]
S -->|응용 확장| T[다중 검정과 FDR]
end
E -->|연장 개발| I[보렐-칸텔리 렘마]
I -->|응용| M[무한 시퀀스의<br>수렴성]
J -->|응용 확장| N[기계 학습<br>데이터 과학]
M -->|응용 확장| Q[측도론과 확률론]
F -->|응용 확장| U[베이지안 네트워크<br>그래피컬 모델]
H -->|연장 개발| V[강법칙과 약법칙]
V -->|응용| W[수렴 속도<br>베리-에셴 정리]
D -->|연장 개발| X[조건부 기대값<br>마팅게일]
X -->|응용| Y[순차적 의사결정<br>강화학습]
```
## 일원배치 분산분석
```{r}
library(tidyverse)
library(broom)
library(patchwork)
library(ggpubr)
k_penguins <- read_rds("data/k_penguins.rds")
test_species_diff <- function(data, feature) {
anova_result <- aov(get(feature) ~ 종명칭, data = data)
anova_tidy <- tidy(anova_result)
tukey_test <- TukeyHSD(anova_result)
tukey_tidy <- tidy(tukey_test)
plot <- ggboxplot(data, x = "종명칭", y = feature, fill = "종명칭",
palette = c("lightblue", "lightgreen", "lightpink")) +
labs(title = paste("ANOVA and Tukey's HSD for", feature, "by Species"),
subtitle = paste("F =", round(anova_tidy$statistic[1], 2),
", p-value =", round(anova_tidy$p.value[1], 4)),
x = "Species", y = feature) +
theme_minimal()
print(plot)
print(tukey_tidy)
}
# 부리 길이에 대한 ANOVA 및 Tukey's HSD 검정
test_species_diff(k_penguins, "부리_길이")
```
펭귄 종에 따른 부리 길이 차이를 일원배치 분산분석(ANOVA)으로 검정하고, 사후 검정으로 투키 HSD 검정을 실시한 결과 펭귄 종 간 부리 길이에 유의한 차이가 있다고 결론 내릴 수 있고 사후 검정 결과 펭귄 종 간 부리 길이에 유의한 차이도 확인할 수 있다.
- 턱끈 펭귄의 부리 길이가 아델리 펭귄의 부리 길이보다 평균적으로 10.0mm 더 길다. 차이는 신뢰구간(8.98, 11.0)에서 유의하며, 조정된 p-value가 5.82e-13로 매우 작아 통계적으로 유의하다.
- 젠투 펭귄의 부리 길이가 아델리 펭귄의 부리 길이보다 평균적으로 8.74mm 더 길다. 차이 역시 신뢰구간(7.88, 9.61)에서 유의하며, 조정된 p-value가 5.82e-13로 매우 작아 통계적으로 유의하다.
- 젠투 펭귄의 부리 길이가 턱끈 펭귄의 부리 길이보다 평균적으로 1.27mm 더 짧다. 차이는 신뢰구간(-2.33, -0.202)에서 유의하며, 조정된 p-value가 1.48e-2로 0.05보다 작아 통계적으로 유의하다.
세 펭귄 종 간에는 부리 길이에 유의한 차이가 있음을 알 수 있고 구체적으로는 턱끈 펭귄의 부리가 가장 길고, 그 다음으로 젠투 펭귄, 아델리 펭귄 순으로 부리 길이가 짧다.
::: callout-note
### MANOVA
MANOVA는 다변량 종속 변수가 상호 연관되어 있고 이들 변수를 함께 분석해야 할 때 사용되는 방법으로 변수 간의 상호작용을 이해하고, 변수들이 집단 간에 어떻게 다른지 평가하는 데 유용하다. 복수의 ANOVA를 별도로 수행할 경우 제1종 오류의 위험이 증가하는데, MANOVA는 이러한 오류의 위험을 줄여 신뢰할 수 있는 통계적 결론을 도출하고, MANOVA는 독립 변수들 간의 상호작용 효과와 독립 변수와 종속 변수들 간의 상호작용 효과를 분석할 수 있어, 각 독립 변수가 종속 변수들에 미치는 영향이 어떻게 다른지 이해하는 데 중요하다.
:::
## MANOVA
마노바(MANOVA)는 여러 종속 변수가 관련된 경우 그룹 간 차이를 분석하는 것을 목표하는데, 몇 가지 중요한 전제조건을 충족해야 한다. 먼저, 모든 관측점은 서로 독립적이어야 하며 각 그룹에서 관찰된 데이터는 다변량 정규 분포를 따라야 하며, Shapiro-Wilk 검정과 같은 정규성 검정을 사용한다.
또한, 모든 그룹의 공분산 행렬은 동일해야 하는데, 이를 검증하기 위해 Box's M 검정을 사용한다. 이상치는 결과에 영향을 줄 수 있기 때문에 데이터에 이상치가 없어야 하며, 상자그림이나 Mahalanobis 거리를 통해 이상치를 확인하고 제거한다.
### 정규성 검정
```{r}
# 필요한 라이브러리를 불러옵니다.
library(MVN) # 다변량 정규성 검사
library(car) # Box's M test와 이상치 검사
library(outliers) # 이상치 검사에 사용
library(ggplot2) # 시각화
# 데이터셋을 불러옵니다. 이 예시에서는 k_penguins 데이터셋을 사용한다고 가정합니다.
# k_penguins <- read.csv("path/to/k_penguins.csv")
# 다변량 정규성 검사
# Shapiro-Wilk 검정을 각 변수에 대해 수행
shapiro_tests <- lapply(k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")], function(x) shapiro.test(x))
print(shapiro_tests)
# Mardia의 다변량 정규성 검사
mvn_result <- mvn(k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")], mvnTest = "mardia")
print(mvn_result$multivariateNormality)
# 공분산 행렬의 동질성 검사 (Box's M test)
box_m_result <- biotools::boxM(data = k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")], group = k_penguins$종명칭)
print(box_m_result)
# 이상치 검사 - Mahalanobis 거리
mahalanobis_distances <- mahalanobis(k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")], colMeans(k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")]), cov(k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")]))
outliers <- mahalanobis_distances > qchisq(0.975, df = ncol(k_penguins[, c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")])) # 95% 기준
k_penguins$outliers <- ifelse(outliers, "Yes", "No")
print(sum(outliers, na.rm = TRUE)) # 이상치 개수 출력
# 이상치를 포함한 데이터 시각화
ggplot(k_penguins, aes(x = 부리_길이, y = 부리_깊이, color = outliers)) +
geom_point(alpha = 0.6) +
labs(title = "이상치 시각화") +
theme_minimal()
```
### MANOVA 분석
```{r}
# 필요한 패키지 로드
library(ggpubr)
# 형태학적 특징과 그룹 변수 선택
features <- c("부리_길이", "부리_깊이", "물갈퀴_길이", "체중")
group <- "종명칭"
manova_result <- manova(as.matrix(k_penguins[, features]) ~ 종명칭, data = k_penguins,
test = "Wilks")
# MANOVA 결과 요약
summary(manova_result)
summary.aov(manova_result)
```
MANOVA (Multivariate Analysis of Variance) 결과를 선형판별분석(LDA, Linear Discriminant Analysis)로 시각화하는 이유는 LDA가 데이터의 그룹 간 차이를 가장 잘 나타내는 축을 찾아주기 때문이다. LDA는 데이터의 분산을 최대화하고, 그룹 간 분산을 최소화하는 방향으로 축을 설정하기 때문에, 다변량 분석에서 얻은 그룹 간 차이를 시각적으로 잘 드러내고 해석하기 좋은 도구로 평가받고 있다.
```{r}
library(ggpubr)
library(MASS)
# 판별 분석
lda_result <- lda(as.matrix(k_penguins[, features]), k_penguins[[group]])
# 판별 점수 계산
lda_scores <- as.data.frame(predict(lda_result, k_penguins[, features])$x)
colnames(lda_scores) <- paste0("LD", 1:ncol(lda_scores))
# 판별 점수에 그룹 정보 추가
lda_scores[[group]] <- k_penguins[[group]]
# 시각화
ggscatter(lda_scores, x = "LD1", y = "LD2", color = group,
palette = c("lightblue", "lightgreen", "lightpink"),
ellipse = TRUE, ellipse.type = "confidence", legend = "right") +
labs(title = "Linear Discriminant Analysis Plot",
subtitle = "Morphological Features by Penguin Species") +
theme_minimal()
```
### 작업흐름
```{mermaid}
flowchart TB
subgraph 데이터 준비
A[데이터 로드] --> B[데이터 전처리]
end
subgraph 가정 검정
B --> C{다변량 정규성 검사}
C -->|통과| D[공분산 행렬 동질성 검사]
C -->|실패| E[데이터 변환 및 정규화]
E --> C
D -->|통과| F[이상치 검사]
D -->|실패| G[데이터 구조 및 설계 재검토]
G --> C
end
subgraph 분석 및 결과 해석
F -->|이상치 제거| H[MANOVA 실행]
F -->|이상치 없음| H
H --> I{결과 해석}
I -->|통계적 유의성 발견| J[사후 검정]
J --> K[결과 보고 및 해석]
I -->|통계적 유의성 미발견| L[추가 데이터 수집 또는 다른 분석 방법 고려]
end
subgraph 시각화
H --> M[판별 분석]
M --> N[판별 점수 계산]
N --> O[그룹 정보 추가]
O --> P[판별 분석 플롯 생성]
end
```
### 무가정 MANOVA
```{r}
library(vegan)
conflicted::conflicts_prefer(vegan::scores)
distance_matrix <- vegdist(k_penguins[, features], method = "euclidean") # 거리 행렬 계산
# adonis 함수를 사용한 PERMANOVA 수행
permanova_result <- adonis2(distance_matrix ~ 종명칭, data = k_penguins, permutations = 999)
print(permanova_result)
# MDS 수행
mds_result <- metaMDS(distance_matrix, k = 2) # k는 차원의 수
# MDS 결과를 데이터 프레임으로 변환
mds_df <- as.data.frame(scores(mds_result))
mds_df$종명칭 <- k_penguins$종명칭
# ggplot2를 사용한 시각화
ggplot(mds_df, aes(x = NMDS1, y = NMDS2, color = 종명칭)) +
geom_point(aes(shape = 종명칭), size = 3) +
scale_color_manual(values = c("아델리" = "blue", "턱끈" = "red", "젠투" = "green")) +
labs(title = "펭귄 데이터 MDS 그래프", x = "NMDS 차원 1", y = "NMDS 차원 2") +
theme_minimal() +
theme(legend.title = element_blank())
```