置信区间何时“有意义”,而相应的可信区间却没有?


14

通常情况下,具有95%覆盖率的置信区间与包含95%后验密度的可信区间非常相似。当先验是均匀的或在后者情况下接近均匀时,会发生这种情况。因此,置信区间通常可以用来近似可信区间,反之亦然。重要的是,我们可以由此得出结论,对于许多简单的用例而言,将置信区间作为可信区间的误解很多,几乎没有实际意义。

有许多没有发生这种情况的例子,但是它们似乎都被贝叶斯统计的拥护者挑剔,试图证明这种惯常方法是有问题的。在这些示例中,我们看到置信区间包含不可能的值等,这应该表明它们是无稽之谈。

我不想回顾那些例子,也不想对贝叶斯与频频主义者进行哲学讨论。

我只是在寻找相反的例子。在任何情况下,置信度和可信度间隔都大不相同,并且置信度过程提供的间隔明显更好吗?

需要说明的是:这是通常期望可信区间与相应的置信区间重合的情况,即使用先验,统一等先验时的情况。我对有人选择事先任意决定的情况不感兴趣。

编辑: 为响应@JaeHyeok Shin的以下回答,我必须不同意他的示例使用正确的可能性。我使用近似贝叶斯计算来估计下面R中theta的正确后验分布:

### Methods ###
# Packages
require(HDInterval)

# Define the likelihood
like <- function(k = 1.2, theta = 0, n_print = 1e5){
  x    = NULL
  rule = FALSE
  while(!rule){
    x     = c(x, rnorm(1, theta, 1))
    n     = length(x)
    x_bar = mean(x)

    rule = sqrt(n)*abs(x_bar) > k

    if(n %% n_print == 0){ print(c(n, sqrt(n)*abs(x_bar))) }
  }
  return(x)
}

# Plot results
plot_res <- function(chain, i){
    par(mfrow = c(2, 1))
    plot(chain[1:i, 1], type = "l", ylab = "Theta", panel.first = grid())
    hist(chain[1:i, 1], breaks = 20, col = "Grey", main = "", xlab = "Theta")
}


### Generate target data ### 
set.seed(0123)
X = like(theta = 0)
m = mean(X)


### Get posterior estimate of theta via ABC ###
tol   = list(m = 1)
nBurn = 1e3
nStep = 1e4


# Initialize MCMC chain
chain           = as.data.frame(matrix(nrow = nStep, ncol = 2))
colnames(chain) = c("theta", "mean")
chain$theta[1]  = rnorm(1, 0, 10)

# Run ABC
for(i in 2:nStep){
  theta = rnorm(1, chain[i - 1, 1], 10)
  prop  = like(theta = theta)

  m_prop = mean(prop)


  if(abs(m_prop - m) < tol$m){
    chain[i,] = c(theta, m_prop)
  }else{
    chain[i, ] = chain[i - 1, ]
  }
  if(i %% 100 == 0){ 
    print(paste0(i, "/", nStep)) 
    plot_res(chain, i)
  }
}

# Remove burn-in
chain = chain[-(1:nBurn), ]

# Results
plot_res(chain, nrow(chain))
as.numeric(hdi(chain[, 1], credMass = 0.95))

这是95%的可信区间:

> as.numeric(hdi(chain[, 1], credMass = 0.95))
[1] -1.400304  1.527371

在此处输入图片说明

编辑#2:

这是@JaeHyeok Shin的评论之后的更新。我试图使它尽可能简单,但是脚本变得有点复杂。主要变化:

  1. 现在使用平均值的0.001公差(原为1)
  2. 将步数增加到500k以解决较小的公差
  3. 将提案分配的标准差降低到1,以考虑到较小的容忍度(为10)
  4. 添加了简单的rmrm可能性(n = 2k)进行比较
  5. 添加了样本量(n)作为摘要统计量,将公差设置为0.5 * n_target

这是代码:

### Methods ###
# Packages
require(HDInterval)

# Define the likelihood
like <- function(k = 1.3, theta = 0, n_print = 1e5, n_max = Inf){
  x    = NULL
  rule = FALSE
  while(!rule){
    x     = c(x, rnorm(1, theta, 1))
    n     = length(x)
    x_bar = mean(x)
    rule  = sqrt(n)*abs(x_bar) > k
    if(!rule){
     rule = ifelse(n > n_max, TRUE, FALSE)
    }

    if(n %% n_print == 0){ print(c(n, sqrt(n)*abs(x_bar))) }
  }
  return(x)
}


# Define the likelihood 2
like2 <- function(theta = 0, n){
  x = rnorm(n, theta, 1)
  return(x)
}



# Plot results
plot_res <- function(chain, chain2, i, main = ""){
    par(mfrow = c(2, 2))
    plot(chain[1:i, 1],  type = "l", ylab = "Theta", main = "Chain 1", panel.first = grid())
    hist(chain[1:i, 1],  breaks = 20, col = "Grey", main = main, xlab = "Theta")
    plot(chain2[1:i, 1], type = "l", ylab = "Theta", main = "Chain 2", panel.first = grid())
    hist(chain2[1:i, 1], breaks = 20, col = "Grey", main = main, xlab = "Theta")
}


### Generate target data ### 
set.seed(01234)
X    = like(theta = 0, n_print = 1e5, n_max = 1e15)
m    = mean(X)
n    = length(X)
main = c(paste0("target mean = ", round(m, 3)), paste0("target n = ", n))



### Get posterior estimate of theta via ABC ###
tol   = list(m = .001, n = .5*n)
nBurn = 1e3
nStep = 5e5

# Initialize MCMC chain
chain           = chain2 = as.data.frame(matrix(nrow = nStep, ncol = 2))
colnames(chain) = colnames(chain2) = c("theta", "mean")
chain$theta[1]  = chain2$theta[1]  = rnorm(1, 0, 1)

# Run ABC
for(i in 2:nStep){
  # Chain 1
  theta1 = rnorm(1, chain[i - 1, 1], 1)
  prop   = like(theta = theta1, n_max = n*(1 + tol$n))
  m_prop = mean(prop)
  n_prop = length(prop)
  if(abs(m_prop - m) < tol$m &&
     abs(n_prop - n) < tol$n){
    chain[i,] = c(theta1, m_prop)
  }else{
    chain[i, ] = chain[i - 1, ]
  }

  # Chain 2
  theta2  = rnorm(1, chain2[i - 1, 1], 1)
  prop2   = like2(theta = theta2, n = 2000)
  m_prop2 = mean(prop2)
  if(abs(m_prop2 - m) < tol$m){
    chain2[i,] = c(theta2, m_prop2)
  }else{
    chain2[i, ] = chain2[i - 1, ]
  }

  if(i %% 1e3 == 0){ 
    print(paste0(i, "/", nStep)) 
    plot_res(chain, chain2, i, main = main)
  }
}

# Remove burn-in
nBurn  = max(which(is.na(chain$mean) | is.na(chain2$mean)))
chain  = chain[ -(1:nBurn), ]
chain2 = chain2[-(1:nBurn), ]


# Results
plot_res(chain, chain2, nrow(chain), main = main)
hdi1 = as.numeric(hdi(chain[, 1],  credMass = 0.95))
hdi2 = as.numeric(hdi(chain2[, 1], credMass = 0.95))


2*1.96/sqrt(2e3)
diff(hdi1)
diff(hdi2)

结果,其中hdi1是我的“可能性”,hdi2是简单的rnorm(n,theta,1):

> 2*1.96/sqrt(2e3)
[1] 0.08765386
> diff(hdi1)
[1] 1.087125
> diff(hdi2)
[1] 0.07499163

因此,在充分降低公差之后,以牺牲更多的MCMC步骤为代价,我们可以看到rnorm模型的预期CrI宽度。

在此处输入图片说明



6
通常,当您的信息先验是完全错误的时,从非正式的角度来看,例如,Normal(0,1),当实际值为-3.6时,在没有大量数据的情况下,您的可信区间将非常差。从常客的角度来看。
jbowman

@jbowman这是专门关于使用统一优先级或类似N(0,1e6)的情况。
里维德

几十年前,真正的贝叶斯主义者称为统计学家,他使用非信息先验作为伪(或伪造)贝叶斯主义。
user158565 '19

@ user158565这是题外话,但统一的先验只是一个近似值。如果p(H_0)= p(H_1)= p(H_2)= ... = p(H_n),则所有先验都可以退出贝叶斯规则,从而使计算更加容易。这样做很有意义,不过是从分母中删除一些小术语。
里维德

Answers:


6

在顺序实验设计中,可信区间可能会误导您。

(免责声明:我不是在说这是不合理的-在贝叶斯推理中这是完全合理的,并且在贝叶斯的观点上也没有误导。)

举个简单的例子,我们说,我们有一台机器给我们一个随机样本XN(θ,1)未知θ。除了绘制n iid个样本,我们绘制样本直到nX¯n>k对于固定k。即,样本的数量是一个停止时间N通过定义

N=inf{n1:nX¯n>k}.

从重对数定律,我们知道Pθ(N<)=1对于任何θR。这种类型的停止规则通常用于顺序测试/估计中,以减少进行推理的样本数量。

似然原则表明,后θ不受停止规则从而对任何合理平滑先验π(θ)(例如,θN(0,10)),如果我们设置足够大的k,的后θ是大约N(X¯N,1/N)并且因此可信间隔近似给出

CIbayes:=[X¯N1.96N,X¯N+1.96N].
然而,从定义N,我们知道,这个可信区间不包含0如果k是因为大
0<X¯NkNX¯N1.96N
k0。因此,对频率论覆盖CIbayes是零,因为
infθPθ(θCIbayes)=0,
0达到当θ0。与此相反,贝叶斯覆盖总是近似等于0.95,因为
P(θCIbayes|X1,,XN)0.95.

谨记以下信息:如果您对拥有常任担保人感兴趣,则应谨慎使用贝叶斯推断工具,该工具始终对贝叶斯担保有效,但对常客担保并不总是有效。

(我从拉里的精彩演讲中学到了这个示例。该注释包含许多关于频繁使用框架和贝叶斯框架之间细微差别的有趣讨论。http://www.stat.cmu.edu/~larry/=stat705/Lecture14.pdf

编辑在Livid的ABC中,公差值太大,因此,即使对于我们对固定数量的观察值进行采样的标准设置,它也不能给出正确的CR。我不熟悉ABC,但如果仅将tol值更改为0.05,则我们的CR可能会如下所示

> X = like(theta = 0)
> m = mean(X)
> print(m)
[1] 0.02779672

enter image description here

> as.numeric(hdi(chain[, 1], credMass = 0.95)) [1] -0.01711265 0.14253673

当然,链条不是很稳定,但是即使我们增加了链长,我们也可以得到相似的CR-偏向正部分。

NX¯Nk0<θkkkθ<0


“如果我们设置足够大的k,则θ的后验近似为N(X_N,1 / N)”。在我看来,显然Pr(X | theta)!= Normal(theta,1)。即,这是生成您的序列的过程的错误可能性。另外,还有一个错字。在原始示例中,当sqrt(n)* abs(mean(x))> k时停止采样。
Livid

i=1Nϕ(Xiθ)

请在问题中查看我的编辑。我仍然认为您可信的间隔没有意义,因为它使用了不正确的可能性。当在我的代码中使用正确的可能性时,我们得到一个合理的间隔。
里维德

k0<X¯Nk/NX¯N1.96/Nkk>10

2×1.96/2000=0.0876

4

由于可信区间是由后验分布形成的,因此基于规定的先验分布,您可以通过使用高度集中于高度不合理的参数值的先验分布轻松构建非常差的可信区间。通过使用完全集中于不可能的参数值的先验分布,您可以创建一个没有意义的可信区间。


1
或者更好的是,由先验构建的可信度与您的先验不同(即使它是其他人的先验),但对您来说很荒谬。这在科学界并不罕见。我曾让研究人员说他们不想包括专家的意见,因为在他们的观察中,专家们一直都过于自信。
悬崖AB

1
具体来说,这是关于均匀或“平坦”的先验。
Livid

1
@Livid:您绝对应该在您的问题中提到正在谈论固定优先权。这完全改变了一切。
悬崖AB

1
@CliffAB在前两个句子中,但是我要澄清,谢谢。
Livid

1

如果我们使用的是先验先验,则这只是一个游戏,我们试图在没有意义的重新参数化中提出先验先验。

例如,假设我们要对概率进行推断。如果我们在概率的对数赔率上放平的先验,则实际概率的95%可信区间为两点{01个} 在我们看到数据之前!如果我们得到一个正数数据点并构造一个95%的可信区间,那么它现在就是单点{1个}

这就是为什么许多贝叶斯人反对先验先验的原因。


我非常清楚地解释了我的动机。我想要类似示例的示例,其中置信区间包含不可能的值,但可信区间表现良好。如果您的示例取决于做一些荒谬的事情,例如选择错误的可能性,那么为什么任何人都会感兴趣呢?
Livid

1
@Livid:似然函数是完全合理的。对数奇数的平坦先验不是。这就是贝叶斯用来说您不应该使用固定先验的论点的全部。实际上,它们可以提供非常有用的信息,并且通常不符合用户的预期!
悬崖AB

1
这里的安德鲁·盖尔曼Andrew Gelman)讨论了固定优先权的一些问题。
悬崖AB

“对数赔率上的持平单位不是。” 我的意思是,在对数转换后的赔率上放平的先验似乎对您来说毫无意义,就像使用错误的可能性一样。抱歉,但是我对这个例子不熟悉。这个模型到底应该做什么?
Livid

@Livid:这似乎很不寻常,但事实并非如此!例如,逻辑回归通常考虑对数标度上的所有参数。如果您有您的所有组虚拟变量和使用你的回归参数平先验,你会碰上正是这个问题。
悬崖AB
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.