Profil olasılığı ile güven aralıkları arasındaki ilişki nedir?


18

Bu grafiği yapmak için, ortalama = 0 ve sd = 1 olan normal bir dağılımdan farklı büyüklükte rastgele örnekler ürettim. Güven aralıkları daha sonra t.test () işleviyle .001 ile .999 (kırmızı çizgi) arasında değişen alfa kesimleri kullanılarak hesaplandı, profil olasılığı, aşağıdaki notlarda bulduğum kod kullanılarak hesaplandı (I can ' t Şu anda bağlantıyı bul Düzenle: Bulundu ), bu mavi çizgilerle gösterilir. Yeşil çizgiler R yoğunluğu () işlevini kullanarak normalleştirilmiş yoğunluğu gösterir ve veriler her grafiğin altındaki kutu grafikler ile gösterilir. Sağda% 95 güven aralıklarının (kırmızı) ve maksimum olabilirlik aralıklarının 1 / 20'sinin (mavi) tırtıl grafiği.

Profil olasılığı için kullanılan R Kodu:

  #mn=mean(dat)
  muVals <- seq(low,high, length = 1000)
  likVals <- sapply(muVals,
                    function(mu){
                      (sum((dat - mu)^2) /
                         sum((dat - mn)^2)) ^ (-n/2)
                    }
  )

resim açıklamasını buraya girin

Benim özel sorum, bu iki aralık türü arasında bilinen bir ilişki olup olmadığı ve güven aralığının n = 3 dışındaki tüm durumlar için neden daha muhafazakar olduğu görünüyor. Hesaplamalarımın geçerli olup olmadığı (ve bunu yapmanın daha iyi bir yolu) ve bu iki aralık arasındaki genel ilişki hakkında yorum / cevaplar da istenmektedir.

R kodu:

samp.size=c(3,4,5,10,20,1000)
cnt2<-1
ints=matrix(nrow=length(samp.size),ncol=4)
layout(matrix(c(1,2,7,3,4,7,5,6,7),nrow=3,ncol=3, byrow=T))
par(mar=c(5.1,4.1,4.1,4.1))
for(j in samp.size){


  #set.seed(200)
  dat<-rnorm(j,0,1)
  vals<-seq(.001,.999, by=.001)
  cis<-matrix(nrow=length(vals),ncol=3)
  cnt<-1
  for(ci in vals){
    x<-t.test(dat,conf.level=ci)$conf.int[1:2]
    cis[cnt,]<-cbind(ci,x[1],x[2])
    cnt<-cnt+1
  }


  mn=mean(dat)
  n=length(dat)
  high<-max(c(dat,cis[970,3]), na.rm=T)
  low<-min(c(dat,cis[970,2]), na.rm=T)
  #high<-max(abs(c(dat,cis[970,2],cis[970,3])), na.rm=T)
  #low<--high


  muVals <- seq(low,high, length = 1000)
  likVals <- sapply(muVals,
                    function(mu){
                      (sum((dat - mu)^2) /
                         sum((dat - mn)^2)) ^ (-n/2)
                    }
  )


  plot(muVals, likVals, type = "l", lwd=3, col="Blue", xlim=c(low,high),
       ylim=c(-.1,1), ylab="Likelihood/Alpha", xlab="Values",
       main=c(paste("n=",n), 
              "True Mean=0 True sd=1", 
              paste("Sample Mean=", round(mn,2), "Sample sd=", round(sd(dat),2)))
  )
  axis(side=4,at=seq(0,1,length=6),
       labels=round(seq(0,max(density(dat)$y),length=6),2))
  mtext(4, text="Density", line=2.2,cex=.8)

  lines(density(dat)$x,density(dat)$y/max(density(dat)$y), lwd=2, col="Green")
  lines(range(muVals[likVals>1/20]), c(1/20,1/20), col="Blue", lwd=4)
  lines(cis[,2],1-cis[,1], lwd=3, col="Red")
  lines(cis[,3],1-cis[,1], lwd=3, col="Red")
  lines(cis[which(round(cis[,1],3)==.95),2:3],rep(.05,2), 
        lty=3, lwd=4, col="Red")
  abline(v=mn, lty=2, lwd=2)
  #abline(h=.05, lty=3, lwd=4, col="Red")
  abline(h=0, lty=1, lwd=3)
  abline(v=0, lty=3, lwd=1)

  boxplot(dat,at=-.1,add=T, horizontal=T, boxwex=.1, col="Green")
  stripchart(dat,at=-.1,add=T, pch=16, cex=1.1)

  legend("topleft", legend=c("Likelihood"," Confidence Interval", "Sample Density"),
         col=c("Blue","Red", "Green"), lwd=3,bty="n")

  ints[cnt2,]<-cbind(range(muVals[likVals>1/20])[1],range(muVals[likVals>1/20])[2],
                     cis[which(round(cis[,1],3)==.95),2],cis[which(round(cis[,1],3)==.95),3])
  cnt2<-cnt2+1
}
par(mar=c(5.1,4.1,4.1,2.1))


plot(0,0, type="n", ylim=c(1,nrow(ints)+.5), xlim=c(min(ints),max(ints)), 
     yaxt="n", ylab="Sample Size", xlab="Values")
for(i in 1:nrow(ints)){
  segments(ints[i,1],i+.2,ints[i,2],i+.2, lwd=3, col="Blue")
  segments(ints[i,3],i+.3,ints[i,4],i+.3, lwd=3, col="Red")
}
axis(side=2, at=seq(1.25,nrow(ints)+.25,by=1), samp.size)

Ders notlarında, mnbir yazım hatasıdır mu, değil mean(dat). Diğer sorunuzun yorumlarında size söylediğim gibi , bu, tanım sayfa 23'den açık olmalıdır.
Elvis

@Elvis Ben öyle düşünmüyorum. mn notların 18. sayfasında tanımlanmıştır.
Flask

Profil olasılığı kavramını açıklığa kavuşturmaya çalıştım. Yukarıdaki kodda ne yaptığınız hakkında biraz daha yorum yapabilir misiniz?
Elvis

3
@Elvis Ben de anlamıyorum. Hiçbir yerde görünmeyen yüzdelik dilim yardımı ile profil olasılığına dayalı bir güven aralığı oluşturulmalıdır . χ2
Stéphane Laurent

1
StéphaneLaurent @ Emin Özgün kod değilim olduğu güven aralıkları sağlar. Aksine 1/20 maksimum olabilirlik aralığı. Grafiğimdeki güven aralıkları için adın "wald-type" güven aralıkları ve arazilerdeki kırmızı çizgilerin bu wikipedia sayfasında
Flask

Yanıtlar:


10

Tam bir cevap vermeyeceğim (tam olarak ne yaptığınızı anlamaya çalışırken zorlanıyorum), ancak profil olasılığının nasıl oluşturulduğunu açıklamaya çalışacağım. Cevabımı daha sonra tamamlayabilirim.

Boyutta Normal bir numune tam olabilirlik olan L ( μ , σ 2 ) = ( σ 2 ) - N / 2 exp ( - Σ ı ( x i - μ ) 2 / 2 σ 2 ) .n

L(μ,σ2)=(σ2)n/2exp(i(xiμ)2/2σ2).

Eğer ilgi parametredir ve σ 2 bir sıkıntı parametre, yalnızca yapmak çıkarsama bir çözüm u profil olabilirlik tanımlamaktır L P ( μ ) = L ( μ , ^ σ 2 ( μ ) ) ^ σ 2 ( μ ) μ sabit için MLE'dir : ^ σ 2 ( μ ) = argmax σ 2 L ( μ ,μσ2μ

LP(μ)=L(μ,σ2^(μ))
σ2^(μ)μ
σ2^(μ)=argmaxσ2L(μ,σ2).

Biri olup olmadığını kontrol eder

σ2^(μ)=1nk(xkμ)2.

LP(μ)=(1nk(xkμ)2)n/2exp(n/2).

exp(n/2)

> data(sleep)
> difference <- sleep$extra[11:20]-sleep$extra[1:10]
> Lp <- function(mu, x) {n <- length(x); mean( (x-mu)**2 )**(-n/2) }
> mu <- seq(0,3, length=501)
> plot(mu, sapply(mu, Lp, x = difference), type="l")

profil olasılığı

Olasılıkla bağlantı Aşağıdaki grafikle olasılıkla bağlantıyı vurgulamaya çalışacağım.

İlk olarak olasılığı tanımlayın:

L <- function(mu,s2,x) {n <- length(x); s2**(-n/2)*exp( -sum((x-mu)**2)/2/s2 )}

Sonra bir kontur çizimi yapın:

sigma <- seq(0.5,4, length=501)
mu <- seq(0,3, length=501)

z <- matrix( nrow=length(mu), ncol=length(sigma))
for(i in 1:length(mu))
  for(j in 1:length(sigma))
    z[i,j] <- L(mu[i], sigma[j], difference)

# shorter version
# z <- outer(mu, sigma, Vectorize(function(a,b) L(a,b,difference)))

contour(mu, sigma, z, levels=c(1e-10,1e-6,2e-5,1e-4,2e-4,4e-4,6e-4,8e-4,1e-3,1.2e-3,1.4e-3))

σ2^(μ)

hats2mu <- sapply(mu, function(mu0) mean( (difference-mu0)**2 ))
lines(mu, hats2mu, col="red", lwd=2)

L kontur çizimi

Profil olasılığının değerleri, kırmızı parabol boyunca olabilirlik tarafından alınan değerlerdir.

μ^

σ2^(μ)

Örneğin, profil testlerini oluşturmak için profil olasılığını da kullanabilirsiniz.


Koddaki mu, düşükten yükseğe doğru bir değerler dizisidir, bu değerlerin her birindeki olasılık, numune ortalaması (mn) olasılığına bölünür. Yani normalleştirilmiş bir olasılık.
Flask

Bence bu aynı şey ama normalize değil. R koduna koyabilir veya başka veriler için işlevi başka bir şekilde çizebilir misiniz, böylece karşılaştırabiliriz?
Flask

İşte burada. İlk başta düşündümmn bir yazım hatası , şimdi R kodunun yanlış olduğunu düşünüyorum. Yarın tekrar kontrol edeceğim - geç kaldım.
Elvis

Haklı olabilirsin. Kodun normalleştirmeyi nasıl başardığını anlamıyorum. Oh, anladım, "normalleşme" sadece maksimuma bölünüyor mu?
Elvis

1
Bazı sıfır hipotezinde (örn. Sıfır) olabilirlik oranının bir eşik değerinden (ör. 1 / 20'inci maksimum) ne zaman daha düşük olduğunu görmenin kolay olduğunu düşünüyorum.
Flask

7

Genel bir çerçevede, profil olabilirlik aralıkları yaklaşık güven aralıklarıdır. Bu sonucun kanıtı, olasılık oranı istatistiğinin (asimptotik olarak) yaklaşık olarak birχk2

0.14795%

Bunlar klasik sonuçlardır ve bu nedenle sadece bu konuda bazı referanslar vereceğim:

http://www.jstor.org/stable/2347496

http://www.stata-journal.com/sjpdf.html?articlenum=st0132

http://www.unc.edu/courses/2010fall/ecol/563/001/docs/lectures/lecture11.htm

http://en.wikipedia.org/wiki/Likelihood-ratio_test

http://en.wikipedia.org/wiki/Likelihood_function#Profile_likelihood

Aşağıdaki R kodu, küçük örnekler için bile, her iki yaklaşımla da elde edilen aralıkların benzer olduğunu gösterir (Elvis örneğini yeniden kullanıyorum):

Normalleştirilmiş profil olasılığını kullanmanız gerektiğini unutmayın.

data(sleep)
x <- sleep$extra[11:20]-sleep$extra[1:10]
n <- length(x)
Rp <- function(mu) {mean( (x-mean(x))^2 )^(n/2)/mean( (x-mu)^2 )^(n/2) }
Rp(mean(x))

mu <- seq(0,3, length=501)
plot(mu, sapply(mu, Rp), type="l")


Rpt<- function(mu) Rp(mu)-0.147 # Just an instrumental function

# Likelihood-confidence interval of 95% level

c(uniroot(Rpt,c(0.5,1.5))$root,uniroot(Rpt,c(1.51,3))$root)

# t confidence interval

t.test(x,conf.level=0.95)$conf.int

Daha büyük bir örnek boyutu kullanırsak, güven aralıkları daha da yakındır:

set.seed(123)
x <- rnorm(100)
n <- length(x)
Rp <- function(mu) {mean( (x-mean(x))^2 )^(n/2)/mean( (x-mu)^2 )^(n/2) }
Rp(mean(x))

mu <- seq(-0.5,0.5, length=501)
plot(mu, sapply(mu, Rp), type="l")


Rpt<- function(mu) Rp(mu)-0.147 # Just an instrumental function

# Likelihood-confidence interval of 95% level

c(uniroot(Rpt,c(-0.4,0))$root,uniroot(Rpt,c(0,0.4))$root)

# t confidence interval

t.test(x,conf.level=0.95)$conf.int

ÖNEMLİ BİR NOKTA:

Belirli numuneler için farklı türlerdeki güven aralıklarının uzunlukları veya konumları açısından farklılık gösterebileceğini, bunların asıl önemli olan kapsamı olduğunu unutmayın. Uzun vadede, hepsi belirli numuneler için ne kadar farklılık gösterdiklerinden bağımsız olarak aynı kapsamı sağlamalıdır.


@Prokoflev, R t.test () işlevi ile hesaplanan güven aralıkları ile yukarıdaki olasılık işlevi kodu ile hesaplananlar arasında basit bir ilişki varsa, bunu gönderebilirsiniz. Özellikle n = 3 vakası ile ilgileniyorum. Ne yazık ki matematikte çok az arka planım var, bu yüzden birçok kağıt bana tavşan deliğinden aşağıya doğru sembollerin isimlerini ve neyi temsil ettiklerini vb.
Flask

@Flask Normal dağılım veya daha genel bir çerçeve parametreleri için güven aralıkları elde etmek ister misiniz?
Prokofiev

@Prokoflev, sorudaki örneğimde gösterildiği gibi normal dağılımın ortalaması için özel olarak. Özellikle n = 3 durumu dışında güven aralıklarının neden daha tutucu olduğunu merak ediyorum.
Flask

95%

1
Karşılık gelen güven aralığını elde etmek için olasılık aralıklarını normal veya chisquare dağılımının bir miktarıyla çarpmam gerektiğine inanmaya başlıyorum.
Flask

1

χ2normalized

  1. Profil günlüğü olasılığı yaklaşık ikinci dereceden
  2. Profil günlüğü olasılığını yaklaşık karesel yapan bir parametre dönüşümü vardır.

İkinci dereceden önemlidir, çünkü log ölçeğinde normal bir dağılım tanımlar. Ne kadar karesel olursa yaklaşım ve sonuçta ortaya çıkan CI'ler o kadar iyi olur. Olabilirlik aralıkları için 1/20. Kesme seçiminiz, asimptotik sınırdaki% 95 CI'den fazladır, bu nedenle mavi aralıklar genellikle kırmızı olanlardan daha uzundur.

Şimdi, dikkat edilmesi gereken profil olasılığı ile ilgili başka bir sorun var. Profil oluşturduğunuz çok sayıda değişkeniniz varsa, boyut başına veri noktası sayısı düşükse, profil olasılığı çok taraflı ve iyimser olabilir. Bu yanlılığı azaltmak için marjinal, koşullu ve değiştirilmiş profil olasılıkları kullanılır.

Yani, sorunuzun cevabı EVET ... bağlantı, olasılık oranının ki kare dağılımında gösterildiği gibi, en fazla olabilirlik tahmin edicilerinin asimtotik normallikidir.


" Profil oluşturduğunuz çok fazla değişkeniniz varsa, boyut başına veri noktası sayısı düşükse, profil olasılığı çok taraflı ve iyimser olabilir " Neye kıyasla iyimser ?
Flask

@Flask İyimser olarak, güven aralığı olarak değerlendirilirken nominal kapsama olasılığını sağlamak için çok dar olacağım.

Anladım, teşekkürler, ama özel durumumda aslında kötümser mi? Bu noktada, olasılıklardan veya olasılıklardan türetilen güven aralıkları hakkında konuşup konuşmadığımız konusunda kafam karıştı.
Flask

@Flask Aralıkların kötümser olduğunu düşünüyorum çünkü 1/20. Olasılık aralığını (% 5 göreceli olabilirlik)% 95 CI ile karşılaştırıyorsunuz. Burada başkaları tarafından belirtildiği gibi, elmaları elmaya elması için en azından asimptotik olarak% 15 göreceli olasılık aralığıyla karşılaştırmak istersiniz. Olabilirlik olasılığınız daha fazla seçeneği inandırıcı olarak görüyor.

Ben öğreniyorum uygulamak isteyen gerçek sorunu ayrıntılı var Buraya . Örnekleme dağılımının bilinmediği (ancak muhtemelen normal olmayan) ve iki gereksiniminizin karşılamayabileceği karmaşık durumlarda endişeleniyorum. Yine de hesapladığım profil olasılıkları normal ve makul görünüyor. Ortalamanın örnekleme dağılımının normal olarak dağıtılması gerekir mi?
Flask
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.