본문 바로가기
2. 확률분포/이산확률분포

[R] 초기하분포(Hypergeometric Distribution) 함수와 그래프

by makhimh 2019. 11. 28.
반응형

[R] 초기하분포(poisson distribution)의 정의, 함수, 예제, 그래프



#1. 초기하분포 정의


크기가 M인 모집단이 있습니다. 이 모집다 안에는 우리가 원하는 원소가 k개 들어 있습니다. 이 모집단에서 크기가 n인 표본을 뽑았습니다. 이 표본 안에 우리가 원하는 원소가 x개 들어있을 확률을 p(x)라고 합시다. p(x)의 분포가 초기하분포입니다. 



위에서 사용한 기호는 일반적으로 사용하는 기호입니다. R에서는 기호사용이 다릅니다. m+n이 모집단의 크기, m이 우리가 원하는 원소의 개수, k가 표본의 크기입니다. 따라서 수식이 아래와 같이 바뀝니다. 




#2. 초기하분포와 관련된 함수


dhyper : 확률밀도함수(probability density function)

phyper : 누적분포함수(cumulative distribution function)

qhyper : 누적분포함수의 역함수(inverse cumulative distribution function)

rhyper : 임의추출


#3. 사용 방법


누적분포함수의 경우 왼쪽꼬리가 디폴트입니다. 


dhyper(x, m, n, k, log = FALSE)

phyper(q, m, n, k, lower.tail = TRUE, log.p = FALSE)

qhyper(p, m, n, k, lower.tail = TRUE, log.p = FALSE)

rhyper(nn, m, n, k)


입력변수를 쉽게 설명하면 아래와 같습니다. 


m : 모집단 안에 있는 우리가 원하는 원소의 수

n : 모집단 안에 있는 우리가 원하지 않는 원소의 수

k : 표본의 크기


dhyper(사건발생횟수, m, n, k, log = FALSE)

phyper(사건발생횟수, m, n, k, lower.tail = TRUE, log.p = FALSE)

qhyper(누적확률, m, n, k, lower.tail = TRUE, log.p = FALSE)

rhyper(표본크기, m, n, k)



#4. 예제


1) dhyper


크기가 100인 모집단 안에 우리가 원하는 원소가 10개 들어 있습니다. 이 모집단에서 크기가 20인 표본을 뽑을 때, 우리가 원하는 원소가 3개 들어있을 확률을 구해봅시다. 


> dhyper(3,10,90,20)

[1] 0.2092081



2) phyper


크기가 100인 모집단 안에 우리가 원하는 원소가 10개 들어 있습니다. 이 모집단에서 크기가 20인 표본을 뽑을 때, 우리가 원하는 원소가 0개 들어있을 확률부터 3개 들어있을 확률까지의 누적확률을 구해봅시다. 


> phyper(3,10,90,20)

[1] 0.8904281


> dhyper(0,10,90,20)+dhyper(1,10,90,20)+dhyper(2,10,90,20)+dhyper(3,10,90,20)

[1] 0.8904281



3) qhyper


크기가 100인 모집단 안에 우리가 원하는 원소가 10개 들어 있습니다. 이 모집단에서 크기가 20인 표본을 뽑을 때, 누적확률이 0.5가 될 때가지의 발생횟수입니다. 


> qhyper(0.5,10,90,20)

[1] 2



4) rhyper


모집단의 크기가 100, 모집단 안에 들어있는 원하는 원소의 수가 10, 표본의 크기가 20인 초기하분포에서 임의로 5개의 값을 추출합니다. 


> rhyper(5,10,90,20)
[1] 4 1 3 1 1



#5. 그래프


1) 확률질량함수



par(mar=c(5.1, 4.1, 4.1, 8.5),xpd=TRUE)

par(mfrow=c(2,2))


m=c(10,50,150,300)

n=c()

k=c(10,30,50,90)


for (j in 1:length(k))

{

  plot(0,type="n",

       xlim=c(0,100),ylim=c(0,1),ann=FALSE)

for (i in 1:length(m))

{

  x=0:100

  y=dhyper(x,m[i],500-m[i],k[j])

  points(x,y,type="l",col=rainbow(length(m))[i])

}


title(main=paste0("PMF of hyper,"," k=",k[j],', m+n=500"'),xlab="x",ylab="p(x)",cex.main=2,cex.lab=1.2)

box("outer",col="gray")

legend("topright",inset=c(-0.30,0), legend=paste("m=",m),col=rainbow(length(m)),lty=1)

}



2) 누적분포함수



par(mar=c(5.1, 4.1, 4.1, 8.5),xpd=TRUE)

par(mfrow=c(2,2))


m=c(10,50,150,200)

n=c()

k=c(10,30,50,90)



for (j in 1:length(k))

{

  plot(0,type="n",

       xlim=c(0,100),ylim=c(0,1),ann=FALSE)

  for (i in 1:length(m))

  {

    x=0:100

    y=phyper(x,m[i],500-m[i],k[j])

    points(x,y,type="l",col=rainbow(length(m))[i])

  }

  

  title(main=paste0("CMF of hyper,"," k=",k[j],', m+n=500"'),xlab="x",ylab="p(x)",cex.main=2,cex.lab=1.2)

  box("outer",col="gray")

  legend("topright",inset=c(-0.30,0), legend=paste("m=",m),col=rainbow(length(m)),lty=1)

}



반응형

댓글