User Tools

Site Tools


estimated_standard_deviation

Why n-1

문제.

우리는 모집단의 (population) 평균값을 알고 있다면 샘플의 분산값을 다음과 같이 구할 수 있다. 그리고, 이것을 모집단의 분산값으로 추정할 수 있다.

\begin{eqnarray*}
\hat{\sigma^{2}} = \dfrac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\mu)}} {n} 
\end{eqnarray*}

그러나, 현재 우리가 가지고 있는 것은 샘플 밖에 없다. 즉, 모집단의 평균은 알지 못하는 상태이기에 모집단 분산을 추정하는 계산에 사용할 수 없다. 따라서 샘플의 평균을 사용한다. 그런데, 샘플의 평균을 사용할 때는 분모에 N 대신에 n-1을 사용해야 한다. 왜 n-1을 사용하는것이 모집단의 분산값 추정에 도움이 되는가가 문제이다.

\begin{eqnarray*}
\hat{\sigma^{2}} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} 
\end{eqnarray*}

\begin{eqnarray*}
\hat{\sigma^{2}} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n-1} 
\end{eqnarray*}

이 모집단의 분산값을 ($\sigma^2$) 대표함을 알아보는 것이 문제이다.

직관적 이해

위에서 n-1 을 사용하기 위해서 추정하는 것은

\begin{eqnarray*}
\displaystyle\sum_{i=1}^{n}{(X_{i}-\mu)} > \displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}}
\end{eqnarray*}

라는 점이다. 따라서 n 대신 n-1로 나눠주어서 “작은 값을 갖는 경향의 문제점을” 상쇄한다.

아래는 20개의 원소를 갖는 k 집합을 예이다.
k = {6, 4, 16, 12, 4, 13, 18, 16, 7, 11, 5, 11, 9, 11, 18, 1, 7, 2, 5, 3}

우리는 이 집합의 평균과 분산값이 각각 8.95 와 27.2475 임을 알고 있다. 이 때 분산값은 24.2475는 SS값을 구한 후, 이를 N으로 나눈 값이다.

위의 모집단에서 3개의 샘플을 취하여 S1 = {4, 11, 18}을 얻었고, 그 평균값은 11이다. 위의 샘플에서 모집단의 분산값을 예측한다고 할 때, 모집단의 (N=20인) 평균값을 안다고 하면 우리는

s1 mu deviation score ds2
4 8.95 -4.95 24.5025
11 8.95 2.05 4.2025
18 8.95 9.05 81.9025
SSpop 110.6075

SSpop 값으로 110.6075 값을 얻는다. 그러나, 위의 경우는 특별한 예이고 대개의 경우 우리는 모집단의 평균값을 알지 못한다. 이 경우 우리는 3개로 취한 샘플의 평균값을 이용하여 SS 부분을 구하게 된다 (SSsamp).

s1 $\overline{X}$ deviation score ds2
4 11 -7 49
11 11 0 0
18 11 7 49
SSsamp 98

이렇게 얻은 SSsamp값은 98인데, 이 값은 SSpop 값보다 작다. 아래의 R code는 이를 확인해 보는 작업이다. 각각의 샘플에서 (n=3) 취한 SSsamp 값은 대개는 SSpop값보다 작은 경향을 띈다. 따라서 이 작은 값을 상쇄하기 위해서 n 대신 n-1 로 SSsamp 값을 나누어 준다.

############
set.seed(1010) 
n.pop <- 20
k <- sample(1:20, n.pop, replace = T)
k
k.mean <- mean(k) 
k.pvar <- var(k)*((n.pop-1)/n.pop) ## population var(k)
k.mean
k.pvar

############
n.samp <- 3
ks <- sample(k, n.samp)
ks
ks.mean <- mean(ks)
ks.var <- var(ks)
ks.pvar <- var(ks)*((n.samp-1)/n.samp)
############
ks-k.mean
ks-ks.mean
sum((ks-k.mean)^2)
sum((ks-ks.mean)^2)
############
set.seed(3) # another sample
n.samp <- 3
ks <- sample(k, n.samp)
ks
ks.mean <- mean(ks)
ks.var <- var(ks)
ks.pvar <- var(ks)*((n.samp-1)/n.samp)
############
ks-k.mean
ks-ks.mean
sum((ks-k.mean)^2)
sum((ks-ks.mean)^2)

############
set.seed(5) # another sample
n.samp <- 3
ks <- sample(k, n.samp)
ks
ks.mean <- mean(ks)
ks.var <- var(ks)
ks.pvar <- var(ks)*((n.samp-1)/n.samp)
############
ks-k.mean
ks-ks.mean
sum((ks-k.mean)^2)
sum((ks-ks.mean)^2)

############
set.seed(7) # another sample
n.samp <- 3
ks <- sample(k, n.samp)
ks
ks.mean <- mean(ks)
ks.var <- var(ks)
ks.pvar <- var(ks)*((n.samp-1)/n.samp)
############
ks-k.mean
ks-ks.mean
sum((ks-k.mean)^2)
sum((ks-ks.mean)^2)
> ############
> set.seed(1010) 
> n.pop <- 20
> k <- sample(1:20, n.pop, replace = T)
> k
 [1]  6  4 16 12  4 13 18 16  7 11  5 11  9 11 18  1  7  2  5  3
> k.mean <- mean(k) 
> k.pvar <- var(k)*((n.pop-1)/n.pop) ## population var(k)
> k.mean
[1] 8.95
> k.pvar
[1] 27.2475
> ############
> n.samp <- 3
> ks <- sample(k, n.samp)
> ks
[1] 11 13 18
> ks.mean <- mean(ks)
> ks.var <- var(ks)
> ks.pvar <- var(ks)*((n.samp-1)/n.samp)
> ############
> ks-k.mean
[1] 2.05 4.05 9.05
> ks-ks.mean
[1] -3 -1  4
> sum((ks-k.mean)^2)
[1] 102.5075
> sum((ks-ks.mean)^2)
[1] 26
> ############
> set.seed(3) # another sample
> n.samp <- 3
> ks <- sample(k, n.samp)
> ks
[1]  4 11 18
> ks.mean <- mean(ks)
> ks.var <- var(ks)
> ks.pvar <- var(ks)*((n.samp-1)/n.samp)
> ############
> ks-k.mean
[1] -4.95  2.05  9.05
> ks-ks.mean
[1] -7  0  7
> sum((ks-k.mean)^2)
[1] 110.6075
> sum((ks-ks.mean)^2)
[1] 98
> 

> ############
> set.seed(5) # another sample
> n.samp <- 3
> ks <- sample(k, n.samp)
> ks
[1]  4  5 18
> ks.mean <- mean(ks)
> ks.var <- var(ks)
> ks.pvar <- var(ks)*((n.samp-1)/n.samp)
> ############
> ks-k.mean
[1] -4.95 -3.95  9.05
> ks-ks.mean
[1] -5 -4  9
> sum((ks-k.mean)^2)
[1] 122.0075
> sum((ks-ks.mean)^2)
[1] 122


> ############
> set.seed(7) # another sample
> n.samp <- 3
> ks <- sample(k, n.samp)
> ks
[1] 11  5 18
> ks.mean <- mean(ks)
> ks.var <- var(ks)
> ks.pvar <- var(ks)*((n.samp-1)/n.samp)
> ############
> ks-k.mean
[1]  2.05 -3.95  9.05
> ks-ks.mean
[1] -0.3333333 -6.3333333  6.6666667
> sum((ks-k.mean)^2)
[1] 101.7075
> sum((ks-ks.mean)^2)
[1] 84.66667
> 

위의 코드에서
sum((ks-k.mean)^2) = $\sum({X_{i}-\mu})^{2}$
sum((ks-ks.mean)^2) = $\sum({X_{i}-\overline{X}})^{2}$
인데, 위의 케이스를 보면

sum((ks-k.mean)^2) > sum((ks-ks.mean)^2) 즉,
$\sum({X_{i}-\mu})^{2} > \sum({X_{i}-\overline{X}})^{2}$ 의 경향이 있다.

이를 그림으로 설명하면 다음과 같다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$) 차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$) 차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가로선 세개의 합이 녹색가로선 세개의 합보다 작다.

실험적, 수학적 이해

\begin{eqnarray*}
\displaystyle\sum_{i=1}^{n}{(X_{i}-\mu)} > \displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}}
\end{eqnarray*}

를 수학적으로 이해하는 방법이다. 우선 실험을 통해서 원하는 것이 무엇인가를 설명한다. 우선 R에서 평균이 20인 (sd = 4) 모집단을 만든다.

## population parameter 지정
n.p <- 10000
mean.p <- 20
sd.p <- 4
set.seed(23)
p <- rnorm(n.p, mean=mean.p, sd=sd.p)
p <- round(p)
hist(p, freq=F)
curve(dnorm(x, mean=mean(p), sd=sd(p)), add=TRUE, col="blue")
abline(v=mean.p,lwd=3,lty=2, col="red")
  • 모집단에서 4개의 원소를 샘플로 취하여 평균을 구해본다 (mean(x) = 23). 그리고,
  • 1부터 40까지의 집합을 만들어 range에 기록해두고
  • $\sum{(x-\overline{x})}$ 에서 $\overline(x)$ 대신 1:40 까지의 숫자를 넣어 결과를 구해본다.
  • 이를 plot한다.
set.seed(1953)
x <-  sample(p, 4)
x
mean(x)

range <- seq(1:40)
ss  <- rep (NA, length(range))
for (i in range) {
    ss[i] <- sum((x-range[i])^2)
}
data <- data.frame(range,ss)
data
min(data$ss) ## ss값이 최소일 때의 x값을 살펴보자 (=mean(x)) = 23
plot(data, lty=1, lwd=1)
abline(v=mean(x),col="red")

> n.p <- 10000
> mean.p <- 20
> sd.p <- 4
> set.seed(23)
> p <- rnorm(n.p, mean=mean.p, sd=sd.p)
> p <- round(p)
> head(p)
[1] 21 18 24 27 24 24
> hist(p, freq=F)
> curve(dnorm(x, mean=mean(p), sd=sd(p)), add=TRUE, col="blue")
> abline(v=mean.p,lwd=3,lty=2, col="red")
> 


# 모집단 평균 = 20, sd=4
> set.seed(1953)
> x <-  sample(p, 4)
> x
[1] 27 21 21 23
> mean(x)
[1] 23
> 
> range <- seq(1:40)
> ss  <- rep (NA, length(range))
> for (i in range) {
+     ss[i] <- sum((x-range[i])^2)
+ }
> data <- data.frame(range,ss)
> data
   range   ss
1      1 1960
2      2 1788
3      3 1624
4      4 1468
5      5 1320
6      6 1180
7      7 1048
8      8  924
9      9  808
10    10  700
11    11  600
12    12  508
13    13  424
14    14  348
15    15  280
16    16  220
17    17  168
18    18  124
19    19   88
20    20   60
21    21   40
22    22   28
23    23   24
24    24   28
25    25   40
26    26   60
27    27   88
28    28  124
29    29  168
30    30  220
31    31  280
32    32  348
33    33  424
34    34  508
35    35  600
36    36  700
37    37  808
38    38  924
39    39 1048
40    40 1180
> min(data$ss) ## ss값이 최소일 때의 x값을 살펴보자 (=mean(x)) = 23
[1] 24
> plot(data, lty=1, lwd=1)
> abline(v=mean(x),col="red")

평균이 20, 표준편차가 4인 집단에서 4개의 샘플을 취하여 그 평균을 구하고, 그 평균을 이용하 SS 부분을 (Sum of Square) 구한다고 했을 때, 평균외에 다른 점수를 이용했을 때 어떻게 되는가를 본 것이다 (range ← seq(1:40)과 같이). ss값이 가장 작았을 때의 x값을 보면 샘플의 평균값임을 알 수 있다.

마지막 그래프에서 가장 작은 기울기값을 갖는 v 값을 구하는 미분을 한다고 가정하고 이해를 하면 수학적으로 이해할 수 있다.

\begin{eqnarray*}
\dfrac{\text{d}}{\text{dv}} \dfrac{\sum{(x-v)^2}}{n} & = &  \dfrac {\sum{2(x-v)*(-1)}}{n} \\
& = & \dfrac{\sum{-2(x-v)}}{n} \\
& = & -\dfrac{2}{n} \sum{(x-v)} \\
\end{eqnarray*}

위의 식이 0이 (기울기가 0이 되는 부분) 될 때의 v 값을 찾아야 하므로

\begin{eqnarray*}
-\dfrac{2}{n} \sum{(x-v)} & = & 0 \\
\sum{(x-v)} & = & 0 \\
\sum{x} - n*v & = & 0 \\ 
n*v & = & \sum{x} \\
v & = & \dfrac {\sum{x}}{n}  \\
\end{eqnarray*}

위에 따르면, 우리가 찾는 v 값은 샘플의 평균값이 ($\frac {\sum{x}}{n}$) 된다. 따라서, 평균값으로 SS값을 구하게 되면 언제나 가장 작은 값을 취하게 되는 결과를 갖는다. 이렇게 작은 값을 갖는 현상을 보정하려고 n 대신에 n보다 조금 작은 숫자인 n-1을 가지고 SS 부분을 나누어 준다.

그렇다면 왜 n-2 혹은 n-(1/2)가 아니고 n-1인가? 이를 수학적인 증명을 통해서 살펴보면 다음 장과 같다.

수학적 증명

우선,

\begin{eqnarray*}
Var[X] & = & E[(X-\mu)^{2}] \\
       & = & E[(X^{2} - 2 X \mu + \mu^{2})] \\
& = & E[X^{2}] - 2 \mu E[X] + E[\mu^2] \\
& = & E[X^{2}] - 2 \mu E[X] + E[\mu^{2}], \;\; \text{because E[X]=} \mu \text{, \; E[} \mu^2 \text{] = } \mu^2, \\
& = & E[X^{2}] - 2 \mu^{2} + \mu^{2}   \\
& = & E[X^{2}] - \mu^{2}
\end{eqnarray*}

이므로

\begin{eqnarray*}
E[X^2] & = & Var[X] + \mu^2 \\ 
& = & \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1)
\end{eqnarray*}

마찬가지로

\begin{eqnarray*}
Var[\overline{X}] & = & E[\overline{X}^2] - [E(\overline{X})]^2 \\
& = & E[\overline{X}^{2}] - \mu^{2}
\end{eqnarray*}

따라서

\begin{eqnarray*}
E[\overline{X}^{2}]  & = & Var[\overline{X}] + \mu^2 \\ 
& = & \frac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2)
\end{eqnarray*}

참고로 위에서 $Var[\overline{X}] = \dfrac {\sigma^{2}} {n} $ 에 해당하는 설명은 mean and variance of the sample mean 문서를 볼 것.


참고로 Expected value (기대값)와 Variance (분산)의 연산에 과한 법칙으로는 1)

X,Y are Independent variables.

\begin{eqnarray*}
E[aX] &=& a E[X] \\
E[X+Y] &=& E[X] + E[Y] \\
Var[aX] &=& a^{\tiny{2}} Var[X] \\
Var[X+Y] &=& Var[X] + Var[Y]  
\end{eqnarray*}


우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다.

\begin{eqnarray*}
E[s^{2}] & = & E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \dots\dots\dots (a) \\
& = & \sigma^{2} 
\end{eqnarray*}

위의 식에서 일부만을 추출해서 먼저 보자.

\begin{eqnarray*}
E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = & E \left[\sum(X_{i}^{2}- 2 X_{i} \overline{X} + \overline{X}^{2})\right] \\
& = & E \left[\sum{X_{i}^{2}} - \sum{2X_{i}\overline{X} + \sum{\overline{X}^{2}} \right] \\
& = & E \left[\sum{X_{i}^{2}} - 2\overline{X}\sum{X_{i} + n{\overline{X}^{2}} \right] \\
& = & E \left[\sum{X_{i}^{2}} - 2\overline{X}\cdot n \overline{X} + n{\overline{X}^{2}} \right] \\
& = & E \left[\sum{X_{i}^{2}} - n{\overline{X}^{2}} \right] \\
& = & \sum{E(X_{i}^{2})} - E(n\overline{X}^{2})  \\
& = & \sum{E(X_{i}^{2})} - n E(\overline{X}^{2})  \;\;\; \dots\dots\dots\dots\dots (3)
\end{eqnarray*}

한 편, 위의 (1), (2)에서

\begin{eqnarray*}
E[X_{i}^{2}] & = & \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) \\
E[\overline{X}^{2}] & = & \dfrac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2)
\end{eqnarray*}

위의 (1), (2)를 (3)에 대입해보면

\begin{eqnarray*}
E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = & \sum{E(X_{i}^{2})} - n E(\overline{X}^{2})  \\
& = & \sum{(\sigma^{2} + \mu^{2})} - n (\dfrac{\sigma^2}{n} + \mu^2) \\
& = & n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\
& = & (n-1) \sigma^{2} 
\end{eqnarray*}

위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면,

\begin{eqnarray*}
E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = & (n-1) \sigma^{2} \\
\end{eqnarray*}

\begin{eqnarray*}
E[s^{2}] & = & E \left[ \frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \\
& = & \dfrac{1}{n-1} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\
& = & \dfrac{1}{n-1} (n-1) \sigma^{2} \\
& = & \sigma^{2}
\end{eqnarray*}

그러므로, n-1로 나눠 준 샘플분산의 (sample's variance) 기대값은

\begin{eqnarray*}
E(s^2) = \sigma^{2}
\end{eqnarray*}

만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면,

\begin{eqnarray*}
E[s^{2}] & = & E \left[ \frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}} {n} \right], \;\;\; \text{note that we use n instead of n-1} \\
& = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\
& = & \dfrac{1}{n} (n-1) \sigma^{2} \\
& = & (\dfrac{n-1}{n}) \sigma^{2} \\
\end{eqnarray*}

즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다).

estimated_standard_deviation.txt · Last modified: 2020/07/01 08:20 by hkimscil