作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想学习如何在 stan 中使用 Dirichlet 分布。
我有一个表格,其中包含因子变量的六个级别中每个级别的观察总数:
counts n factor_var
-------- ------ ------------
3710 4386 level 1
252 4386 level 2
332 4386 level 3
59 4386 level 4
29 4386 level 5
4 4386 level 6
我只想估计 dirichlet 参数,即 a 值来自给定水平的概率。我知道它可以在 R 中轻松完成 (gtools::rdirichlet(number_of_samples, df$counts)
),但我最终的目标是基于该估计的层次模型。
这是我目前拥有的一个 stan 模型。该模型无法编译,因为分类分布的结果是 <1, n_levels> 中的离散数字。
data {
int<lower=1> n_levels;
int counts[n_levels];
}
parameters {
vector<lower=0>[n_levels] priors;
simplex[n_levels] level_p;
}
model {
level_p ~ dirichlet(priors);
counts ~ categorical_logit(level_p);
}
这是 R 代码:
df <-
data.frame(
counts=c(3710, 252, 332, 59, 29, 4),
n = c(4386, 4386, 4386, 4386, 4386, 4386),
factor_var = factor(1:6, labels=paste0('level ', 1:6)))
data<-list(
n_levels=6,
counts<-df$counts
)
fit1<-stan(
file='model.stan')
运行时,编译后出现如下错误:
SAMPLING FOR MODEL 'model' NOW (CHAIN 1).
Rejecting initial value:
Error evaluating the log probability at the initial value.
Exception: categorical_logit_lpmf: categorical outcome out of support is 3710, but must be in the interval [1, 6] (in 'model6fffc8dd594_proba_stan' at line 13)
...
Initialization between (-2, 2) failed after 100 attempts.
Try specifying initial values, reducing ranges of constrained values, or reparameterizing the model.
[1] "Error in sampler$call_sampler(args_list[[i]]) : Initialization failed."
error occurred during calling the sampler; sampling not done
最佳答案
您需要使用多项式分布。
categorical_logit
假定对数几率参数,而不是单纯形。
手册中有如何拟合 Dirichlet 的示例,包括一些广义先验。
关于r - stan 中的多项式模型 - 如何拟合狄利克雷分布参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45700667/
COUNT 查询找出 total_count 有时很慢。但是,如果我在模型中缓存 items_amount 或此类字段的值,我想将其用于 kaminari 分页。 例子:我有模型 Category (
我们使用 Kaminari 对记录进行分页。我们破解了 total_count 方法,因为在 2m + 记录后给出总计数非常慢。 def total_count @_hacked_total_co
我是一名优秀的程序员,十分优秀!