轮廓似然与置信区间之间的关系是什么?


18

为了制作这张图表,我从均值= 0和sd = 1的正态分布中生成了大小不同的随机样本。然后使用t.test()函数使用从0.001到.999(红线)范围内的alpha截止值来计算置信区间,并使用下面的代码在线下计算代码的轮廓似然性(我可以暂时找不到链接:编辑:找到它),这由蓝线表示。绿线表示使用R density()函数的归一化密度,数据由每个图表底部的方框图显示。右边是95%置信区间(红色)和最大似然区间的1/20(蓝色)的毛毛虫图。

用于轮廓可能性的R代码:

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

在此处输入图片说明

我的具体问题是,这两种类型的间隔之间是否存在已知关系,为什么除了n = 3以外,所有情况下的置信区间似乎都比较保守。还需要有关我的计算是否有效(以及一种更好的方法)以及这两种类型的区间之间的一般关系的评论/答案。

R代码:

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)

在您讲义,mn是一个错字mu,而不是mean(dat)。正如我告诉你的意见,你的另一个问题,这应该是从定义,第23页清晰
猫王

@猫王我不这么认为。mn在注释的第18页上定义。
Flask 2013年

我试图阐明轮廓可能性的概念。您能否进一步说明上述代码中的工作?
猫王

3
@猫王我也不明白。基于分布似然性的置信区间应借助百分位数来构建,而该百分数不会出现。χ2
斯特凡·洛朗

1
@StéphaneLaurent我不确定原始代码是否提供置信区间。而不是最大似然间隔的1/20。我相信在我的情节中置信区间的名称是“瓦尔德型”置信区间,并且情节上的红线是此维基百科页面
Flask

Answers:


10

我不会给出完整的答案(我很难理解您正在做什么),但是我将尝试阐明轮廓可能性的建立方式。我可以稍后再回答。

对于大小的正常样品的充分可能性大号μ σ 2= σ 2 - ñ / 2 EXP - ΣX - μ 2 / 2 σ 2 ñ

大号μσ2=σ2-ñ/2经验值-一世X一世-μ2/2σ2

如果是你感兴趣的参数,和σ 2是多余参数,一个解决方案,使推理只在μ是定义模板可能性 大号Pμσ2μ 其中 ^ σ 2μ 是用于MLE μ固定: ^ σ 2μ = argmax σ 2大号μ

大号Pμ=大号μσ2^μ
σ2^μμ
σ2^μ=argmaxσ2大号μσ2

σ2^μ=1个ñķXķ-μ2

大号Pμ=1个ñķXķ-μ2-ñ/2经验值-ñ/2

经验值-ñ/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")

轮廓似然

与可能性的链接我将尝试用下图突出显示与可能性的链接。

首先定义可能性:

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

然后绘制轮廓图:

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的等高线图

轮廓似然的值是沿着红色抛物线的似然所取的值。

μ^

σ2^μ

例如,您还可以使用概貌似然来构建分数测试。


代码中的mu是从低到高的一系列值,每个值的似然度除以样本均值(mn)的似然度。因此,这是归一化的可能性。
Flask 2013年

我认为这是同一回事,但未标准化。您可以将其放在R代码中,还是可以为某些数据绘制函数,以便我们进行比较?
Flask 2013年

这里是。起初我以为mn是错字,现在我认为R代码是完全错误的。明天我会仔细检查-我住的太晚了。
猫王

也许你是对的。我不明白代码如何设法对其进行规范化。哦,我明白了,“规范化”只是除以最大值?
猫王

1
我认为,在某些零假设(例如零)下,很容易看出似然比何时小于某个阈值(例如,最大1/20)。
Flask 2013年

7

在一般框架中,轮廓似然区间为近似置信区间。该结果的证明与证明似然比统计量(渐近)近似分布为χķ2

0.14795

这些是经典结果,因此我将对此提供一些参考:

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

下面的R代码显示,即使对于较小的样本,两种方法所获得的间隔也是相似的(我将重用Elvis示例):

请注意,您必须使用归一化的轮廓似然。

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

如果我们使用更大的样本量,则置信区间会更接近:

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

重要要点:

请注意,对于特定样本,不同种类的置信区间的长度或位置可能有所不同,真正重要的是其覆盖范围。从长远来看,所有样本都应提供相同的覆盖范围,而与特定样本的样本相差多少无关。


@Prokoflev如果使用R t.test()函数计算出的置信区间与通过上述似然函数代码计算出的置信区间之间存在简单关系,可以将其发布。我对n = 3的情况特别感兴趣。不幸的是,我的数学背景很少,所以当几行代码(最简单的是R)可以向我解释时,许多论文将我引向了兔子洞,寻找符号的名称以及它们代表的含义等。
Flask 2013年

@Flask您是否有兴趣获取正态分布或更一般的框架的参数的置信区间?
Prokofiev 2013年

@Prokoflev专门用于正态分布的均值,如我在问题中的示例所示。我尤其想知道,为什么在n = 3的情况下,置信区间更加保守。
Flask 2013年

95

1
我开始相信我应该将似然区间乘以正态分布或卡方分布的一些分位数,以获得相应的置信区间。–
Flask

1

我不会给出过多的数学答案,但我想解决您关于CI与轮廓似然区间之间关系的核心问题。正如其他受访者指出的那样,可以通过使用χ2ñØ[R一种一世žËd

  1. 轮廓对数似然近似为二次方
  2. 存在一个参数转换,使轮廓对数似然近似为平方。

二次项很重要,因为它定义了对数刻度的正态分布。二次方越多,则近似值和所得CI越好。您为似然区间选择的1/20截止值等于渐近极限大于95%CI,这就是为什么蓝色区间通常比红色区间更长的原因。

现在,还有另一个可能引起关注的问题。如果要分析的变量很多,则如果每个维的数据点数量很少,则轮廓可能性可能会非常偏颇和乐观。然后使用边际,条件和修正的轮廓似然来减少这种偏差。

因此,您的问题的答案是“是”。联系是大多数最大似然估计量的渐近正态性,如似然比的卡方分布所示。


如果要分析的变量很多,那么如果每个维的数据点数量少,则轮廓可能性可能会非常有偏差和乐观 ”与什么相比,乐观?
Flask 2013年

@Flask乐观地说,当将其视为置信区间时,它太窄而无法提供名义覆盖率。

我明白了,谢谢,但是在我的特定情况下,实际上是悲观的吗?关于我们是在谈论似然区间还是从似然得出的置信区间,我对此感到困惑。
烧瓶

@Flask我认为您的间隔似乎很悲观,因为您正在将第1/20个似然区间(5%相对似然)与95%CI相比较。如此处其他人所述,您真的想将其与15%相对似然区间进行比较,以使苹果与苹果……至少渐近地。您的可能性区间目前正在考虑更多选择。

我已经详细说明了实际问题,希望将我所学的内容应用到这里。我担心在抽样分布未知(但可能不正常)且复杂的情况下,您的两个要求可能无法满足。然而,我计算出的轮廓可能性似乎是正常且合理的。均值的采样分布是否应该正态分布?
Flask 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.