User Tools

Site Tools


estimated_standard_deviation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
estimated_standard_deviation [2020/07/25 21:17] – [실험적, 수학적 이해] hkimscilestimated_standard_deviation [2025/09/07 06:24] (current) – [수학적 증명] hkimscil
Line 11: Line 11:
  
 \begin{eqnarray*} \begin{eqnarray*}
-\hat{\sigma^{2}} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} +\hat{\sigma}^{2} \neq \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} 
 \end{eqnarray*} \end{eqnarray*}
  
 \begin{eqnarray*} \begin{eqnarray*}
-\hat{\sigma^{2}} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n-1} +\hat{\sigma}^{2} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n-1} 
 \end{eqnarray*} \end{eqnarray*}
  
Line 22: Line 22:
  
 ====== 직관적 이해 ====== ====== 직관적 이해 ======
-위에서 n-1 을 사용하기 위해서 추하는 것은  +분산은 $ \text{SS}/ \text{df} $ 라고 배웠다. SS = Sum of Something Square라고 설명고, 여기서 Something 은 error (개인의 점수를 평균으로 측했을 때 틀린 만큼의 에러값) 하였다. 이렇게 평균을 가지고 개인점수를 예측하는 것이 가장 작은 오차를 갖는 방법이라고 하였다 (개인점수 중에서 평균이 제일 많이 나오므로, 평균으로 개인점수를 예측하면 제일 들 틀린다). 따라서 어느 한 집합에서 (샘플에서) 개인점수에서 평균을 빼고 이를 제곱하여 모두 더한 값은 (평균이 아닌) 다른 값으로 구한 값보다 항상 작게 된다 (최소값을 갖는다). 
-\begin{eqnarray*} +  
-\displaystyle\sum_{i=1}^{n}{(X_{i}-\mu)} > \displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} +이를 그림으로도 설명할 수 있다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가선 세개의 합이 녹색가로선 세개의 합보다 다. 이는 샘플평균을 사용했을 때와 모집단의 평균을 사용했을 때를 비교하는 것이지만 모집단 평균외에 다른 값을 썼어도 마찬가지이다.  
-\end{eqnarray*} +{{:pasted:20200412-002825.png?500}}
-라는 점이다. 따라서 n 대신 n-1로 나눠주어서 "은 값을 갖는 경향의 문제점" 상쇄한다.+
  
-아래는 20개의 원소를 갖는 k 집합을 예이다. +====== 실험적, R에서 시뮬레이션으로 이해 ====== 
-''{6, 4, 16, 12, 4, 13, 18, 16, 7, 11, 5, 11, 9, 11, 18, 1, 7, 2, 5, 3}''+아래 output의 코멘트를 을  
 +<code> 
 +rm(list=ls())
  
-우리는 이 집합의 평균과 분산값이 각각 8.95 와 27.2475 임을 알고 있다. 이 때 분산값은 24.2475는 SS값을 구한 후이를 N으로 나눈 값이다. +rnorm2 <- function(n,mean,sd){  
 +  mean+sd*scale(rnorm(n))  
 +}
  
-위의 모집단에서 3개의 샘플을 취하여 S1 = {4, 11, 18}을 얻었고, 그 평균값은 11이다위의 샘플에서 모집단의 분산값을 예측한다고 할 때, 모집단의 (N=20인평균값을 안다고 하면 우리는  +# set.seed(191
-| s1 | mu | deviation score | ds<sup>2</sup>  | +nx <- 1000 
-| 4  | 8.95  | -4.95  | 24.5025   | +mx <- 50 
-| 11  | 8.95  | 2.05  | 4.2025   | +sdx <mx * 0.1 
-| 18  | 8.95  | 9.05  | 81.9025   | +sdx  # 5 
-|    |    | SS<sub>pop</sub>  | 110.6075  |+x <- rnorm2(nx, mx, sdx) 
 +# x <- rnorm2(1000, 50, 5) 와 동일
  
-SS<sub>pop</sub> 값으로 110.6075 값을 얻는다. 그러나, 위의 경우는 특별한 예이고 대개의 경우 우리는 모집단의 평균값을 알지 못한다. 이 경우 우리는 3개로 취한 샘플의 평균값을 이용하여 SS 부분을 구하게 된다 (SS<sub>samp</sub>).+mean(x) 
 +sd(x) 
 +length(x) 
 +hist(x)
  
-| s1 | $\overline{X}$ | deviation score | ds<sup>2</sup> +x.span <- seq(from = mean(x)-3*sd(x),  
-| 4  | 11  | -7  | 49   | +              to = mean(x)+3*sd(x),  
-| 11  | 11  | 0  | 0   | +              by = .1) 
-| 18  | 11  | 7  | 49   | +x.span
-|    |    | SS<sub>samp</sub>  | 98  |+
  
-이렇게 얻은 SS<sub>samp</sub>값은 98인데이 값은 SS<sub>pop</sub> 값보다 작다. 아래의 R code는 이를 확인해 보는 작업이다. 각각의 샘플에서 (n=3취한 SS<sub>samp</sub> 값은 대개는 SS<sub>pop</sub>값보다 작은 경향을 띈다. 따라서 이 작은 값을 상쇄하기 위해서 n 대신 n-1 로 SS<sub>samp</sub> 값을 나누어 준다.+residuals <- function(xv) { 
 +  return(x - v) 
 +}
  
 +# sum of square residual 값을 
 +# 구하는 펑션
 +ssr <- function(x, v) { 
 +  residuals <- (x - v)
 +  return(sum(residuals^2))
 +}
  
 +#  mean square residual 값을 
 +# 구하는 펑션 (mean square 
 +# residual = variance)
 +msr <- function(x, v) {
 +  residuals <- (x - v)
 +  return((mean(residuals^2)))
 +}
  
 +ssrs <- c() # sum of square residuals
 +msrs <- c() # mean square residuals = variance
 +vs <- c() # the value of v in (x - v)
  
-<code> +x.span의 값들을 v값으로 삼아 sum(x-x.span)^2 처럼 구하면 
-############ +# SS값을 구한 것이 된다. 우리가 배운 SS값은 x.span의 값으로  
-set.seed(1010)  +# 샘플의 평균을 사용했을 때의 residual 값이다x.span은  
-n.pop <20 +샘플의 평균을 중심으로 여러가지 값을 사용하는 것을 가정한다.
-k <- sample(1:20, n.pop, replace = T+
-+
-k.mean <- mean(k)  +
-k.pvar <- var(k)*((n.pop-1)/n.pop) ## population var(k) +
-k.mean +
-k.pvar+
  
-############ +for (i in x.span) { 
-n.samp <- +  res.<- residuals(x,i
-ks <- sample(kn.samp+  msr.<- msr(x,i
-ks +  msrs <- append(msrs, msr.x
-ks.mean <- mean(ks+  vs <- append(vs, i) 
-ks.var <- var(ks+} 
-ks.pvar <- var(ks)*((n.samp-1)/n.samp+아래 plot은 SS값들이나 (두번째는MS값들을 v값이 변화함에  
-############ +# 따라서 (x.span의 범위에 따라서 변화어떻게 변화하는지  
-ks-k.mean +# 구한 것
-ks-ks.mean +
-sum((ks-k.mean)^2+
-sum((ks-ks.mean)^2+
-</code>+
  
-<code> +plot(msrs)
-############ +
-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)+
  
-############ +v값이 x.span에 따라서 변화하여 대입되었을 때의 
-set.seed(5) another sample +MS값들을 (msr 펑션으로 구한 mean square값
-n.samp <- 3 +모아 놓은 값이 msrs 
-ks <- sample(k, n.samp) +msrs 
-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)+
  
-############ +아래는 위에서 계산한 msr 값들을 저장한 msrs값들 중에서 최소값이  
-set.seed(7) another sample +되는 것을 찾은 것우리는 이것이 샘플의 평균임을 안다.  
-n.samp <- 3 +min(msrs
-ks <- sample(k, n.samp) +# 최소값일 때의 위치 (msrs에서 몇번째인지
-ks +min.pos.msrs <- which(msrs == min(msrs)) 
-ks.mean <- mean(ks+min.pos.msrs 
-ks.var <- var(ks+# msr 최소값이 구해졌을 때 사용된 v값 
-ks.pvar <- var(ks)*((n.samp-1)/n.samp+vs[min.pos.msrs]
-############ +
-ks-k.mean +
-ks-ks.mean +
-sum((ks-k.mean)^2) +
-sum((ks-ks.mean)^2)+
 </code> </code>
 +===== output ===== 
 +<WRAP group> 
 +<WRAP half column>
 <code> <code>
-############ +rm(list=ls()
-> set.seed(1010)  +>  
-n.pop <- 20 +rnorm2 <- function(n,mean,sd) 
-<- sample(1:20, n.popreplace = T++     mean+sd*scale(rnorm(n))  
-> 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)  +# set.seed(191) 
-> k.pvar <- var(k)*((n.pop-1)/n.pop) ## population var(k+nx <- 1000 
-k.mean +mx <- 50 
-[1] 8.95 +sdx <- mx * 0.1 
-k.pvar +sdx  # 5 
-[1] 27.2475 +[1] 5 
-############ +<- rnorm2(nx, mx, sdx
-n.samp <- 3 +# x <- rnorm2(1000, 50, 5와 동일 
-ks <- sample(k, n.samp) +>  
-ks +> mean(x) 
-[1] 11 13 18 +[1] 50 
-ks.mean <- mean(ks+sd(x) 
-ks.var <- var(ks+[1] 5 
-ks.pvar <- var(ks)*((n.samp-1)/n.samp) +length(x
-############ +[1] 1000 
-> ks-k.mean +hist(x
-[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+
 </code> </code>
 +</WRAP>
 +<WRAP half column>
 +SS = sum(x-mean(x))^2 인데, mean(x)을 즉, x집합의 평균을, x 원소값을 예측하는데 (빼는데) 사용하면 SS값이 최소값이 된다고 하였다. 이것을 R에서 simulation으로 알아보기 위해서 mean(x) 대신에 다른 숫자들을 넣어보려고 한다. 이를 v라고 하면 sum(x-v)^2이라는 SS값들을 구해서 비교하려는 것이다. 대입할 숫자들은 (v) mean(x) +- 3 sd(x) 를 범위로 하고, 그 범위의 시작 숫자에서 (시작은 mean(x)-3sd(x)가 된다) 0.1씩 증가시키면서 대입하고, 각 숫자마다 (처음 숫자는 35, 다음 숫자는 35.1 . . . ) SS값을 구해서 저장하여 그것을 그래프로 그려보고 최소값이 어떤 것인지 보는 것이 진행하려는 작업이다. 
  
-<code> +단, 이 코드에서 SS대신 MS값을 (SS값을 n으로 나눈 값, 즉variance값 혹은 Mean Square값구해서 보려고 하는데 이것은 같은 의미를 갖는다즉, 모든 SS값들에 n을 공토으로 나누어준 값을 저장하고 비교하려는 것이다.  
-> ############ +
-> set.seed(3) # another sample +
-n.samp <- 3 +
-> ks <- sample(kn.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 +
-+
  
-> ############ +</WRAP
-> set.seed(5) # another sample +</WRAP>
-> 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+
  
- +<WRAP group> 
-############ +<WRAP half column
-set.seed(7) # another sample +<code
-n.samp <- 3 +x.span <- seq(from = mean(x)-3*sd(x),  
-> ks <- sample(kn.samp++               to = mean(x)+3*sd(x) 
-ks ++               by = .1
-[1] 11  18 +x.span 
-> ks.mean <- mean(ks) +  [1] 35.0 35.1 35.2 35.3 35.4 35.35.6 35.7 35.8 
-> ks.var <- var(ks) + [10] 35.9 36.0 36.1 36.2 36.3 36.4 36.5 36.6 36.7 
-> ks.pvar <- var(ks)*((n.samp-1)/n.samp) + [19] 36.8 36.9 37.0 37.1 37.2 37.3 37.4 37.5 37.6 
-> ############ + [28] 37.7 37.8 37.9 38.0 38.1 38.2 38.3 38.4 38.5 
-> ks-k.mean + [37] 38.6 38.7 38.8 38.9 39.0 39.1 39.2 39.3 39.4 
-[1]  2.05 -3.95  9.05 + [46] 39.5 39.6 39.7 39.8 39.9 40.0 40.1 40.2 40.3 
-> ks-ks.mean + [55] 40.4 40.5 40.6 40.7 40.8 40.9 41.0 41.41.2 
-[1] -0.3333333 -6.3333333  6.6666667 + [6441.3 41.4 41.5 41.6 41.7 41.8 41.9 42.0 42.1 
-> sum((ks-k.mean)^2) + [73] 42.42.3 42.4 42.5 42.6 42.7 42.8 42.9 43.0 
-[1] 101.7075 + [82] 43.1 43.2 43.3 43.4 43.5 43.6 43.7 43.8 43.9 
-> sum((ks-ks.mean)^2) + [91] 44.0 44.44.2 44.3 44.4 44.5 44.6 44.7 44.8 
-[1] 84.66667 +[10044.9 45.45.1 45.2 45.3 45.4 45.5 45.6 45.7 
-+[109] 45.8 45.9 46.0 46.1 46.2 46.3 46.4 46.5 46.6 
 +[118] 46.7 46.8 46.9 47.0 47.1 47.2 47.3 47.4 47.5 
 +[127] 47.6 47.7 47.8 47.9 48.0 48.1 48.2 48.3 48.4 
 +[136] 48.5 48.6 48.7 48.8 48.9 49.0 49.49.2 49.3 
 +[14549.4 49.5 49.6 49.7 49.8 49.9 50.0 50.1 50.2 
 +[154] 50.3 50.4 50.5 50.6 50.7 50.8 50.9 51.0 51.1 
 +[163] 51.2 51.3 51.4 51.5 51.6 51.7 51.8 51.9 52.0 
 +[172] 52.52.2 52.3 52.4 52.5 52.6 52.7 52.8 52.9 
 +[18153.0 53.1 53.2 53.3 53.4 53.5 53.6 53.7 53.8 
 +[190] 53.9 54.0 54.1 54.2 54.3 54.4 54.5 54.6 54.7 
 +[199] 54.8 54.9 55.0 55.1 55.2 55.3 55.4 55.5 55.6 
 +[208] 55.7 55.8 55.9 56.0 56.1 56.2 56.3 56.4 56.5 
 +[217] 56.6 56.7 56.8 56.9 57.0 57.1 57.2 57.3 57.4 
 +[226] 57.5 57.6 57.7 57.8 57.9 58.0 58.1 58.2 58.3 
 +[235] 58.4 58.5 58.6 58.7 58.8 58.9 59.0 59.1 59.2 
 +[244] 59.3 59.4 59.5 59.6 59.7 59.8 59.9 60.0 60.1 
 +[253] 60.2 60.3 60.4 60.5 60.6 60.7 60.8 60.9 61.0 
 +[262] 61.1 61.2 61.3 61.4 61.5 61.6 61.7 61.8 61.9 
 +[271] 62.0 62.1 62.2 62.3 62.4 62.5 62.6 62.7 62.8 
 +[280] 62.9 63.0 63.1 63.2 63.3 63.4 63.5 63.6 63.7 
 +[289] 63.8 63.9 64.0 64.1 64.2 64.3 64.4 64.5 64.6 
 +[298] 64.7 64.8 64.9 65.0
 </code> </code>
-위의 코드에서  +</WRAP> 
-''sum%%(%%%%(%%ks-k.mean)^2) '' $\sum({X_{i}-\mu})^{2}$ +<WRAP half column> 
-''sum%%(%%%%(%%ks-ks.mean)^2) '' $\sum({X_{i}-\overline{X}})^{2}$ +x-mean(x) = residual = error  
-인데위의 케이스를 보면 +sum(residual^2) = SS (sum of square
 +SS/n = variancemean square (ms, MS)
  
-''sum%%(%%%%(%%ks-k.mean)^2) '' > ''sum%%(%%%%(%%ks-ks.mean)^2) ''  즉, +이 residual을 구하기 위해서 쓰는 mean(x)의 대체값들을 (v값들x.span에 모아 놓은 것다. 
-$\sum({X_{i}-\mu})^{2} > \sum({X_{i}-\overline{X}})^{2}$ 의 경향이 다.+이 값을 출력해보았는데 35.1 에서 시작하여 65에서 끝나며, 0.1씩 증가한다. 
  
-이를 그림으로 설명하면 다음과 같다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$) 차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$) 차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가로선 세개의 합이 녹색가로선 세개의 합보다 작다.  +</WRAP> 
-{{:pasted:20200412-002825.png?800}} +</WRAP>
- +
-====== 실험적, 수학적 이해 ====== +
-\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) 모집단을 만든다.+
  
 +<WRAP group>
 +<WRAP half column>
 <code> <code>
-## population parameter 지정 + 
-n.p <- 10000 +> residuals <- function(x, v) { 
-mean.p <20 ++     return(x v) 
-sd.p <- 4 ++ } 
-set.seed(23) +>  
-<- rnorm(n.pmean=mean.p, sd=sd.p+> # sum of square residual 값을  
-<- round(p+> # 구하는 펑션 
-hist(p, freq=F+> ssr <- function(xv 
-curve(dnorm(x, mean=mean(p), sd=sd(p))add=TRUE, col="blue"++     residuals <- (x - v
-abline(v=mean.p,lwd=3,lty=2, col="red")++     return(sum(residuals^2)
 ++ } 
 +>  
 +> #  mean square residual 값을  
 +> # 구하는 펑션 (mean square  
 +> # residual variance) 
 +> msr <- function(xv{ 
 ++     residuals <- (x - v
 ++     return((mean(residuals^2))) 
 ++ } 
 +
 </code> </code>
-  모집단에서 평균이 23인 4개의 원소를 샘플로  취한다그리,  +</WRAP> 
-  * 1터 40지의 집합을 만들어 range에 기록해두고 (range = {1,2,3,4,. . .,40}, 이 range에는 위 샘플의 평균인 23이 포함되어 있다)  +<WRAP half column> 
-  * $\sum{(x-\overline{x})}$ 에서 $\overline(x)$ 대신 1:40 까지의 숫자를 넣어 결과를 구해본다. 즉, SS파트를 구해보는데 샘플의 평균인 23외에 1에서 40까지의 숫자를 입하여 SS값을 구하여 기록한다는 뜻이다+  * 이 후 쓸 function들(x-v) = residual이라고 부르니까 이 residual을 모으는 function 
-  * 이를 plot다.+  * function ssr = 집합과 v값 (x.span의 한 숫자)를 인수를 주었을 때 할 수 있는 Sum of Square값들 (실제로는 사용하지 않는다. 대신 msr 펑션으로 MS값을 구한다)
 +  * function msr = 의 ssr을 n으로 나누어 구한 mean square residual을 (분산) 구하는 function  
 +</WRAP> 
 +</WRAP>
  
 +<WRAP group>
 +<WRAP half column>
 <code> <code>
-set.seed(1953+> ssrs <- c() # sum of square residuals 
-<-  sample(p, 4+> msrs <- c() # mean square residuals = variance 
-+> vs <- c() # the value of v in (- v) 
-mean(x) +>  
- +> # x.span의 값들을 v값으로 삼아 sum(x-x.span)^2 처럼 구하면 
-range <- seq(1:40+> # SS값을 구한 것이 된다. 우리가 배운 SS값은 x.span의 값으로  
-ss  <- rep (NAlength(range)+> # 샘플의 평균을 사용했을 때의 residual 값이다. x.span은  
-for (i in range{ +> # 샘플의 평균을 중심으로 여러가지 값을 사용하는 것을 가정한다. 
-    ss[i] <- sum((x-range[i])^2) +>  
-} +> for (i in x.span{ 
-data <- data.frame(range,ss++     res.x <- residuals(x,i
-data ++     msr.x <- msr(x,i) 
-min(data$ss) ## ss값이 최소일 때의 x값을 살펴보자 (=mean(x)) = 23 ++     msrs <- append(msrs, msr.x) 
-plot(datalty=1, lwd=1++     vs <- append(vsi
-abline(v=mean(x),col="red")++ } 
 +아래 plot은 SS나 (두번째는) MS을 v값이 변화함에  
 +> # 따라서 (x.span의 범위에 따라서 변화어떻게 변화하는지  
 +> # 구한 것 
 +>  
 +plot(vsmsrs
 +
 </code> </code>
 +</WRAP>
 +<WRAP half column>
 +comment
 +  * x.span의 처음값인 35.1을 넣어서 (x-v)를 구한 후 
 +  * msr 펑션으로 mean square residual 값을 구한다. 
 +  * 그리고 이 값을 어딘가에 (msrs) 저장한 후
 +  * 그 다음 value인 35.2값을 v 대신에 넣어 다시 
 +  * msr값을 구하여 위의 msrs에 추가하여 저장한다.
 +  * 이것을 x.span의 모든값에 걸쳐 진행하면 
 +  * msrs에는 x.span의 모든 값을 대응하여 구한
 +  * msr값들이 저장된다. 이 msr값 중에서 최소값을 찾고
 +  * 이 최소값을 구할 때 쓴 v값을 (x.span 중 하나의 값) 찾고자 한다.
 +  * 이를 위해서 for 를 이용한 loop문을 쓴다. 
  
-{{:pasted:20200504-202759.png}}+</WRAP> 
 +</WRAP> 
 + 
 +<WRAP group> 
 +<WRAP half column>
 <code> <code>
-n.p <- 10000 +# v값이 x.span에 따라서 변화하여 대입되었을 때의 
-> mean.p <- 20 +# MS값들을 (msr 펑션으로 구한 mean square값) 
-sd.p <- 4 +# 모아 놓은 값이 msrs 
-set.seed(23) +msrs  
-> p <- rnorm(n.p, mean=mean.p, sd=sd.p) +  [1] 249.975 246.985 244.015 241.065 238.135 
-> p <- round(p) +  [6] 235.225 232.335 229.465 226.615 223.785 
-> head(p) + [11] 220.975 218.185 215.415 212.665 209.935 
-[1] 21 18 24 27 24 24 + [16207.225 204.535 201.865 199.215 196.585 
-> hist(p, freq=F) + [21] 193.975 191.385 188.815 186.265 183.735 
-> curve(dnorm(x, mean=mean(p), sd=sd(p)), add=TRUE, col="blue") + [26] 181.225 178.735 176.265 173.815 171.385 
-> abline(v=mean.p,lwd=3,lty=2, col="red")+ [31] 168.975 166.585 164.215 161.865 159.535 
 + [36] 157.225 154.935 152.665 150.415 148.185 
 + [41] 145.975 143.785 141.615 139.465 137.335 
 + [46] 135.225 133.135 131.065 129.015 126.985 
 + [51] 124.975 122.985 121.015 119.065 117.135 
 + [56] 115.225 113.335 111.465 109.615 107.785 
 + [61] 105.975 104.185 102.415 100.665  98.935 
 + [66]  97.225  95.535  93.865  92.215  90.585 
 + [71]  88.975  87.385  85.815  84.265  82.735 
 + [76]  81.225  79.735  78.265  76.815  75.385 
 + [81]  73.975  72.585  71.215  69.865  68.535 
 + [86]  67.225  65.935  64.665  63.415  62.185 
 + [91]  60.975  59.785  58.615  57.465  56.335 
 + [96]  55.225  54.135  53.065  52.015  50.985 
 +[101]  49.975  48.985  48.015  47.065  46.135 
 +[106]  45.225  44.335  43.465  42.615  41.785 
 +[111]  40.975  40.185  39.415  38.665  37.935 
 +[116]  37.225  36.535  35.865  35.215  34.585 
 +[121]  33.975  33.385  32.815  32.265  31.735 
 +[126]  31.225  30.735  30.265  29.815  29.385 
 +[131]  28.975  28.585  28.215  27.865  27.535 
 +[136]  27.225  26.935  26.665  26.415  26.185 
 +[141]  25.975  25.785  25.615  25.465  25.335 
 +[146]  25.225  25.135  25.065  25.015  24.985 
 +[151]  24.975  24.985  25.015  25.065  25.135 
 +[156]  25.225  25.335  25.465  25.615  25.785 
 +[161]  25.975  26.185  26.415  26.665  26.935 
 +[166]  27.225  27.535  27.865  28.215  28.585 
 +[171]  28.975  29.385  29.815  30.265  30.735 
 +[176]  31.225  31.735  32.265  32.815  33.385 
 +[181]  33.975  34.585  35.215  35.865  36.535 
 +[186]  37.225  37.935  38.665  39.415  40.185 
 +[191]  40.975  41.785  42.615  43.465  44.335 
 +[196]  45.225  46.135  47.065  48.015  48.985 
 +[201]  49.975  50.985  52.015  53.065  54.135 
 +[206]  55.225  56.335  57.465  58.615  59.785 
 +[211]  60.975  62.185  63.415  64.665  65.935 
 +[216]  67.225  68.535  69.865  71.215  72.585 
 +[221]  73.975  75.385  76.815  78.265  79.735 
 +[226]  81.225  82.735  84.265  85.815  87.385 
 +[231]  88.975  90.585  92.215  93.865  95.535 
 +[236]  97.225  98.935 100.665 102.415 104.185 
 +[241] 105.975 107.785 109.615 111.465 113.335 
 +[246] 115.225 117.135 119.065 121.015 122.985 
 +[251] 124.975 126.985 129.015 131.065 133.135 
 +[256] 135.225 137.335 139.465 141.615 143.785 
 +[261] 145.975 148.185 150.415 152.665 154.935 
 +[266] 157.225 159.535 161.865 164.215 166.585 
 +[271] 168.975 171.385 173.815 176.265 178.735 
 +[276] 181.225 183.735 186.265 188.815 191.385 
 +[281] 193.975 196.585 199.215 201.865 204.535 
 +[286] 207.225 209.935 212.665 215.415 218.185 
 +[291] 220.975 223.785 226.615 229.465 232.335 
 +[296] 235.225 238.135 241.065 244.015 246.985 
 +[301] 249.975
  
 +</code>
 +</WRAP>
 +<WRAP half column>
 +comment
 +  * msrs값에 저장된 msr값들 (mean square residual값들) 중에서
 +  * 가장 작은 값을 찾아서 그 값을 구하도록 한 v값을 찾고자 한다. 
 +  * msrs값을 눈으로 살펴보기에는 너무 힘드므로 . . . . 
 +</WRAP>
 +</WRAP>
  
  
-모집단 평균 = 20, sd=4 +<WRAP group> 
-set.seed(1953+<WRAP half column> 
-<-  sample(p, 4+<code> 
-x +아래는 위에서 계산한 msr 값들을 저장한 msrs값들 중에서 최소값이 되는 것을 찾은  
-[1] 27 21 21 23 +> # 것. 우리는 이것이 샘플의 평균임을 안다.  
-mean(x) +min(msrs) 
-[1] 23+[1] 24.975 
 +> # 최소값일 때의 위치 (msrs에서 몇번째인지
 +min.pos.msrs <- which(msrs == min(msrs)
 +min.pos.msrs 
 +[1] 151 
 +# msr 최소값이 구해졌을 때 사용된 v값 
 +> vs[min.pos.msrs] 
 +[1] 50
  
-range <- seq(1:40) +plot(vs, msrs, cex=1, lwd=1, lty=3
-> ss  <- rep (NAlength(range)+abline(v=vs[min.pos.msrs]) 
-for (i in range) { +text(x=50, y=150"msr gets minimal value, when v = 50" 
-+     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"+
 </code> </code>
 +</WRAP>
 +<WRAP half column>
 +comment
 +  * msrs 의 min(msrs)값을 찾는다 24.975
 +  * 이 최소값이 어느 위치에 있는지 (몇번째 자리에 있는지) 찾는다 which(msrs == min(msrs))
 +  * 이 위치가 151이다
 +  * 이 151번째 사용된 (최소값인 msr값 = mean(x-v)^2)을 결과한) vs값을 찾는다 (vs[151])
 +  * 이 값을 출력하니 50 이고 이 값은 x의 평균값이다. 
 +  * 이를 plot으로 출력한 것 
 +{{:pasted:20250904-173050.png}}
 +</WRAP>
 +</WRAP>
 +
  
-{{:pasted:20200504-203916.png}}+다음으로 MS값을 구하는 식인  
 +  * y = sum( (x-v)^2 ) / n 값을  
 +  * <del>v에 대해서</del> v를 가지고 y를 미분하면 (dy/dv)  
 +  * 변화하는 v값마다의 기울기 값을 구할 수 있는데 
 +  * 이 값이 0이 되는 지점의 v값이 무엇인지를 구하면 위의 R코드에서 구한 값을 구할 수 있게 된다. 아래는 그 과정이다. 
 +  * 그래프에서 가장 작은 기울기값을 갖는 v 값을 구한다고 (derivatives) 가정하고 이해를 하면 수학적으로 이해할 수 있다. ((see https://www.mathsisfun.com/calculus/derivatives-introduction.html))
  
-평균이  20, 표준편차가 4인 집단에서 4개의 샘플을 취하여 그 평균을 구하고, 그 평균을 이용하 SS 부분을 (Sum of Square) 구한다고 했을 때, 평균외에 다른 점수를 이용했을 때 어떻게 되는가를 본 것이다 (range <- seq(1:40)과 같이). ss값이 가장 작았을 때의 x값을 보면 샘플의 평균값임을 알  수 있다. 
  
-마지막 그래프에서 가장 작은 기울기값을 갖는 v 값을 구하는 미분을 한다고 가정하고 이해를 하면 수학적으로 이해할 수 있다.  
 {{:pasted:20200504-223320.png}} {{:pasted:20200504-223320.png}}
  
 \begin{eqnarray*} \begin{eqnarray*}
-\dfrac{\text{d}}{\text{dv}} \dfrac{\sum{(x-v)^2}}{n} & = &  \dfrac {\sum{2(x-v)*(-1)}}{n} \\+\dfrac{dy}{dv} = \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{\sum{-2(x-v)}}{n} \\
 & = & -\dfrac{2}{n} \sum{(x-v)} \\ & = & -\dfrac{2}{n} \sum{(x-v)} \\
Line 367: Line 417:
 v & = & \dfrac {\sum{x}}{n}  \\ v & = & \dfrac {\sum{x}}{n}  \\
 \end{eqnarray*} \end{eqnarray*}
-위에 따르면우리가  찾는 v 값은 샘플의 평균값이 ($\frac {\sum{x}}{n}$다. 따라서, 평균값으로 SS값을 구하게 되면 언제나 장 작은  값을 하게 되는 결과를 갖는다. 이렇게 작은 값을 갖는 현상을 정하고 n 대신에 n보다 조금 작은 숫자인 n-1을 지고 SS 부분을 나누어 준다. + 
 +기울기가 0이 될때의 v값은 x집합의 평균값일 때다. 
 +===== R에서 msr이 최소값이 되는 v값 효율적으로 찾기 ===== 
 +위의 미분을 이용한 방법을 써서 MS값이 최소값이 되는 순간을 R에서 구현해 볼 수 있다. 아래 아웃풋의 코멘트 부분을 읽을 것.  
 +<del>[[why n-1 gradient explanation]] 
 +</del> 
 +<code> 
 +# the above no gradient 
 + 
 +gradient <- function(x, v){ 
 +    residuals = x - v 
 +    # y = (sum(x-v)^2)/n 혹은 (mean(x-v)^2)  
 +    # 의 식이 ms값을 구하는 식인데  
 +    # 이를 v에 대해서 미분하면 chain rule을 써야 한다 
 +    # 자세한 것은 http://commres.net/wiki/estimated_standard_deviation 
 +    # 문서 중에 미분 부분 참조 
 +    # dy/dv = ( 2(x-v)*-1 ) / n chain rule 
 +    # dy/dv = -2 (x-v) / n = -2 (mean(residual))  
 +    dx = -2 * mean(residuals) 
 +    # return(list("ds" = dx)) 
 +    return(dx) 
 +} # function returns ds value 
 + 
 +zx <- (x-mean(x))/sd(x) 
 +# pick one random v in (x-v) 
 +v <- rnorm(1) 
 + 
 +# Train the model with scaled features 
 +learning.rate = 1e-1 
 + 
 +msrs <- c() 
 +vs <- c() 
 + 
 +nlen <- 75 
 +for (epoch in 1:nlen) { 
 +    residual <- residuals(zx, v) 
 +    msr.<- msr(zx, v) 
 +    msrs <- append(msrs, msr.x) 
 +     
 +    grad <- gradient(zx, v) 
 +    step.v <- grad * learning.rate #  
 +    v <- v - step.v # 그 다음 v값 
 +    vs <- append(vs, v) # v값 저장 
 +} 
 + 
 +tail(msrs) 
 +tail(vs) 
 + 
 +plot(vs, msrs, type='b'
 + 
 +# scaled 
 +vs # 변화하는 v 값들의 집합  
 +vs.orig <- (vs*sd(x))+mean(x)  
 +vs.orig 
 + 
 +# 마지막 v값이 최소값에 근접한 값 
 +v  
 +v.orig <- (v*sd(x))+mean(x)  
 +v.orig 
 + 
 +plot(vs.orig, msrs, type='b'
 + 
 +</code> 
 +===== output ===== 
 +<WRAP group> 
 +<WRAP half column> 
 +<code> 
 +> # the above no gradient 
 +>  
 +> gradient <- function(x, v){ 
 ++     residuals = x - v 
 ++     # y = (sum(x-v)^2)/혹은 (mean(x-v)^2)  
 ++     # 의 식이 ms값을 구하는 식인데  
 ++     # 이를 v에 대해서 미분하면 chain rule을 써야 한다 
 ++     # 자세한 것은 http://commres.net/wiki/estimated_standard_deviation 
 ++     # 문서 중에 미분 부분 참조 
 ++     # dy/dv = ( 2(x-v)*-1 ) / n chain rule 
 ++     # dy/dv = -2 (x-v) / n = -2 (mean(residual))  
 ++     dx = -2 * mean(residuals) 
 ++     # return(list("ds" = dx)) 
 ++     return(dx) 
 +# function returns ds value 
 +>  
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 +
 +</code> 
 +</WRAP> 
 + 
 +<WRAP half column> 
 +comment 
 +이 R script의 목적은 v값이 최소값이 되는 지점을 자동적으로 찾아보려는 것이다. 이것을 위해서 우선 v값으로 사용할 첫 점수를 랜덤하게 구한 후 (아래 그래프에서 빨간색 지점), 자동적으로 그 음 v 점수를 찾고 (녹색지점), 그 다음 v 점수를 찾고 (황금색 지점), . . 이런 과정을 계속하면서 각 v 점수에서의 msr값을 구해서 이에 해당하는 v값을 찾아 보려고 한다. 빨간색녹색, 황금색, . . . 이를 자동적으로 구하기 위해서 두가지 방법을 사용하는데 그 것이 
 +  * gradient function과 
 +  * learning_rate 값이다.  
 +gradient 펑션은 dy/dv 의 연쇄 미분식인 ([[:chain rules]]) -2(x-v) / n = -2 mean(res) 값을 구하는 것이다. 이렇게 구한 값에 learning_rate값을 곱한후, 이것을 먼저 사용한 v값에서 (빨간색 지점) 빼 주어 다음 v값으로 (녹색지점) 사용하려고 한다. 이 녹색지점에서의 v값을 사용했을 때의 gradient값을 구한 후 다시 이값에 learning_rate인 0.1을 곱여 그다음 스텝의 값을 얻고, 이 값을 바로 전의 v값에서 빼 준 값을 그 다음 v값으로 사용한다. 이렇게 구하는 v값들은 0.1씩 곱해주는 효과때문에 오른 쪽으로 옮겨가는 지점이 "<fc #ff0000>**점진적으로 줄어들게 되고**</fc>" 이 지점이 msr의 최소값이 되는 지점으로 게 된다.  
 + 
 +{{:pasted:20250905-202627.png}} 
 +클릭하면 큰 이미지로 볼 수 있음 
 +</WRAP> 
 +</WRAP> 
 + 
 +<WRAP group> 
 +<WRAP half column> 
 +<code> 
 +> zx <- (x-mean(x))/sd(x) 
 +> # pick one random v in (x-v) 
 +> v <- rnorm(1) 
 +>  
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 +
 +</code> 
 +</WRAP> 
 +<WRAP half column> 
 +comment 
 +  * 랜덤하게 v값을 찾음 ''v <- rnorm(1)''  
 +  * 원래는 mean(x)값 근처의 값을 랜덤하게 골라야 하므로 
 +  * ''v <- rnorm(1, mean(x), sd(x))'' 와 같이 써야 하지만 (현재의 경우, '' rnorm(1, 50, 5) ''가 된다)  
 +  * 그렇게 하질 않고 x 집합의 원소들을 표준점수화 한 후 '' zx <- (x-mean(x))/sd(x) '' (이렇게 표준점수화 하면 x 변인의 평균이 0, 표준편차가 1 이 되는 집합으로 변한다) 
 +  * '' v <- rnorm(1, 0, 1) ''로 구한다. 뒤의 인자인 0, 1 은 default이모로 생략. 
 +  * 이렇게 하는 이유는 혹시 나중에 다른 x집합에 똑같은 업을 하더라도 그 집합의 평균과 표준편차를 사용하지 않고 
 +  * 단순히 '' rnorm(1)'' 을 이용해서 찾으려고 하는 것이다.  
 + 
 +</WRAP> 
 +</WRAP> 
 + 
 +<WRAP group> 
 +<WRAP half column> 
 +<code> 
 +> # Train the model with scaled features 
 +> learning.rate = 1e-1 
 +>  
 +</code> 
 +</WRAP> 
 +<WRAP half column> 
 +comment 
 +  * 이 0.1은 gradient function으로 구한 해당 v값에 대한 y 미분값을 (기울기 값) 구한 후, 여기에 곱하기 위해서 지한다. 
 + 
 +</WRAP> 
 +</WRAP> 
 + 
 + 
 +<WRAP group> 
 +<WRAP half column> 
 +<code> 
 +> msrs <- c() 
 +> vs <- c() 
 +>  
 +> nlen <- 75 
 +> for (epoch in 1:nlen) { 
 ++     residual <- residuals(zx, v) 
 ++     msr.x <- msr(zx, v) 
 ++     msrs <- append(msrs, msr.x) 
 ++      
 ++     grad <- gradient(zx, v) 
 ++     step.v <- grad * learning.rate #  
 ++     v <- v - step.v # 그 다음 v값 
 ++     vs <- append(vs, v) # v값 저장 
 ++ } 
 +>  
 +> tail(msrs) 
 +[1] 0.999 0.999 0.999 0.999 0.999 0.999 
 +> tail(vs) 
 +[1] 6.415945e-08 5.132756e-08 4.106205e-08 3.284964e-08 2.627971e-08 2.102377e-08 
 +>  
 +> plot(vs, msrs) 
 +>  
 +>  
 +</code> 
 +</WRAP> 
 +<WRAP half column> 
 +comment 
 +  * nlen는 그냥 자의적으로 지정한다. 여기서는 75로 했다. 
 +  * for 문에서 처음 v값은 위에서 랜덤으로 구한 값이다 (v). 
 +  * 이 v값으로 gradient 펑션의 아웃풋 값을 구하고 (-2(residual)) = ''grad <- gradient(x, v)'' 
 +  * 이 값에 learning_rate값을 곱한 값을 구하여 ''step.v <- grad * learaning_rate'' 
 +  * 이 값을 원래 v값에서 빼준 후에  
 +  * 시 (for 문에서 반복하는 동안) v값으로 바꾼 후 '' v <v - step.v ''  
 +  * for문을 nlen번 만큼 반복한다.     
 +  * 이 과정에서 저장한  
 +  * msr값들과  
 +  * vs값들의 마막 6개를 살펴본다.  
 +  * v 값으로 x집합의 평균값을 사용하는 것이 최소 msr값이 된다는 것이 맞다면  
 +  * v 값은 0이 될것이다 (왜냐하면 x집합을 zx로 바꿨기 때문에, 즉 평균이 0이고 sd값이 1일 집합으로 바꿨기 때문에)  
 +  * 아래 그래프의 각 포인트는 v값의 이동을 나타내는데 grad*learning_rate의 영향으로 점진적으로 하가하여 최소값으로 도달한다. 
 + 
 +{{:pasted:20250905-214631.png}} 
 +</WRAP> 
 +</WRAP> 
 + 
 + 
 +<WRAP group> 
 +<WRAP half column> 
 +<code> 
 +> # scaled 
 +> vs # 변화하는 v 값들의 집합  
 + [1] 3.119260e-01 2.495408e-01 1.996326e-01 1.597061e-01 1.277649e-01 1.022119e-01 8.176952e-02 
 + [8] 6.541561e-02 5.233249e-02 4.186599e-02 3.349279e-02 2.679424e-02 2.143539e-02 1.714831e-02 
 +[15] 1.371865e-02 1.097492e-02 8.779935e-03 7.023948e-03 5.619158e-03 4.495327e-03 3.596261e-03 
 +[22] 2.877009e-03 2.301607e-03 1.841286e-03 1.473029e-03 1.178423e-03 9.427383e-04 7.541907e-04 
 +[29] 6.033525e-04 4.826820e-04 3.861456e-04 3.089165e-04 2.471332e-04 1.977066e-04 1.581652e-04 
 +[36] 1.265322e-04 1.012258e-04 8.098061e-05 6.478449e-05 5.182759e-05 4.146207e-05 3.316966e-05 
 +[43] 2.653573e-05 2.122858e-05 1.698286e-05 1.358629e-05 1.086903e-05 8.695226e-06 6.956181e-06 
 +[50] 5.564945e-06 4.451956e-06 3.561565e-06 2.849252e-06 2.279401e-06 1.823521e-06 1.458817e-06 
 +[57] 1.167054e-06 9.336428e-07 7.469143e-07 5.975314e-07 4.780251e-07 3.824201e-07 3.059361e-07 
 +[64] 2.447489e-07 1.957991e-07 1.566393e-07 1.253114e-07 1.002491e-07 8.019931e-08 6.415945e-08 
 +[71] 5.132756e-08 4.106205e-08 3.284964e-08 2.627971e-08 2.102377e-08 
 +> vs.orig <- (vs*sd(x))+mean(x)  
 +> vs.orig 
 + [1] 51.55963 51.24770 50.99816 50.79853 50.63882 50.51106 50.40885 50.32708 50.26166 50.20933 
 +[11] 50.16746 50.13397 50.10718 50.08574 50.06859 50.05487 50.04390 50.03512 50.02810 50.02248 
 +[21] 50.01798 50.01439 50.01151 50.00921 50.00737 50.00589 50.00471 50.00377 50.00302 50.00241 
 +[31] 50.00193 50.00154 50.00124 50.00099 50.00079 50.00063 50.00051 50.00040 50.00032 50.00026 
 +[41] 50.00021 50.00017 50.00013 50.00011 50.00008 50.00007 50.00005 50.00004 50.00003 50.00003 
 +[51] 50.00002 50.00002 50.00001 50.00001 50.00001 50.00001 50.00001 50.00000 50.00000 50.00000 
 +[61] 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 
 +[71] 50.00000 50.00000 50.00000 50.00000 50.00000 
 +>  
 +> # 마지막 v값이 최소값에 근접한 값 
 +> v  
 +[1] 2.102377e-08 
 +> v.orig <- (v*sd(x))+mean(x)  
 +> v.orig 
 +[1] 50 
 +
 +> plot(vs.orig, msrs, type='b'
 +>  
 +>  
 +>  
 +</code> 
 +</WRAP> 
 +<WRAP half column> 
 +comment 
 +{{:pasted:20250905-231742.png}} 
 + 
 +만약에 처음에 구한 랜덤 v값이 평균의 오른 쪽에있었더라면, 아래 그림과 같이 평균에 접근했을 것이다. 
 +{{:pasted:20250905-231513.png}} 
 +</WRAP> 
 +</WRAP> 
  
 그렇다면  왜 n-2 혹은 n-(1/2)가 아니고  n-1인가? 이를 수학적인 증명을 통해서 살펴보면 다음 장과 같다. 그렇다면  왜 n-2 혹은 n-(1/2)가 아니고  n-1인가? 이를 수학적인 증명을 통해서 살펴보면 다음 장과 같다.
Line 376: Line 694:
  
 ====== 수학적 증명 ====== ====== 수학적 증명 ======
- 
 우선,  우선, 
  
Line 383: Line 700:
        & = & E[(X^{2} - 2 X \mu + \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] \\
-& = & 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 E[X] + E[\mu^{2}], \;\; \text{because}\; E[X] = \mu \text{, \; E[\mu^2] = \mu^2, \\
 & = & E[X^{2}] - 2 \mu^{2} + \mu^{2}   \\ & = & E[X^{2}] - 2 \mu^{2} + \mu^{2}   \\
 & = & E[X^{2}] - \mu^{2} & = & E[X^{2}] - \mu^{2}
Line 390: Line 707:
 이므로 이므로
  
-\begin{eqnarray*+\begin{align
-E[X^2] & = Var[X] + \mu^2 \\  +E\left[X^2\right] & = Var\left[X\right] + \mu^2 \nonumber \\  
-& = \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) +& = \sigma^{2} + \mu^2 \\ 
-\end{eqnarray*}+\end{align}
  
 마찬가지로  마찬가지로 
- +\begin{align
-\begin{eqnarray*+Var \left[ \overline{X}\right] & =  \left[\overline{X}^2 \right] - \left[E(\overline{X})\right]^2 \nonumber \\ 
-Var[\overline{X}] & = E[\overline{X}^2] - [E(\overline{X})]^2 \\ +& = E\left[\overline{X}^{2}\right] - \mu^{2} \nonumber  
-& = E[\overline{X}^{2}] - \mu^{2} +\end{align}
-\end{eqnarray*}+
  
 따라서 따라서
-\begin{eqnarray*+\begin{align
-E[\overline{X}^{2}]  & = Var[\overline{X}] + \mu^2 \\  +E\left[\overline{X}^{2}\right]  & = Var\left[\overline{X}\right] + \mu^2 \nonumber \\  
-& = \frac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) +& = \frac {\sigma^{2}} {n} + \mu^{2}  
-\end{eqnarray*}+\end{align}
  
-참고로 위에서 $Var[\overline{X}] = \dfrac {\sigma^{2}} {n} $ 에 해당하는 설명은 [[:mean and variance of the sample mean]] 문서를 볼 것.+참고로 위에서 $Var\left[\overline{X}\right] = \dfrac {\sigma^{2}} {n} $ 에 해당하는 설명은 [[:mean and variance of the sample mean]] 문서를 볼 것.
  
 ---- ----
Line 415: Line 731:
 X,Y are Independent variables. X,Y are Independent variables.
  
-\begin{eqnarray*} +\begin{align*} 
-E[aX] &=a E[X] \\ +E[aX] & = a E[X] \\ 
-E[X+Y] &=E[X] + E[Y] \\ +E[X+Y] & = E[X] + E[Y] \\ 
-Var[aX] &=a^{\tiny{2}} Var[X] \\ +Var[aX] & = a^{\tiny{2}} Var[X] \\ 
-Var[X+Y] &=Var[X] + Var[Y]   +Var[X+Y] & = Var[X] + Var[Y]   
-\end{eqnarray*}+\end{align*}
  
 </WRAP> </WRAP>
 ---- ----
 우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다. 우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다.
-\begin{eqnarray*} +\begin{align*} 
-E[s^{2}] & = E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \dots\dots\dots (a) \\ +E[s^{2}] & = E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \qquad 
-& = \sigma^{2}  +\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot \;\(a)  \\ 
-\end{eqnarray*}+& = \sigma^{2}  
 +\end{align*}
  
 위의 식에서 일부만을 추출해서 먼저 보자. 위의 식에서 일부만을 추출해서 먼저 보자.
  
-\begin{eqnarray*} +\begin{align*} 
-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}-\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} - \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} \sum{X_{i}} + \sum{\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} - 2 \overline{X} \sum{X_{i}} + n \overline{X^2} \right]  \\ 
-& = E \left[\sum{X_{i}^{2}} - n{\overline{X}^{2}} \right] \\ +& = E \left[ \sum{X_{i}^2} - 2 \overline{X} \cdot (n \overline{X}+ n \overline {X^2} \right] \\ 
-& = \sum{E(X_{i}^{2})} - E(n\overline{X}^{2})  \\ +& = E \left[ \sum{X_{i}^2} - n \overline{X}^2 \right] \\ 
-& = \sum{E(X_{i}^{2})} - n E(\overline{X}^{2})  \;\;\; \dots\dots\dots\dots\dots (3) +& = \sum {E\left(X_{i}^2\right)} - E\left(n\overline{X}^2\right)  \\ 
-\end{eqnarray*} +& = \sum {E\left(X_{i}^2\right)} - n E\left(\overline{X}^2\right)  \;\;\; \dots\dots\dots\dots\dots (3) 
- +\end{align*}
-한 편, 위의 (1), (2)에서 +
  
 +한 편, 위의 $(1), (2)$에서 
  
 <WRAP box> <WRAP box>
-\begin{eqnarray*} +\begin{align*} 
-E[X_{i}^{2}] & = \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) \\ +E\left[X_{i}^{2}\right] & = \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) +E\left[\overline{X}^{2}\right] & = \dfrac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) 
-\end{eqnarray*}+\end{align*}
 </WRAP> </WRAP>
  
-위의 (1), (2)를 (3)에 대입해보면+위의 $(1), (2)$를 $(3)$에 대입해보면
  
-\begin{eqnarray*} +\begin{align*} 
-E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = \sum{E(X_{i}^{2})} - n E(\overline{X}^{2})  \\ +E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = \sum{E\left(X_{i}^{2}\right)} - n E\left(\overline{X}^{2}\right)  \\ 
-& = \sum{(\sigma^{2} + \mu^{2})} - n (\dfrac{\sigma^2}{n} + \mu^2) \\ +& = \sum{\left(\sigma^{2} + \mu^{2}\right)} - n \left(\dfrac{\sigma^2}{n} + \mu^2\right) \\ 
-& = n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\ +& = n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\ 
-& = (n-1) \sigma^{2}  +& = \left(n-1\right) \sigma^{2}  
-\end{eqnarray*}+\end{align*}
  
 위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면,  위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면, 
Line 478: Line 795:
 \end{eqnarray*} \end{eqnarray*}
  
 +
 +----
 만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면,  만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면, 
  
Line 484: Line 803:
 & = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\ & = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\
 & = & \dfrac{1}{n} (n-1) \sigma^{2} \\ & = & \dfrac{1}{n} (n-1) \sigma^{2} \\
-& = & (\dfrac{n-1}{n}) \sigma^{2} \\+& = & \left(\dfrac{n-1}{n}\right) \sigma^{2} \\
 \end{eqnarray*} \end{eqnarray*}
  
-즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다).+즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다). 따라서 샘플을 취한 후에 모집단의 분산을 추정할 때에는 n 대신에 n-1을 사용하는 것이 맞다. 그렇다면 모집단의 분산을 구할 때는 n으로 (N으로) 나누어 주면 된다고 생각된다. 그러나 일반적으로 모집단의 분산을 구할 때에도 N-1로 나누어 구하게 된다. 이유는 모집단의 경우에 N이 충분히 큰 경우인데 이 때에는 N으로 나누어 주나, N-1로 나누어주나 큰 차이가 없기 때문이다. 따라서, R에서 분산을 구하는 var(x)에는 x의 성격에 상관없이 SS를 n-1로 나누어 분산을 구하게 된다.
  
-{{tag>"research methods" "조사방법론" "표준편차" "n-1" "자유도" "degrees of freedom" "n-1" "표준오차"}} 
  
 +
 +
 +====== tags ======
 +{{tag>"research methods" "조사방법론" "표준편차" "n-1" "자유도" "degrees of freedom" "n-1" "표준오차"}}
  
estimated_standard_deviation.1595679438.txt.gz · Last modified: 2020/07/25 21:17 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki