====== Hypothesis testing ====== rm(list=ls()) rnorm2 <- function(n,mean,sd){ mean+sd*scale(rnorm(n)) } set.seed(101) n.p <- 10000 m.p <- 100 sd.p <- 10 p1 <- rnorm2(n.p, m.p, sd.p) m.p1 <- mean(p1) sd.p1 <- sd(p1) p2 <- rnorm2(n.p, m.p+3, sd.p) m.p2 <- mean(p2) sd.p2 <- sd(p2) n.s <- 36 se.z1 <- c(sqrt(var(p1)/n.s)) se.z2 <- c(sqrt(var(p2)/n.s)) x.p1 <- seq(mean(p1)-5*se.z1, mean(p2)+5*se.z1, length.out = 500) x.p2 <- seq(mean(p2)-5*se.z1, mean(p2)+5*se.z1, length.out = 500) # Calculate the probability # density for a normal distribution y.p1 <- dnorm(x.p1, mean(p1), se.z1) y.p2 <- dnorm(x.p2, mean(p2), se.z2) # Plot the theoretical PDF plot(x.p1, y.p1, type = "l", lwd=3, main = "Sample means from p1 and p2 (imaginary)", xlab = "Value", ylab = "Density") lines(x.p2, y.p2, lty=2, lwd=3) m.p1 <- mean(p1) se1 <- c(m.p1-se.z1, m.p1+se.z1) se2 <- c(m.p1-2*se.z1, m.p1+2*se.z1) se3 <- c(m.p1-3*se.z1, m.p1+3*se.z1) abline(v=c(m.p1,se1,se2,se3), col=c('black', 'orange', 'orange', 'green', 'green', 'blue', 'blue'), lwd=1) treated.s <- sample(p2, n.s) m.treated.s <- mean(treated.s) abline(v=m.treated.s, col='red', lwd=2) se.z1 diff <- m.treated.s-mean(p1) diff/se.z1 # usual way - using sample's variance # instead of p1's variance to get # standard error value se.s <- sqrt(var(treated.s)/n.s) se.s diff/se.s pt(diff/se.s, df=n.s-1, lower.tail = F) * 2 t.test(treated.s, mu=m.p1, var.equal = T) m.treated.s = 103.1605 m.p1 = 100 s.size = 36 위의 m.treated.s는 (103.1605는) p2에서 추출한 것. p2의 평균을 미리 아는 것은 현실적으로는 불가능하지만 treatment의 효과가 105점 만큼 있다는 것을 가정하고 이 모집단에서 샘플을 추출하여 m.treated.s 값을 얻은 것. 그러나, 이 점수에서의 prob level은 0.05보다 크므로 영가설을 부정하는데 실패하게 되어 tratment 효과를 검증하지 못하게 된다. 이런 오류를 type II error라고 한다. {{:r:pasted:20250913-215245.png}}