繁体   English   中英

从离散的观测参数推断连续的潜在参数

[英]inferring a continuous latent parameter from a discrete observed parameter

我对观测数据是连续潜在参数离散化的模型感兴趣。

作为一个简单的例子,假设您有观察结果J_i

在哪里

      J_i = 1 if L_i >= 1

      J_i = -1 if L_i < -1

      J_i = 0 if -1 <= L_i < 1 

其中L_i = \mu + \epsilon_i

我们想推断\mu

这将如何在 Stan 中实施?

假设L[i]服从均值mu和标准差epsilon[i]的正态分布,一种方法是认为J[i]是从 3 个类别(即 -1、0、1)的分类分布中得出的,具有参数theta[i] (每个长度为 3),其中每个theta[i][j]是正态概率分布下的面积,参数为(mu, epsilon[i]) ,在相应的区间。 下面是一个例子。

L 和 J 的示例分布。

因此,我们可以将theta作为参数矩阵包含在transformed parameters块中,而无需在 Stan model 中指定L示例实现如下。 请注意,为了方便使用categorical function,这里将类别视为1, 2, 3而不是-1, 0, 1

model.斯坦:

data {
  int<lower=0> N;   // number of samples
  int J[N];         // observed values
}

parameters {
  real mu;                    // mean value to infer
  real<lower=0> epsilon[N];   // standard deviations
}

transformed parameters {
  matrix[N, 3] theta;         // parameters of categorical distributions
  for (i in 1:N) {
    theta[i, 1] = Phi((-1 - mu) / epsilon[i]);      // Area from -Inf to -1
    theta[i, 3] = 1 - Phi((1 - mu) / epsilon[i]);   // Area from 1 to Inf
    theta[i, 2] = 1 - theta[i, 1] - theta[i, 3];    // The rest of the area
  }
}

model {
  mu ~ normal(0, 10);     // prior for mu
  for (i in 1:N) {
    epsilon[i] ~ lognormal(0, 1);     // prior for epsilon[i]
    J[i] ~ categorical(to_vector(theta[i]));
  }
}

R 中的示例用法如下。

主要.R:

library(rstan)

set.seed(100)

# simulated data
N <- 20
mu <- -1.2      # This is the value we want to estimate
epsilon <- runif(N, 0.5, 2)
L <- rnorm(N, mu, epsilon)
J <- ifelse(L < -1, 1, ifelse(L >= 1, 3, 2))

mdl <- stan("model.stan", data = list(N = N, J = J))

samples <- extract(mdl, "mu")
mu_estimate <- list(mean = mean(samples$mu), sd = sd(samples$mu))
print(mu_estimate)

# $mean
# [1] -1.177485
# 
# $sd
# [1] 0.2540879

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM