いくつかの場所で、各サンプルの対数を取り、変換されたデータの信頼区間を計算し、逆演算を使用して信頼区間を元に戻すことにより、データセットを正規分布のものに変換できることを聞きました(たとえば、場合は、それぞれ下限と上限の10の累乗になり)。
ただし、単に平均自体に対して機能しないという理由だけで、このメソッドには少し疑いがあります
これを行う正しい方法は何ですか?平均自体で機能しない場合、平均の信頼区間でどのように機能しますか?
いくつかの場所で、各サンプルの対数を取り、変換されたデータの信頼区間を計算し、逆演算を使用して信頼区間を元に戻すことにより、データセットを正規分布のものに変換できることを聞きました(たとえば、場合は、それぞれ下限と上限の10の累乗になり)。
ただし、単に平均自体に対して機能しないという理由だけで、このメソッドには少し疑いがあります
これを行う正しい方法は何ですか?平均自体で機能しない場合、平均の信頼区間でどのように機能しますか?
回答:
対数正規分布の平均の信頼区間を計算する方法はいくつかあります。ブートストラップとプロファイル尤度という2つの方法を紹介します。また、ジェフリーズに関する以前の議論も紹介します。
ブートストラップ
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))
それらは非常に似ていることに注意してください。
あなたはジェフリーズの事前のベイジアンアプローチを試すかもしれません。正しい頻度で一致するプロパティを持つ信頼区間を生成する必要があります。信頼区間の信頼レベルは、その信頼レベルに近いです。
# 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を配置することで、分布を混在させたくないのは確かです。