使用贝叶斯非线性回归获得良好参数估计的提示和技巧

机器算法验证 贝叶斯 非线性回归 锯齿 事先的
2022-03-26 02:38:52

我一直在尝试使用 rjags 拟合非线性模型。特别是 3 和 4 参数 sigmoid 曲线,例如,

upAsym + (y0 - upAsym)/ (1 + (x[r]/midPoint)^slope))

我注意到良好的参数估计(+- 95% HDIs)高度依赖于具有严格约束的先验。是否有任何好的指南(或易于阅读的论文/书籍)可以帮助选择合理的无信息先验来帮助参数估计?

我的想法是:在特定范围内使用统一的先验与使用中等精度的正常先验是否更好,或者,首先拟合最小二乘估计以帮助设置边界和起始值,或者,调整老化和变薄。

我一直在玩的一个玩具例子(这个例子中的斜率参数有时很难得到一个像样的估计):

x <- 0:20
y <- 20 + (2 - 20)/(1 + (x/10)^5) + rnorm(21, sd=2)
dataList = list(y = y, x = x, N = 21)

models = "
model {
  for( i in 1 : N ) {
    y[i] ~ dnorm( mu[i] , tau )
    mu[i] <- upAsym + (y0 - upAsym)/ (1 + pow(x[i]/midPoint, slope))
  }
  tau ~ dgamma( sG , rG )
  sG <- pow(m,2)/pow(d,2)
  rG <- m/pow(d,2)
  m ~ dgamma(1, 0.01)
  d ~ dgamma(1, 0.01)

  midPoint ~ dnorm(10,0.0001) T(0,21)
  slope    ~ dnorm(5, 0.0001) T(0,)
  upAsym   ~ dnorm(30,0.0001) T(0,40)
  y0       ~ dnorm(0, 0.0001) T(-20,20)
}" 
writeLines(models,con="model.txt")
1个回答

这是我将用于 sigmoid 模型的符号:

y=U+LU1+(xx0)k

问题在于 sigmoid 模型在有界域内嵌套了接近线性的函数,此外,非常不同的参数值会导致几乎相同的线。一探究竟:

sigmoid <- function(x, L, U, x_0, k) U + (L-U)/(1 + (x/x_0)^k)
x<- runif(n = 40, min = 15, max = 25)
y1 <- sigmoid(x, -10, 50, 20, 5) + rnorm(length(x), sd = 2)
y2 <- sigmoid(x, -24, 76, 21.6, 3) + rnorm(length(x), sd = 2)
curve(sigmoid(x, -10, 50, 20, 5), from = 15, to = 25, ylab = "y")
curve(sigmoid(x, -24, 76, 21.6, 3), add = TRUE, col = "red")
points(x, y1)
points(x, y2, col = "red")

在此处输入图像描述

结果是似然函数在参数空间的大片区域内的某些方向上变化非常非常缓慢。如果先验不约束参数,则后验分布继承似然的病态。

我没有使用锯齿,所以我不知道你有多少自由来指定先验。(当事情变得如此复杂时,我通常会在 R 中推出我自己的采样算法。)在这种情况下,我使用的方法是对数据域两端没有可检测到的饱和度的 sigmoid 函数提供零优先支持( “数据域”是指最小和最大值之间的闭合区间)。除非数据确实在两端都具有可检测的饱和度,否则这将不起作用——但如果数据在任一端看起来都是线性的,那么无论如何都不应该拟合 sigmoid。x

首先,请注意函数在中点的斜率为sigmoid 函数的斜率与中点斜率之比最多为值集合为“饱和区域”。将有两个饱和区域,一个在中点之上,一个在中点之下。这些区域中的点将大部分信息贡献给确定渐近线的值。事实上,估计一个渐近线基本上就像估计一个常数,所以估计一个渐近线的标准误差大约是,其中是适当的数据点的数量饱和区。(UL)k4x0x12σnn

分别为上饱和区域和下饱和区域内的数据点数。请注意,这些数字是 sigmoid 函数的所有参数的隐式函数。为了从先验支持中排除平坦可能性的区域,我会选择一个分配零密度的先验,除非满足以下条件:nUnL

  • x0在数据域内
  • nU>0
  • nL>0
  • 有条件地对 ,σU2σnU>L+2σnL

我不确定在这个先验支持区域内分配什么先验是合理的,但如果它只是平坦的,至少它不会比基于似然函数渐近的频率论推理更糟糕。