본문 바로가기
@ 통계 교양/통계 Tips

표본평균의 분포는 정말 정규분포가 될 수 있을까 (2) p 값 비교

by bigpicture 2022. 9. 16.
반응형

표본평균의 분포를 정규분포로 가정하고 구한 p값과 실제 분포에서 구한 p값은 잘 일치할지 비교하는 표를 만들었습니다. 

 

 

모집단이 1:1000인 경우 표본크기가 3이어도 잘 일치합니다. 놀랍네요. 표본 크기보다 오히려 모집단 크기에 영향을 많이 받는 모습입니다. 모집단이 적당히 크기만 하면 표본 크기는 크게 신경을 쓰지 않아도 될만큼 잘 일치합니다. 

 

library(dplyr)

#1.모집단 설정
#ppltn=c(1,2,3,4,5,6,7,8,9,10) 
#ppltn=1:1000
#ppltn=rnorm(10) 
ppltn=rnorm(1000) 

m=mean(ppltn) 
s=sd(ppltn) 


#2. 표본 크기 설정
size=c(3,30,50,100,1000,3000)



#3. 비교 p값 설정(우측꼬리기준으로)
p=0.05


#4. 실험

#set.seed(9999)
df_result=data.frame(n=NA,hist_L_p5=NA,dist_L_p5=NA,diff1=NA,hist_R_p5=NA,dist_R_p5=NA,diff2=NA)

for (k in 1:length(size)){
#for (k in 1){

  se=s/sqrt(size[k])
  dt=list() 
  df=data.frame(n=NA,hist_L_p5=NA,dist_L_p5=NA,diff1=NA,hist_R_p5=NA,dist_R_p5=NA,diff2=NA)
  
  
  
  for (j in 1:10){ #10회 반복
    
    size_for_hist=10000
    for (i in 1:size_for_hist){ 
      dt[[i]]=mean(sample(ppltn,size[k],replace=TRUE))
    }
    
    dt=unlist(dt)
    dt_sort=sort(dt)
    norm_left=qnorm(p,m,se)
    norm_right=qnorm(1-p,m,se)
    
    
    hist_L_p5=order(abs(dt_sort-norm_left))[1]/size_for_hist %>% round(3)
    dist_L_p5=p
    diff1=(hist_L_p5-dist_L_p5)/dist_L_p5*100 
    diff1=diff1 %>% round(2)
    
    hist_R_p5=1-order(abs(dt_sort-norm_right))[1]/size_for_hist %>% round(3) 
    dist_R_p5=p  %>% round(2)
    diff2=(hist_R_p5-dist_R_p5)/dist_R_p5*100  %>% round(2)
    diff2=diff2 %>% round(2)
    
    
    df[j,]=list(size[k],hist_L_p5,dist_L_p5,diff1,hist_R_p5,dist_R_p5,diff2)
    
  }
  
  
  mean=apply(df,2,mean) %>% round(3)
  sd=apply(df,2,sd) %>% round(2)
  
  
  
  df_result[k,]=list(mean[1],
                     paste0(mean[2]," ± ",sd[2]),paste0(mean[3]," ± ",sd[3]),paste0(round(mean[4],1)," ± ",sd[4]),
                     paste0(mean[5]," ± ",sd[5]),paste0(mean[6]," ± ",sd[6]),paste0(round(mean[7],1)," ± ",sd[7]))
  
}

View(df_result)


write.csv(df_result,file="ex1.csv")

########################
반응형

댓글