使用非统计学家的信念生成贝叶斯先验估计的最佳方法是什么?

机器算法验证 贝叶斯 事先的
2022-01-29 07:23:21

我与许多定性研究人员和设计师一起工作。他们中的许多人与用户互动,并就数据的外观形成了强烈的、通常是准确的直觉。我经常尝试量化他们的直觉,以便我们可以将他们的信念与新数据整合起来。

提出正确的问题很困难,而且我提出问题的方式会改变先验的样子。我有几种不同的方法(主要用于比例):

  • 押注不同假设的概率,然后将其转化为贝叶斯因子
  • X中有多少人会做Y?
  • 我反过来问人们遇到虚假的新数据后他们的后验信念是什么(您可以据此估计他们的先验)

显然,这不是一项学术活动,而是一项旨在创造对新数据的参与的活动。

你会问那些不太了解统计数据的人什么问题才能准确地将他们的信念量化为贝叶斯先验,以及你如何从他们的答案转到先验(R 代码会很好)?

1个回答

这是一个很好的问题。我将使用一个简单的例子来说明我的方法。

假设我正在与需要为我提供高斯似然均值和方差的先验信息的人一起工作。就像是

yN(μ,σ2)

问题是:“这个人对的先验是什么?”μσ2

平均而言,我可能会问“给我一个你认为预期值可能的范围”。他们可能会说“在 20 到 30 之间”。然后我可以自由地解释它(也许作为上的先验的 IQR )。μ

现在,我将使用 R(或更可能是 Stan)来模拟可能的场景,以进一步缩小现实先验的范围。例如,我的同事说介于 20 和 30 之间。现在我必须决定的先验。所以,我可以向他们展示以下内容并说“这四个中哪一个看起来更真实,为什么?”μσ

在此处输入图像描述

他们可能会说“第一个多变,后两个精确。第二个看起来更逼真,但在25处太集中了!”

此时,我将返回并调整均值的先验,同时缩小方差的先验。

这被称为“先验预测检查”——本质上是从先验抽样,以确保先验实际上反映了知识的状态。这个过程可能很慢,但是如果您的合作者没有数据或统计专业知识,那么他们对您有什么期望呢?不是每个参数都可以给定一个平坦的先验。

用于生成样本的 Stan 代码:

data{

  real mu_mean;
  real mu_sigma;

  real sigma_alpha;
  real sigma_beta;

}
generated quantities{

  real mu = normal_rng(mu_mean, mu_sigma);
  real sigma = gamma_rng(sigma_alpha, sigma_beta);
  real y = normal_rng(mu, sigma);
}

用于生成图形的 R 代码

library(rstan)
library(tidyverse)
library(patchwork)

make_plot = function(x){

fit1 = sampling(scode, data = x, algorithm = 'Fixed_param', iter = 10000, chains =1 )

t1 = tibble(y = extract(fit1)$y)

p1 = t1 %>% 
  ggplot(aes(y))+
  geom_histogram()+
  xlim(0,50)

return(p1)
}
d1 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = 5, sigma_beta = 1)
d2 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = 3, sigma_beta = 1)
d3 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = 1, sigma_beta = 1)
d4 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = .1, sigma_beta = 2)
d = list(d1, d2, d3, d4)

y = map(d, make_plot) 

reduce(y,`+`)