정규 분포 : 정규-감마 분포 (베이즈 추정)

16880 단어 R

기사의 목적



정규 분포와 평균과 분산이 알려지지 않았을 때의 공액 사전 분포인 정규 분포를 사용하고, R을 사용하여 베이즈 추정을 실시합니다.
20대 남성 신장의 평균과 분산을 사후 분포로 추정한다.
참고 : 베이즈 추론에 의한 기계 학습 입문

목차



1. 모델 설명
2. 추정할 분포
3. 사전 분포
4. 사후 분포
5. 예측 분포

1. 모델 설명





2. 추정할 분포



20대 남성의 신장은 평균이 170이고 표준차가 10인 정규 분포를 따릅니다(적당). 그러나 우리는 그것을 모른다.
이 진정한 분포의 평균 170과 분산의 역수 1/100 = 0.01을 사후 분포로 추정합니다.
curve(dnorm(x, 170, 10), 100, 250, xlab="20代男性の身長", ylab="確率密度")



3. 사전 분포



평균의 사전 분포로서 정규 분포, 분산의 역수의 사전 분포로서 감마 분포를 가정합니다.
둘 다 데이터에 맞게 쉽게 매개 변수를 설정합니다.
par(mfrow=c(1,2))
lambda0 <- 1
beta0 <- 1/100^2
m0 <- 100
lambda.mu0 <- 1/50^2
curve(dnorm(x, m0, 1/sqrt(lambda.mu0)), 0, 250,
      xlab="20代男性の平均身長", ylab="確率密度", ylim=c(0,0.3))
a0 <- 1
b0 <- 1
curve(dgamma(x, a0, b0), 0, 0.1, ylim=c(0,230), 
      xlab="20代男性の身長の分散の逆数", ylab="確率密度")



4. 사후 분포



진정한 분포로 100개의 샘플을 취하여 사후 분포를 추정합니다.
사후 분포는 녹색 곡선입니다. 평균은 170, 분산은 1/100=0.01을 잘 추정할 수 있습니다.
#データ
N <- 50
X <- rnorm(N, 170, 10)
#事後分布
beta <- N + beta0
m <- (sum(X)+beta0*m0)/beta
curve(dnorm(x, m0, 1/sqrt(lambda.mu0)), 0, 250,
      xlab="20代男性の平均身長", ylab="確率密度", ylim=c(0,0.3))
curve(dnorm(x, m, 1/sqrt(lambda0*beta)), 100, 250, add=T, col="green")
a <- N/2 + a0
b <- (sum(X^2)+beta0*m0^2-beta*m^2)/2+b0
curve(dgamma(x, a0, b0), 0, 0.1, ylim=c(0,230), 
      xlab="20代男性の身長の分散の逆数", ylab="確率密度")
curve(dgamma(x, a, b), 0, 0.1, add=T, col="green")



5. 예측 분포



예측 분포도 잘 추정된다는 것을 알 수 있습니다.
u.p <- m
lambda.p <- beta*a/((1+beta)*b)
n <- 2*a
par(mfrow=(c(1,1)))
curve(dnorm(x, 170, 10), 100, 250,ylim=c(0,0.05),xlab="20代男性の身長", ylab="確率密度")
curve(dt(x, df=n)*((1+x^2/n)^((n+1)/2))*sqrt(lambda.p)*((1+lambda.p*(1/n)*(x-u.p)^2)^(-(n+1)/2)), 100, 250,
      add=T, col="blue")

좋은 웹페이지 즐겨찾기