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

[R] 음이항분포(negative binomial distribution) 의 정의, 함수, 예제, 그래프

by makhimh 2019. 11. 28.
반응형

[R] 음이항분포(negative binomial distribution) 의 정의, 함수, 예제, 그래프



#1. 음이항분포의 정의


시행에서 어떤 사건이 발생할 확률이 p입니다. 매번의 시행은 독립입니다. 사건의 발생을 성공이라고 합시다. r번째 실패가 나왔을 때, 성공 횟수가 x번일 확률 p(x)의 분포가 음이항분포입니다. 




위는 위키피디아 정의구요. r에서의 정의는 다릅니다. 실패확률을 p, 실패횟수를 n이라고 놓습니다. n번째 실패가 나왔을 때, 성공 횟수가 x번일 확률 p(x)의 분포가 음이항분포입니다. 




#2. 음이항포와 관련된 함수


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

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

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

rnbinom : 임의추출


#3. 사용 방법


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


dnbinom(x, size, prob, mu, log = FALSE)

pnbinom(q, size, prob, mu, lower.tail = TRUE, log.p = FALSE)

qnbinom(p, size, prob, mu, lower.tail = TRUE, log.p = FALSE)

rnbinom(n, size, prob, mu)


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


dnbinom(성공횟수, 실패횟수, 실패확률, mu, log = FALSE)

pnbinom(성공횟수, 실패횟수, 실패확률, mu, lower.tail = TRUE, log.p = FALSE)

qnbinom(누적확률, 실패횟수, 실패확률, mu, lower.tail = TRUE, log.p = FALSE)

rnbinom(표본크기, 실패횟수, 실패확률, mu)



#4. 예제


1) dnbinom


슛 성공확률이 0.3, 허용된 실패횟수가 2회입니다. 성공횟수가 3회일 확률을 구해봅시다.


> dnbinom(3,2,0.7)

[1] 0.05292



2) pnbinom


슛 성공확률이 0.3, 허용된 실패횟수가 2회입니다. 성공횟수 3회 까지의 누적확률을 구해봅시다. 


> pnbinom(3,2,0.7)

[1] 0.96922


> dnbinom(0,2,0.7)+dnbinom(1,2,0.7)+dnbinom(2,2,0.7)+dnbinom(3,2,0.7)

[1] 0.96922



3) qnbinom


슛 성공확률이 0.3, 허용된 실패횟수가 2회입니다. 누적확률이 0.5가 될 때가지의 성공횟수입니다. 이산확률 분포이기 때문에 누적확률이 0.5 이상인 x중 최소값을 반환합니다. 


> qnbinom(0.5,2,0.7)

[1] 1



4) rnbinom

슛 성공확률이 0.3, 허용된 실패횟수가 2회인 음이항분포에서 임의로 5개의 데이터를 추출합니다. 


> rnbinom(5,2,0.7)
[1] 3 3 0 0 2



#5. 그래프


1-1) 확률질량함수 (r을 고정)



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


p=c(0.1,0.3,0.5,0.7,0.9)

r=10

x=0:200


plot(0,type="n",

     xlim=c(0,200),ylim=c(0,0.5),ann=FALSE)


for (i in 1:length(p))

{

  y=dnbinom(x,r,p[i])

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

}

title(main="PMF of nbinom, r = 5",xlab="x",ylab="p(x)",cex.main=2,cex.lab=1.2)

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

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


1-2) 확률질량함수 (p를 고정)



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


p=0.5

r=c(1,10,30,50,100)

x=0:200


plot(0,type="n",

     xlim=c(0,200),ylim=c(0,0.5),ann=FALSE)


for (i in 1:length(r))

{

  y=dnbinom(x,r[i],p)

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

}

title(main="PMF of nbinom, p = 0.5",xlab="x",ylab="p(x)",cex.main=2,cex.lab=1.2)

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

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



2-1) 누적분포함수 (r을 고정)



par(mar=c(5.1, 4.1, 4.1, 7))


plot(0,type="n",

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


p=c(0.1,0.3,0.5,0.7,0.9)


for (i in 1:length(p))

{

  x=0:100

  y=pgeom(x,p[i])

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

}


title(main="CMF of nbinom",xlab="x",ylab="p(x)",cex.main=2,cex.lab=1.2)

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

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


2-2) 누적분포함수 (p를 고정)



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


p=0.5

r=c(1,10,30,50,100)

x=0:200


plot(0,type="n",

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


for (i in 1:length(r))

{

  y=pnbinom(x,r[i],p)

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

}

title(main="CMF of nbinom, p = 0.5",xlab="x",ylab="p(x)",cex.main=2,cex.lab=1.2)

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

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



반응형

댓글