c:ms:2025:lecture_note_week_04
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
c:ms:2025:lecture_note_week_04 [2025/03/24 12:56] – created hkimscil | c:ms:2025:lecture_note_week_04 [2025/03/26 07:41] (current) – [Hypothesis testing] hkimscil | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Variance ====== | ||
+ | Why n-1 for 모집단 | ||
< | < | ||
# variance | # variance | ||
Line 10: | Line 12: | ||
ss/n | ss/n | ||
ss/df | ss/df | ||
+ | </ | ||
+ | ====== Variance output ====== | ||
+ | < | ||
+ | > # variance | ||
+ | > # why we use n-1 when calculating | ||
+ | > # population variance (instead of N) | ||
+ | > a <- rnorm2(100000000, | ||
+ | > a.mean <- mean(a) | ||
+ | > ss <- sum((a-a.mean)^2) | ||
+ | > n <- length(a) | ||
+ | > df <- n-1 | ||
+ | > ss/n | ||
+ | [1] 100 | ||
+ | > ss/df | ||
+ | [1] 100 | ||
+ | > | ||
+ | </ | ||
+ | ====== rule of SD ====== | ||
+ | < | ||
# standard deviation 68, 85, 99 rule | # standard deviation 68, 85, 99 rule | ||
one.sd <- .68 | one.sd <- .68 | ||
Line 29: | Line 50: | ||
qnorm(0.005) | qnorm(0.005) | ||
qnorm(1-0.005) | qnorm(1-0.005) | ||
+ | </ | ||
+ | ====== rule of SD output ====== | ||
+ | < | ||
+ | > # standard deviation 68, 85, 99 rule | ||
+ | > one.sd <- .68 | ||
+ | > two.sd <- .95 | ||
+ | > thr.sd <- .99 | ||
+ | > 1-one.sd | ||
+ | [1] 0.32 | ||
+ | > (1-one.sd)/ | ||
+ | [1] 0.16 | ||
+ | > qnorm(0.16) | ||
+ | [1] -0.9944579 | ||
+ | > qnorm(1-0.16) | ||
+ | [1] 0.9944579 | ||
+ | > | ||
+ | > 1-two.sd | ||
+ | [1] 0.05 | ||
+ | > (1-two.sd)/ | ||
+ | [1] 0.025 | ||
+ | > qnorm(0.025) | ||
+ | [1] -1.959964 | ||
+ | > qnorm(0.975) | ||
+ | [1] 1.959964 | ||
+ | > | ||
+ | > 1-thr.sd | ||
+ | [1] 0.01 | ||
+ | > (1-thr.sd)/ | ||
+ | [1] 0.005 | ||
+ | > qnorm(0.005) | ||
+ | [1] -2.575829 | ||
+ | > qnorm(1-0.005) | ||
+ | [1] 2.575829 | ||
+ | > | ||
+ | > | ||
+ | </ | ||
+ | ====== Sampling distribution ====== | ||
+ | OR the distribution of sample means | ||
+ | < | ||
# sampling distribution | # sampling distribution | ||
n.ajstu <- 100000 | n.ajstu <- 100000 | ||
Line 166: | Line 225: | ||
# 혹은 | # 혹은 | ||
2 * pnorm(106, m.25, sd.25, lower.tail = F) | 2 * pnorm(106, m.25, sd.25, lower.tail = F) | ||
+ | </ | ||
+ | ====== Sampling distribution output ====== | ||
+ | {{: | ||
+ | < | ||
+ | > # sampling distribution | ||
+ | > n.ajstu <- 100000 | ||
+ | > mean.ajstu <- 100 | ||
+ | > sd.ajstu <- 10 | ||
+ | > | ||
+ | > set.seed(1024) | ||
+ | > ajstu <- rnorm2(n.ajstu, | ||
+ | > | ||
+ | > mean(ajstu) | ||
+ | [1] 100 | ||
+ | > sd(ajstu) | ||
+ | [1] 10 | ||
+ | > var(ajstu) | ||
+ | [,1] | ||
+ | [1,] 100 | ||
+ | > min.value <- min(ajstu) | ||
+ | > max.value <- max(ajstu) | ||
+ | > min.value | ||
+ | [1] 57.10319 | ||
+ | > max.value | ||
+ | [1] 141.9732 | ||
+ | > | ||
+ | > iter <- 10000 # # of sampling | ||
+ | > | ||
+ | > n.4 <- 4 | ||
+ | > means4 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > n.25 <- 25 | ||
+ | > means25 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > n.100 <- 100 | ||
+ | > means100 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > n.400 <- 400 | ||
+ | > means400 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > n.900 <- 900 | ||
+ | > means900 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > n.1600 <- 1600 | ||
+ | > means1600 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > n.2500 <- 2500 | ||
+ | > means2500 <- rep (NA, iter) | ||
+ | > for(i in 1:iter){ | ||
+ | + | ||
+ | + } | ||
+ | > | ||
+ | > h4 <- hist(means4) | ||
+ | > h25 <- hist(means25) | ||
+ | > h100 <- hist(means100) | ||
+ | > h400 <- hist(means400) | ||
+ | > h900 <- hist(means900) | ||
+ | > h1600 <- hist(means1600) | ||
+ | > h2500 <- hist(means2500) | ||
+ | > | ||
+ | > | ||
+ | > plot(h4, ylim=c(0, | ||
+ | > plot(h25, add = T, col=" | ||
+ | > plot(h100, add = T, col=" | ||
+ | > plot(h400, add = T, col=" | ||
+ | > plot(h900, add = T, col=" | ||
+ | > | ||
+ | > | ||
+ | > sss <- c(4, | ||
+ | > ses <- rep (NA, length(sss)) # std errors | ||
+ | > for(i in 1: | ||
+ | + | ||
+ | + } | ||
+ | > ses.means4 <- sqrt(var(means4)) | ||
+ | > ses.means25 <- sqrt(var(means25)) | ||
+ | > ses.means100 <- sqrt(var(means100)) | ||
+ | > ses.means400 <- sqrt(var(means400)) | ||
+ | > ses.means900 <- sqrt(var(means900)) | ||
+ | > ses.means1600 <- sqrt(var(means1600)) | ||
+ | > ses.means2500 <- sqrt(var(means2500)) | ||
+ | > ses.real <- c(ses.means4, | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | > ses.real | ||
+ | [1] 4.9719142 2.0155741 0.9999527 0.5034433 0.3324414 | ||
+ | [6] 0.2466634 0.1965940 | ||
+ | > | ||
+ | > ses | ||
+ | [1] 5.0000000 2.0000000 1.0000000 0.5000000 0.3333333 | ||
+ | [6] 0.2500000 0.2000000 | ||
+ | > se.1 <- ses | ||
+ | > se.2 <- 2 * ses | ||
+ | > | ||
+ | > lower.s2 <- mean(ajstu)-se.2 | ||
+ | > upper.s2 <- mean(ajstu)+se.2 | ||
+ | > data.frame(cbind(sss, | ||
+ | | ||
+ | 1 4 5.0000000 4.9719142 90.00000 110.0000 | ||
+ | 2 25 2.0000000 2.0155741 96.00000 104.0000 | ||
+ | 3 100 1.0000000 0.9999527 98.00000 102.0000 | ||
+ | 4 400 0.5000000 0.5034433 99.00000 101.0000 | ||
+ | 5 900 0.3333333 0.3324414 99.33333 100.6667 | ||
+ | 6 1600 0.2500000 0.2466634 99.50000 100.5000 | ||
+ | 7 2500 0.2000000 0.1965940 99.60000 100.4000 | ||
+ | > | ||
+ | > min.value <- min(ajstu) | ||
+ | > max.value <- max(ajstu) | ||
+ | > min.value | ||
+ | [1] 57.10319 | ||
+ | > max.value | ||
+ | [1] 141.9732 | ||
+ | > # means25 분포에서 population의 가장 최소값인 | ||
+ | > # min.value가 나올 확률은 얼마나 될까? | ||
+ | > m.25 <- mean(means25) | ||
+ | > sd.25 <- sd(means25) | ||
+ | > m.25 | ||
+ | [1] 100.0394 | ||
+ | > sd.25 | ||
+ | [1] 2.015574 | ||
+ | > pnorm(min.value, | ||
+ | [1] 5.414963e-101 | ||
+ | > # 위처럼 최소값, 최대값의 probability를 가지고 | ||
+ | > # 확률을 구하는 것은 의미가 없음. 즉, 어떤 샘플의 | ||
+ | > # 평균이 원래 population에서 나왔는지를 따지는 것을 | ||
+ | > # 그 pop의 최소값으로 판단하는 것은 의미가 없음. | ||
+ | > # 그 보다는 sd.25와 같은 standard deviation을 가지 | ||
+ | > # 고 보는 것이 타당함. 이 standard deviation 을 | ||
+ | > # standard error라고 부름 | ||
+ | > se.25 <- sd.25 | ||
+ | > se.25.2 <- 2 * sd.25 | ||
+ | > mean(means25)+c(-se.25.2, | ||
+ | [1] 96.00822 104.07051 | ||
+ | > # 위처럼 95% certainty를 가지고 구간을 판단하거나 | ||
+ | > # 아래 처럼 점수를 가지고 probability를 볼 수도 | ||
+ | > # 있음 | ||
+ | > pnorm(95.5, m.25, sd.25) | ||
+ | [1] 0.01215658 | ||
+ | > # 혹은 | ||
+ | > pnorm(95.5, m.25, sd.25) * 2 | ||
+ | [1] 0.02431317 | ||
+ | > # 매우중요. 위의 이야기는 내가 25명의 샘플을 취 | ||
+ | > # 했을 때, 그 점수가 95.5가 나올 확률을 구해 본것 | ||
+ | > # 다른 예로 | ||
+ | > pnorm(106, m.25, sd.25, lower.tail = F) | ||
+ | [1] 0.001551781 | ||
+ | > # 혹은 | ||
+ | > 2 * pnorm(106, m.25, sd.25, lower.tail = F) | ||
+ | [1] 0.003103562 | ||
+ | > | ||
+ | > | ||
+ | > | ||
+ | </ | ||
+ | ====== mean and variance of sample means ====== | ||
+ | 위에서 standard deviation of sample means (샘플평균들로 이루어진 집합의 표준편차) 값을 standard error라고 부른다. 그리고 이 standard error 값은 원래 population의 $\sigma^2$ 값을 샘플의 사이즈로 나누어준 값을 ($\sigma^2/ | ||
+ | |||
+ | ====== Hypothesis testing ====== | ||
+ | 먼저 이해하기 | ||
+ | * pnorm (and rnorm, qnorm) | ||
+ | * 표준점수 | ||
+ | * sampling distribution | ||
+ | * = distribution of sample means | ||
+ | * = distribution of the sample mean | ||
+ | * standard error | ||
+ | * = standard deviation of sample means | ||
+ | * = standard deviation of sampling distribution | ||
+ | * CLT | ||
+ | * $\overline{X} \sim N(\mu, \displaystyle \frac{\sigma^2}{n}) $ | ||
+ | |||
+ | 위를 이해한다면 이제 우리는 차이의가설을 만들어 테스트해볼 수 있다. [[: | ||
+ | < | ||
+ | # 가설 테스트 | ||
+ | set.seed(2000) | ||
+ | pop <- rnorm2(1000000, | ||
+ | m.pop <- mean(pop) | ||
+ | sd.pop <- sd(pop) | ||
+ | var.pop <- var(pop) | ||
+ | |||
+ | # 시뮬레이션 시작 | ||
+ | iter <- 10000 # 사실은 무한대 | ||
+ | n <-100 # sample size | ||
+ | means < | ||
+ | for(i in 1:iter){ | ||
+ | means[i] = mean(sample(pop, | ||
+ | } | ||
+ | m.empirical <- mean(means) | ||
+ | se.empirical <- sd(means) | ||
+ | m.empirical | ||
+ | se.empirical | ||
+ | se <- sd.pop/ | ||
+ | se2 <- se * 2 | ||
+ | se3 <- se * 3 | ||
+ | |||
+ | vlines <- c(m.empirical, | ||
+ | m.empirical+c(-se, | ||
+ | m.empirical+c(-se2, | ||
+ | m.empirical+c(-se3, | ||
+ | colors = c(" | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | hist(means) | ||
+ | abline(v=vlines, | ||
+ | |||
+ | # 아래는 n=100 샘플을 하여 평균을 구해본 것 | ||
+ | s1 <- sample(pop, n) | ||
+ | s1 | ||
+ | mean(s1) | ||
+ | s2 <- sample(pop, n) | ||
+ | mean(s2) | ||
+ | |||
+ | # set.seed(2000) | ||
+ | iter <- 20 | ||
+ | n <-100 | ||
+ | means < | ||
+ | for(i in 1:iter){ | ||
+ | means[i] = mean(sample(pop, | ||
+ | } | ||
+ | means | ||
+ | means < 48 | ||
+ | means > 52 | ||
+ | table(means< | ||
+ | table(means> | ||
+ | table(means< | ||
+ | |||
+ | s3 <- rnorm2(n, 53.2, 10) | ||
+ | m.s3 <- mean(s3) | ||
+ | m.s3 | ||
+ | |||
+ | p.val.one.tail <- | ||
+ | pnorm(m.s3, m.pop, se, lower.tail = F) | ||
+ | p.val.two.tail <- | ||
+ | pnorm(m.s3, m.pop, se, lower.tail = F) * 2 | ||
+ | p.val.one.tail | ||
+ | p.val.two.tail | ||
+ | |||
+ | set.seed(1010) | ||
+ | s4 <- rnorm(100, 54, 10) | ||
+ | m.s4 <- mean(s4) | ||
+ | m.s4 | ||
+ | |||
+ | p.val.two.tail <- pnorm(m.s4, | ||
+ | m.pop, | ||
+ | se, lower.tail = F) * 2 | ||
+ | p.val.two.tail | ||
+ | p.val.one.tail < | ||
+ | p.val.one.tail | ||
+ | z.score <- (m.s4-m.pop)/ | ||
+ | z.score | ||
+ | pnorm(z.score, | ||
+ | |||
+ | # 만약에 pnorm을 이용하여 정확한 | ||
+ | # probability를 구할 수 없는 상황 | ||
+ | # 이라고 가정하면 | ||
+ | # 우리는 CLT 정리를 생각하여 | ||
+ | # n = 100인 샘플을 무한 반복하여 | ||
+ | # 샘플링 하고, 각 샘플의 평균을 | ||
+ | # 기록하여 모아둔다면 그 분포는 | ||
+ | # N(mu, sigma^2/n) 이라는 것을 | ||
+ | # 안다. N(50, 100/100) | ||
+ | # 따라서 이 집합의 표준편차값은 | ||
+ | # sigma/ | ||
+ | # 대충 바로 위의 | ||
+ | # 모습이고, | ||
+ | # 위로 두개, 밑으로 두개 쓴 구간은 | ||
+ | # 녹색에 해당하는 48-52 이다. | ||
+ | # 이 구간에서 샘플의 평균이 나타날 | ||
+ | # 확률은 95%라고 하였다. 따라서 | ||
+ | # 우리가 가지고 있는 m.s4의 값은 | ||
+ | # 52점 밖에 존재하므로 | ||
+ | # 5%의 확률로서만 얻을 수 있는 샘플 | ||
+ | # 평균이라는 것을 알수 있다. | ||
+ | |||
+ | # 위의 결과를 가지고 두가지 판단을 할 수 | ||
+ | # 있다. 하나는 이 샘플의 평균이 모집단 | ||
+ | # 평균이 50이고 표준편차가 10인 집단에서 | ||
+ | # 나올 수 있는 샘플일 확률이 1/ | ||
+ | # 안되므로 이 샘플은 우리가 염두에 둔 | ||
+ | # 원래 모집단에서 나온 것이 아니라는 | ||
+ | # 생각이다. | ||
+ | |||
+ | # 두 번째는 이 샘플이 그 모집단에서 | ||
+ | # 나오기는 했다. 그러나 1/20 확률에 | ||
+ | # 우연찮게 이번에 걸려서 m.s4의 평균값이 | ||
+ | # 나왔다. | ||
+ | |||
+ | # 이것은 1/ | ||
+ | # 번째 판단을 나의 주 판단으로 한다. 즉, | ||
+ | # 이 샘플은 원래 모집단에서 나올 샘플이 | ||
+ | # 아닌 다른 집단에서 나온 샘플이다. | ||
+ | |||
+ | # 그런데 여기서 추가로 주목할 점은 내가 샘플이 | ||
+ | # 정상적인지 아니면 비정상적인지 판단하는 기준 | ||
+ | # 선을 표준점수 +- 2에 두었다는 점이다. | ||
+ | # m.s4의 점수는 53.2 이므로 m.s4-m.pop(50) | ||
+ | # 인 3.2는 샘플평균들의 집합에서 구하는 | ||
+ | # 표준편차가 3.2만큼 떨어진 것을 알 수 있다. | ||
+ | # 우리는 이것을 표준점수라고 하였으므로 | ||
+ | # 우리가 구한 z-score = 3.2라는 것을 알 수 있고 | ||
+ | # 이 점수가 표준편차값 2개를 위아래로 적용한 선보다 | ||
+ | # 밖에 존재하므로 샘플이 모집단에서 나오지 않은 | ||
+ | # 특별한 샘플이라는 것을 주장할 수 있다. | ||
</ | </ | ||
+ | |||
c/ms/2025/lecture_note_week_04.1742788618.txt.gz · Last modified: 2025/03/24 12:56 by hkimscil