여러 곳에서 각 샘플의 로그를 취하여 데이터 세트를 정규 분포의 것으로 변환하고 변환 된 데이터의 신뢰 구간을 계산하고 역 연산을 사용하여 신뢰 구간을 다시 변환 할 수 있다고 들었습니다. (예 : 에 대해 하한과 상한의 거듭 제곱으로 10을 올립니다 .)
그러나이 방법은 그 자체로는 의미가 없습니다.
이를 수행하는 올바른 방법은 무엇입니까? 평균 자체에 대해 효과가 없다면 평균에 대한 신뢰 구간에 어떻게 작용할 수 있습니까?
여러 곳에서 각 샘플의 로그를 취하여 데이터 세트를 정규 분포의 것으로 변환하고 변환 된 데이터의 신뢰 구간을 계산하고 역 연산을 사용하여 신뢰 구간을 다시 변환 할 수 있다고 들었습니다. (예 : 에 대해 하한과 상한의 거듭 제곱으로 10을 올립니다 .)
그러나이 방법은 그 자체로는 의미가 없습니다.
이를 수행하는 올바른 방법은 무엇입니까? 평균 자체에 대해 효과가 없다면 평균에 대한 신뢰 구간에 어떻게 작용할 수 있습니까?
답변:
로그 정규 분포의 평균에 대한 신뢰 구간을 계산하는 방법에는 여러 가지가 있습니다. 부트 스트랩과 프로파일 가능성이라는 두 가지 방법을 제시하겠습니다. 또한 Jeffreys에 대한 논의를 발표 할 것입니다.
부트 스트랩
MLE를 위해
이 경우 샘플 대한 의 MLE 는
그런 다음 평균의 MLE는 입니다. 리샘플링을 통해 의 부트 스트랩 샘플 을 얻을 수 있으며 이를 사용하여 여러 부트 스트랩 신뢰 구간을 계산할 수 있습니다 . 다음 코드는이를 얻는 방법을 보여줍니다.R
rm(list=ls())
library(boot)
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Statistic (MLE)
mle = function(dat){
m = mean(log(dat))
s = mean((log(dat)-m)^2)
return(exp(m+s/2))
}
# Bootstrap
boots.out = boot(data=data0, statistic=function(d, ind){mle(d[ind])}, R = 10000)
plot(density(boots.out$t))
# 4 types of Bootstrap confidence intervals
boot.ci(boots.out, conf = 0.95, type = "all")
표본 평균의 경우
이제 MLE 대신 추정기 를 고려하십시오 . 다른 유형의 추정기도 고려 될 수 있습니다.
rm(list=ls())
library(boot)
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Statistic (MLE)
samp.mean = function(dat) return(mean(dat))
# Bootstrap
boots.out = boot(data=data0, statistic=function(d, ind){samp.mean(d[ind])}, R = 10000)
plot(density(boots.out$t))
# 4 types of Bootstrap confidence intervals
boot.ci(boots.out, conf = 0.95, type = "all")
프로필 가능성
우도 및 프로파일 우도 함수의 정의는을 참조하십시오 . 우리가 reparameterise 할 가능성의 불변 특성을 사용하여 다음 여기서 다음 수치를 계산 의 프로필 가능성 .
이 함수의 값을 얻어 레벨 간격 대략 갖는다 자신감 우리가 신뢰 구간을 구성하는 이러한 속성을 사용할 것이다. 다음. 코드 프로그램을 어떻게 간격을 구하는 . R
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Log likelihood
ll = function(mu,sigma) return( sum(log(dlnorm(data0,mu,sigma))))
# Profile likelihood
Rp = function(delta){
temp = function(sigma) return( sum(log(dlnorm(data0,log(delta)-0.5*sigma^2,sigma)) ))
max=exp(optimize(temp,c(0.25,1.5),maximum=TRUE)$objective -ll(mean(log(data0)),sqrt(mean((log(data0)-mean(log(data0)))^2))))
return(max)
}
vec = seq(1.2,2.5,0.001)
rvec = lapply(vec,Rp)
plot(vec,rvec,type="l")
# Profile confidence intervals
tr = function(delta) return(Rp(delta)-0.147)
c(uniroot(tr,c(1.2,1.6))$root,uniroot(tr,c(2,2.3))$root)
베이지안
이 섹션에서는 대한 신뢰 구간을 계산하기위한 Metropolis-Hastings 샘플링 및 이전의 Jeffreys 사용을 기반으로하는 대체 알고리즘 이 제시됩니다.
리콜 종래 제프리스 대 로그 정규 모델 인
그리고이 사전은 매개 변수화에서 변하지 않는다. 이 사전은 부적절하지만 표본 크기 경우 매개 변수의 후방이 적합합니다 . 다음 코드는이 베이지안 모델을 사용하여 95 %의 신뢰 구간을 얻는 방법을 보여줍니다.R
library(mcmc)
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Log posterior
lp = function(par){
if(par[2]>0) return( sum(log(dlnorm(data0,par[1],par[2]))) - 2*log(par[2]))
else return(-Inf)
}
# Metropolis-Hastings
NMH = 260000
out = metrop(lp, scale = 0.175, initial = c(0.1,0.8), nbatch = NMH)
#Acceptance rate
out$acc
deltap = exp( out$batch[,1][seq(10000,NMH,25)] + 0.5*(out$batch[,2][seq(10000,NMH,25)])^2 )
plot(density(deltap))
# 95% credibility interval
c(quantile(deltap,0.025),quantile(deltap,0.975))
그것들은 매우 유사합니다.
Jeffreys의 사전으로 베이지안 접근을 시도 할 수 있습니다. 올바른 잦은 일치 특성을 갖는 신뢰성 구간을 생성해야합니다. 신뢰성 구간의 신뢰 수준은 신뢰성 수준에 가깝습니다.
# required package
library(bayesm)
# simulated data
mu <- 0
sdv <- 1
y <- exp(rnorm(1000, mean=mu, sd=sdv))
# model matrix
X <- model.matrix(log(y)~1)
# prior parameters
Theta0 <- c(0)
A0 <- 0.0001*diag(1)
nu0 <- 0 # Jeffreys prior for the normal model; set nu0 to 1 for the lognormal model
sigam0sq <- 0
# number of simulations
n.sims <- 5000
# run posterior simulations
Data <- list(y=log(y),X=X)
Prior <- list(betabar=Theta0, A=A0, nu=nu0, ssq=sigam0sq)
Mcmc <- list(R=n.sims)
bayesian.reg <- runireg(Data, Prior, Mcmc)
mu.sims <- t(bayesian.reg$betadraw) # transpose of bayesian.reg$betadraw
sigmasq.sims <- bayesian.reg$sigmasqdraw
# posterior simulations of the mean of y: exp(mu+sigma²/2)
lmean.sims <- exp(mu.sims+sigmasq.sims/2)
# credibility interval about lmean:
quantile(lmean.sims, probs = c(0.025, 0.975))
그러나 나는이 방법이 약간 의심 스럽습니다. 단순히 자체 자체로는 작동하지 않기 때문입니다. 10mean (log10 (X)) ≠ mean (X)
당신이 맞습니다. 그것은 산술 평균이 아닌 기하 평균의 공식입니다. 산술 평균은 정규 분포의 모수이며 대수 정규 데이터에는 그다지 의미가 없습니다. 데이터의 중심 경향에 대해보다 의미있게 이야기하려는 경우 기하 평균은 로그 정규 분포의 해당 모수입니다.
그리고 실제로 데이터의 로그를 취하고 평소와 같이 평균과 CI를 계산하고 역변환하여 기하 평균에 대한 CI를 계산합니다. 산술 평균 주위에 기하 평균에 대한 CI를 배치하여 분포를 혼합하고 싶지 않다는 것이 옳습니다.