User Tools

Site Tools


c:mrm:2022:qs_from_stu

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
c:mrm:2022:qs_from_stu [2022/04/21 14:10] hkimscilc:mrm:2022:qs_from_stu [2022/04/23 18:20] (current) hkimscil
Line 5: Line 5:
 혹시 어떤 차이점이 있어서 그런 걸 까요? 혹시 어떤 차이점이 있어서 그런 걸 까요?
 </blockquote> </blockquote>
 +
 위 학생의 질문에서 앞부분, X = {3, 4, 3, 4, 6} 의 분산값을 구하기 위해서 SS를 n-1로 나눈다는 이야기는 맞습니다. 그러나, 뒤의 N(70, 15^2) 부분에 대한 이해는 약간 정리가 안되어 있습니다. 이를 설명해 보겠습니다.  위 학생의 질문에서 앞부분, X = {3, 4, 3, 4, 6} 의 분산값을 구하기 위해서 SS를 n-1로 나눈다는 이야기는 맞습니다. 그러나, 뒤의 N(70, 15^2) 부분에 대한 이해는 약간 정리가 안되어 있습니다. 이를 설명해 보겠습니다. 
  
-위에서 N(70, 15^2)은 평균이 70이고 표준편차가 15인 (따라서 분산이 15^2인) 모집단을 (population) 의미하는 것입니다. 선생님은 이 모집단에서 n=100인 샘플을 구해 (샘플링을 하여서) 그 평균값을 기록하고, 다시 이 샘플을 모집단에 다시 넣고, 샘플링을 하여 또 평균값을 기록하는 것을 반복하여 **이 평균값의 집합을** 모아 놓는다는 것을 말하였습니다. 이것을 기호로 다시 표현하면 아래와 같이 표현할 수 있습니다.+위에서 N(70, 15^2)은 평균이 70이고 표준편차가 15인 (따라서 분산이 15^2인) 모집단을 (population) 의미하는 것입니다. 선생님은 이 모집단에서 n=100인 샘플을 구해 (샘플링을 하여서) 그 평균값을 기록하고, 다시 이 샘플을 모집단에 다시 넣고, 샘플링을 하여 또 평균값을 기록하는 것을 반복하여 **이 평균값의 집합을** 모아 놓는다는 것을 말하였습니다 (이론적으로는 이것을 무한반복합니다). 이것을 기호로 다시 표현하면 아래와 같이 표현할 수 있습니다. 
 $$ $$
 \overline{X } \sim N(\mu_{\overline{X}}, {\sigma_{\overline{X}}}^2) \overline{X } \sim N(\mu_{\overline{X}}, {\sigma_{\overline{X}}}^2)
 $$ $$
 +
 위에서  위에서 
   * $\overline{X}$ 는 X bar 즉 평균을 의미하고    * $\overline{X}$ 는 X bar 즉 평균을 의미하고 
-  * $\sim $ 사인은 앞의 X bar 들의 집합을 의미합니다. 그리고 +  * $\sim $ 사인은 앞의 X bar 들의 집합을 의미합니다.  
-  * 이 집단에서의 평균 $\mu_{\overline{X}}$ 값은 $70$ 이 되고  +  * $\mu_{\overline{X}}$ 기호는 샘플평균들로 루어진 합의 평균을 뜻하며 
-  * ${\sigma_{\overline{X}}}^2 = \frac{\sigma^2}{n}$ 이 된다는 뜻입니다.  +  * $(\sigma_{\overline{X}})^2$ 기호는 샘플평균들의 분산값을 말합니다.  
-    * 위에서 뒤쪽의 $\sigma^2$ 은 모집단의 (population) 시마 제곱을 (분산) 합니다. +  * 여기서 [[:Central Limit Theorem]] 이 말하는 것은    
-  * 그런데 이 두번째 식이 이 집단의 분산값을 구하는 공식이고 이것이 SS를 df로 나눈다는 식을 대체하는 것은 아닙니다.  +    * 이 평균집단의 평균 $\mu_{\overline{X}}$ 값은 모집단의 평균인 $70$ 이 되고  
-  * 사실 위의 집합에서 (이것을 distribution of sample means라고 부른다고 했습니다) 직접 분산값을 구한다고 하면 아래와 같이 구해야 할 것입니다.+    분산 값은 모집단 분산값을 샘플의 크기인 n으로 나누 값이 된다는 것입니다. 즉, ${\sigma_{\overline{X}}}^2 = \frac{\sigma^2}{n}$ 입니다. 위의 예에서는 $\frac {15^2} {100} 입니다. 
 +    * 리고 이 평균들의 은 정상분포를 (Normal distribution) 이룬다는 것입니다.  
 +$$ 
 +\begin{eqnarray*} 
 +\overline{X } & \sim & N(\mu_{\overline{X}}, {\sigma_{\overline{X}}}^2) \\ 
 +& \sim & N(\mu, \frac{\sigma^2}{n}) \\ 
 +& \sim & N(70, \frac{15^2} {100}) \\ 
 +\end{eqnarray*} 
 +$$  
 +$- $ 
 +  * 그런데 이 두 번째 식이 이 집단의 분산값을 구하는 공식이고 이것이 SS를 df로 나눈다는 식을 대체하는 것은 아닙니다. 그냥 단지 가치가 (분산값이) 서로 같다는 것을 말합니다.  
 +  * 위의 샘플평균들의 집합에서 (distribution of sample means) 직접 분산 값을 구한다고 하면 아래와 같이 구해야 할 것입니다. 
 + 
 $$ $$
 \begin{eqnarray*} \begin{eqnarray*}
Line 25: Line 41:
 \end{eqnarray*} \end{eqnarray*}
 $$ $$
 +$- $
 +
   * 선생님이 이야기 하는 것은 바로 위의 분산 값이 $\frac{\sigma^2}{n}$ 와 같은 값이 된다는 뜻입니다.   * 선생님이 이야기 하는 것은 바로 위의 분산 값이 $\frac{\sigma^2}{n}$ 와 같은 값이 된다는 뜻입니다.
   * 즉, 다시 한번 쓰면    * 즉, 다시 한번 쓰면 
 +
 $$ $$
 \begin{eqnarray} \begin{eqnarray}
 (\sigma_{\bar{X}})^2  & = & \frac {SS} {df} \\ (\sigma_{\bar{X}})^2  & = & \frac {SS} {df} \\
 & = & \frac {\Sigma{(\overline{X_{i}} - \mu_\overline{X})}} {n-1} \\ & = & \frac {\Sigma{(\overline{X_{i}} - \mu_\overline{X})}} {n-1} \\
-& = & \frac{\sigma^2}{n}+& = & \frac{\sigma^2}{n} \\ 
 +& = & \frac{15^2}{100}
 \end{eqnarray} \end{eqnarray}
 $$ $$
-위에서 (2)와 (3)은 그 값이 (value) 같다는 뜻입니다. 아래는 그것을 R에서 시뮬레이션하는 스크립트입니다.+위에서 (2)와 (3)은 그 값이 (value) 같다는 뜻입니다. (4)는 n = 100 일 경우의 샘플평균집합의 분산값입니다. 아래는 그것을 R에서 시뮬레이션하는 스크립트입니다.
  
 <code> <code>
 # random sampling  # random sampling 
 # n = 10, 100, 1000 등 정할 수 있습니다. # n = 10, 100, 1000 등 정할 수 있습니다.
-# 아래는 10명의 샘플사이즈로 샘플링을 함을 예로 듭니다. +# 아래는 n명의 샘플사이즈로 샘플링을 함을 예로 듭니다. 
-n <- 10+n <- 100
  
 # 모집단의 평균은 70, 표준편차는 15를 가정합니다 # 모집단의 평균은 70, 표준편차는 15를 가정합니다
Line 55: Line 75:
  
 # iteration = 100, 1000, 10000 # iteration = 100, 1000, 10000
-백만법을 샘플링하기 위해서 iter = 백만으로 지정합니다 +iter 번을 샘플링합니다 
-# 그리고 이를 백만개의 NA로 채워서 means에 저장합니다. +# 그리고 이를 iter 개의 NA로 채워서 means에 저장합니다. 
-iter <- 1000+iter <- 1000000
 means <- rep (NA, iter) means <- rep (NA, iter)
  
-# 루프문을 통해서 위의 iter 개의 means[i]에 샘플의 (n=10) +# 루프문을 통해서 위의 iter 개의 means[i]에  
-평균을 구해서 저장합니다+샘플의 (샘플 숫자 n) 평균을 구해서 저장합니다
 for(i in 1:iter){ for(i in 1:iter){
   means[i] = mean(rnorm(n, pop.mean, pop.sd))   means[i] = mean(rnorm(n, pop.mean, pop.sd))
 } }
  
-# 이 개의 샘플평균들의 집합의 평균 (m), +# 이 iter 개의 샘플평균들의 집합의 평균 (m), 
 # 분산 (v1), 표준편차를 (sd1) 구해봅니다.  # 분산 (v1), 표준편차를 (sd1) 구해봅니다. 
 m <- mean(means) m <- mean(means)
 # 아래 값이 평균들 분포의 분산값입니다. 즉, SS/df 로 구한 값입니다. # 아래 값이 평균들 분포의 분산값입니다. 즉, SS/df 로 구한 값입니다.
 v1 <- var(means) v1 <- var(means)
-# 위의 값은  +# 위의 값은 sum((means - m)^2) # 을 (SS 부분) 구한 후
-sum((means - m)^2) # 을 (SS 부분) 구한 후+
 # iter - 1 값으로 (df 부분) 나눠주어서 구해도 됩니다. # iter - 1 값으로 (df 부분) 나눠주어서 구해도 됩니다.
 +v1 
 sum((means - m)^2) / (iter - 1) sum((means - m)^2) / (iter - 1)
 +# 위의 값은 아래 sd(means) 와 같을 겁니다.
  
 sd1 <- sd(means) # 이 값이 평균분포의 표준편차값입니다. sd1 <- sd(means) # 이 값이 평균분포의 표준편차값입니다.
Line 89: Line 110:
 # 위에서 평균들의 집합이 무한대라면 (현재는 천이지만)  # 위에서 평균들의 집합이 무한대라면 (현재는 천이지만) 
 # v1 과 se.sq 값은 같게 됩니다. # v1 과 se.sq 값은 같게 됩니다.
-천명인 이 경우에도 두 값이 아주 비슷합니다.+iter 번 샘플링을 한 경우에도 두 값이 아주 비슷합니다.
  
 </code> </code>
Line 99: Line 120:
 > # random sampling  > # random sampling 
 > # n = 10, 100, 1000 등 정할 수 있습니다. > # n = 10, 100, 1000 등 정할 수 있습니다.
-> # 아래는 10명의 샘플사이즈로 샘플링을 함을 예로 듭니다. +> # 아래는 n명의 샘플사이즈로 샘플링을 함을 예로 듭니다. 
-> n <- 10+> n <- 100
  
 > # 모집단의 평균은 70, 표준편차는 15를 가정합니다 > # 모집단의 평균은 70, 표준편차는 15를 가정합니다
Line 112: Line 133:
 > # 평균을 알아봅니다. 이것이 어디에 쓰이지는 않습니다. > # 평균을 알아봅니다. 이것이 어디에 쓰이지는 않습니다.
 > mean(s1)  > mean(s1) 
-[1] 71.98304+[1] 71.63331
  
  
 > # iteration = 100, 1000, 10000 > # iteration = 100, 1000, 10000
-> # 백만법을 샘플링하기 위해서 iter = 백만으로 지정합니다 +> # iter 번을 샘플링합니다 
-> # 그리고 이를 백만개의 NA로 채워서 means에 저장합니다. +> # 그리고 이를 iter 개의 NA로 채워서 means에 저장합니다. 
-> iter <- 1000+> iter <- 1000000
 > means <- rep (NA, iter) > means <- rep (NA, iter)
  
-> # 루프문을 통해서 위의 iter 개의 means[i]에 샘플의 (n=10) +> # 루프문을 통해서 위의 iter 개의 means[i]에  
-> # 평균을 구해서 저장합니다+> # 샘플의 (샘플 숫자 n) 평균을 구해서 저장합니다
 > for(i in 1:iter){ > for(i in 1:iter){
 +   means[i] = mean(rnorm(n, pop.mean, pop.sd)) +   means[i] = mean(rnorm(n, pop.mean, pop.sd))
 + } + }
  
-> # 이 개의 샘플평균들의 집합의 평균 (m), +> # 이 iter 개의 샘플평균들의 집합의 평균 (m), 
 > # 분산 (v1), 표준편차를 (sd1) 구해봅니다.  > # 분산 (v1), 표준편차를 (sd1) 구해봅니다. 
 > m <- mean(means) > m <- mean(means)
 > # 아래 값이 평균들 분포의 분산값입니다. 즉, SS/df 로 구한 값입니다. > # 아래 값이 평균들 분포의 분산값입니다. 즉, SS/df 로 구한 값입니다.
 > v1 <- var(means) > v1 <- var(means)
-> # 위의 값은  +> # 위의 값은 sum((means - m)^2) # 을 (SS 부분) 구한 후
-> # sum((means - m)^2) # 을 (SS 부분) 구한 후+
 > # iter - 1 값으로 (df 부분) 나눠주어서 구해도 됩니다. > # iter - 1 값으로 (df 부분) 나눠주어서 구해도 됩니다.
 +> v1 
 +[1] 2.248648
 > sum((means - m)^2) / (iter - 1) > sum((means - m)^2) / (iter - 1)
-[1] 23.54275+[1] 2.248648 
 +> # 위의 값은 아래 sd(means) 와 같을 겁니다.
  
 > sd1 <- sd(means) # 이 값이 평균분포의 표준편차값입니다. > sd1 <- sd(means) # 이 값이 평균분포의 표준편차값입니다.
 > m > m
-[1] 69.89407+[1] 70.00091
 > v1 > v1
-[1] 23.54275+[1] 2.248648
 > sd1 > sd1
-[1] 4.852087+[1] 1.499549
  
 > # 아래는 평균들분포의 표준편차가 (표준오차)  > # 아래는 평균들분포의 표준편차가 (표준오차) 
Line 151: Line 174:
 > se.sq <- (pop.sd^2) / n > se.sq <- (pop.sd^2) / n
 > se.sq  > se.sq 
-[1] 22.5+[1] 2.25
  
 > # 위에서 평균들의 집합이 무한대라면 (현재는 천이지만)  > # 위에서 평균들의 집합이 무한대라면 (현재는 천이지만) 
 > # v1 과 se.sq 값은 같게 됩니다. > # v1 과 se.sq 값은 같게 됩니다.
-> # 천명인 이 경우에도 두 값이 아주 비슷합니다.+> # iter 번 샘플링을 한 경우에도 두 값이 아주 비슷합니다.
  
 </code> </code>
  
- +샘플평균들을 (n= n개의) 모아놓은 집합에서 (sampling distribution 혹은 distribution of sample means 혹은 distribution of the sample mean) 이 평균은 모집단의 평균이고 표준편차는 sqrt(모집단분산/n) 이라고 하면, 이제 우리는 n = n개의 샘플 하나를 취했을 때 그 샘플의 평균이 어느 범위에서 나오게 될지 측해 (추론) 볼 수 있습니다. 위에서 se.sq 값은 샘플평균들의 분산값이고 이것이 22.5 이므로 표준편차값은 이를 sqrt 한 값이 됩니다. 이 값을 se값이라고 하고 이를 두 배한 값을 모집단의 평균을 중심으로 빼고 더해 보면 그 범위가 나오는데 이것이 n = n 명의 샘플을 취했을 때 그 샘플의 평균이 존재할 범위가 됩니다. 그리고 이 범위는 se값을 2개 썼으므로 95%의 확신만을 갖습니다 (100%가 아니라)아래는 그 범위가 90.51317 - 109.4868 임을 보여 줍니다. 만약에 내가 n = n 개의 샘플을 취했는데 그 샘플의 평균이 110점과 같이 위의 범위 밖에서 나타난 다면 이 샘플은 원래 모집단에서 나온 샘플이 아닐 가능성이 아주 높다고 결론을 내릴 수 밖에 없습니다. 바로 이 마지막 예시는 이 샘플이 원래 모집단에서 나온 샘플이 아닌 머리가 좋아지는 약을 복용한 집단에서 나온 샘플이라는 생각을 뒤받침해 주는 결과가 됩니다
- +
-런데 추가로 . . . +
 <code> <code>
-set.seed(10+> se <- sqrt(se.sq
-<- 10 +> se 
-s1 <rnorm(n, mean = 100, sd = 10) +[1] 4.743416 
-mean(s1) # r 펑션으로 평균구하기 +> se*2 
-sd(s1) # r 펑션으로 표준편차구하기+[1] 9.486833 
 +> se2 <- se*2 
 +> pop.m se2 
 +[1] 90.51317 
 +> pop.m + se2 
 +[1] 109.4868 
 +>  
 +</code>
  
-error <- s1-mean(s1) 
-error.sq <- error^2 
-sum.error.sq <- sum(error.sq) # 이 값이 ss 파트 
-df <- n-1 # 이 값이 df 값  
-var.cal <- sum.error.sq/df # 실제 계산한 분산값 
-sd.cal <- sqrt(var.cal) # 실제 계산한 표준편차 값 
-sd.cal # 계산한 sd값 출력 
-sd.cal == sd(s1) # 같은 값인지 확인 
  
-# n이 아주 크다면 n 이나 n-1이나 차이가 없다 
-# 아래는 샘플의 크기가 일억인 경우 
-set.seed(10) 
-n <- 100000000 
-s1 <- rnorm(n, mean = 100, sd = 10) 
-mean(s1) 
-sd(s1) # 이것이 n-1로 구한 r 펑션에서의 sd값 
- 
-error <- s1-mean(s1) 
-error.sq <- error^2 
-sum.error.sq <- sum(error.sq) # 분산값 구하기에서 SS 파트 
-df <- n-1 # df 파트 
-var.cal <- sum.error.sq/df # 계산해서 구한 분산값  
-sd.cal <- sqrt(var.cal) # 계산해서 구한 표준편차값 
-sd.cal 
-sd.cal == sd(s1) # 동일함. 여기까지는 위의 예와 같음 
- 
-# tweak 여기에 더하여 만약에 n-1 대신 n으로 나눠주면 어떻게 될까? 
-var.cal2 <- sum.error.sq/n 
-sd.cal2 <- sqrt(var.cal) 
-sd.cal2 
-sd.cal2 == sd(s1) 
- 
-</code> 
c/mrm/2022/qs_from_stu.1650517847.txt.gz · Last modified: 2022/04/21 14:10 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki