Як обчислити довірчий інтервал для середнього набору даних для нормального журналу?


19

Я чув / бачив у кількох місцях, що ви можете перетворити набір даних у те, що нормально розподіляється, взявши логарифм кожного зразка, обчислити довірчий інтервал для перетворених даних та перетворити довірчий інтервал назад за допомогою зворотної операції (наприклад, підняти 10 до потужності нижньої та верхньої меж відповідно для log10 ).

Однак я трохи підозрілий до цього методу, просто тому, що він не працює для самого середнього: 10mean(log10(X))mean(X)

Який правильний спосіб це зробити? Якщо вона не працює для середини, як це можливо працювати для довірчого інтервалу для середнього?


3
Ви абсолютно праві. Такий підхід, як правило, не працює і часто дає довірчі інтервали, які не включають середню сукупність чи навіть середню вибірку. Ось декілька обговорень щодо цього: amstat.org/publications/jse/v13n1/olsson.html Це не відповідь, оскільки я не розглядав це питання достатньо, щоб фактично прокоментувати посилання детально.
Ерік

3
Ця проблема має класичне рішення: projecteuclid.org/… . Деякі інші рішення, включаючи код, надаються на epa.gov/oswer/riskassessment/pdf/ucl.pdf--, але читайте це важким зерном солі, тому що принаймні один метод описаний там ("метод нерівності Чебишева") це просто неправильно.
whuber

Відповіді:


11

Існує кілька способів обчислення довірчих інтервалів для середнього значення лонормального розподілу. Я збираюся представити два методи: вірогідність завантаження та профілю. Я також презентую дискусію на тему "Джеффріс".

Завантажувач

Для MLE

В цьому випадку ОМП (μ,σ) для зразка (x1,...,xn) є

μ^=1nj=1nlog(xj);σ^2=1nj=1n(log(xj)μ^)2.

Потім ОМП середнє одно δ = ехр ( μ + σ 2 / 2 ) . За передискретизации можна отримати зразок самозавантаження з б і, використовуючи це, ми можемо обчислити кілька самозавантаження довірчих інтервалів. Наступні коди показують, як їх отримати.δ^=exp(μ^+σ^2/2)δ^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")

Для вибірки середнє значення

Тепер розглянемо оцінювач δ~=x¯ замість 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 наступним чином (μ,σ)(δ,σ) , де δ=exp(μ+σ2/2) , а потім розрахувати чисельно профіль ймовірності δ .

Rp(δ)=supσL(δ,σ)supδ,σL(δ,σ).

Ця функція приймає значення в (0,1] ; інтервал рівня 0.147 має приблизну довіру 95% . Ми будемо використовувати цю властивість для побудови довірчого інтервалу для δ . Наступні 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)

Байєсів

У цьому розділі альтернативний алгоритм, заснований на вибірці Метрополіс-Гастінгса та використанні попереднього Джеффріса, для обчислення інтервалу достовірності для δ .

(μ,σ)

π(μ,σ)σ2,

n2R

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))

Зауважте, що вони дуже схожі.


1
(+1) Я думаю, що ви також можете отримати довірчі інтервали на основі теорії максимальної ймовірності з пакетом distrMod R
Stéphane Laurent

@ StéphaneLaurent Дякую за інформацію. Я хотів би побачити результат вашого коду з новим попереднім. Мені не було відомо про команди та пакет, який ви використовуєте.

4
n

Чудова відповідь! Запропоновані тут підходи передбачають помилки гомосептичної моделі - я працював над проектами, де це припущення не було прийнятним. Я також запропонував би використати гамма-регресію як альтернативу, яка б обійшла необхідність у корекції зміщення.
Ізабелла Гемен

4

Ви можете спробувати байєсівський підхід з попереднім Джефрісом. Це повинно дати інтервали довіри з правильним властивістю часто-узгодження: рівень довіри інтервалу достовірності близький до рівня довіри.

 # 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))

Це звучить дуже цікаво, і оскільки я, як правило, люблю байєсівські методи, я відмовився від цього. Це все ще можна вдосконалити, додавши кілька посилань або, бажано, навіть зрозумілих пояснень того, чому це працює.
Ерік

μσ2μσ2μσ2f(μ,σ2)μσ2. Я не знаю, чи є якісь посилання, але в іншому випадку ви можете перевірити за допомогою симуляцій.
Стефан Лоран

Велике спасибі за дискусію. Я видалив усі свої коментарі для ясності і щоб уникнути плутанини. (+1)

1
@Procrastinator Дякую також. Я також видалив свої коментарі та додав у своєму коді пункт про Jeffreys.
Стефан Лоран

Чи не могли б хто-небудь пояснити мені, як працює boots.out = boot (data = data0, statistic = function (d, ind) {mle (d [ind])}, R = 10000). Я бачу, що "ind" - це індекс, але я не розумію, як знайти "ind". Де цей другий аргумент посилається? Я спробував це з альтернативними функціями, і це не спрацювало. Дивлячись на фактичне завантаження функції, я також не бачу посилання на Ind.
andor kesselman

0

Однак я трохи підозрілий до цього методу, просто тому, що він не працює для самого середнього: 10mean (log10 (X)) ≠ mean (X)

Ви маєте рацію - це формула для геометричного середнього, а не середнього арифметичного. Середнє арифметичне є параметром від нормального розподілу і часто не має великого значення для логістичних даних. Геометричне середнє значення є відповідним параметром з лонормального розподілу, якщо ви хочете більш значимо поговорити про центральну тенденцію ваших даних.

І ви б справді розраховували ІС про геометричне середнє, беручи логарифми даних, обчислюючи середнє значення та КІ, як зазвичай, і зворотно трансформуючи. Ви маєте рацію, що дійсно не хочете змішувати свої дистрибутиви, ставлячи CI для геометричного середнього середнього середнього арифметичного .... так!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.