拟合逻辑模型时stan错误“未定义的值”

时间:2016-04-15 17:07:52

标签: stan

这里有新的stan用户。这个特定的模型(基本上是一个混合效应逻辑回归)有时会运行,但通常会得到错误“以下变量有未定义的值:log_lik [182]”等。“dev”或“log_lik”值始终存在问题。它被捕获的索引有时是在区域之间的过渡,但也在某些运行中的随机位置。

stan model:

 Year Area.ID DayIndex S n Area1 Area2 Area3
1    1       1       19 1 1     1     0     0
2    1       1       22 0 2     1     0     0
3    1       1       23 2 5     1     0     0
4    1       1       24 1 3     1     0     0
5    1       1       26 3 3     1     0     0
6    1       1       28 1 3     1     0     0

数据看起来像这样(数据帧“SDF”):

Dlist <- list ("nObs"=dim(SDF)[1], "S"=SDF$S,  "n"=SDF$n,   
  "Area2"= SDF$Area2,"Area3"= SDF$Area3,  "Julian_Day"=SDF$DayIndex,    
   "Year"=SDF$Year,"nYears"=length(unique(SDF$Year)))

# Fit intercept model using stan
fit_ints <- stan(file='STAN/Logistic_Diff_Slope_SN.stan',data = Dlist, iter=5000, chains=3)  

这些调用用于R:

{{1}}

1 个答案:

答案 0 :(得分:0)

当某些生成的数量计算为NaN时,会出现此错误消息,通常是由于数字下溢或溢出。

在您的情况下,您可以通过使用数字更稳定的binomial_logit_log函数而不是binomial_log函数来避免它(出于与binomial_logit model中使用binomial相同的原因1}}阻止而不是 log_lik[i] <- binomial_logit_log( S[i] , n[i] , y[i]); )。换句话说,它应该是 log_lik[i] <- binomial_log( S[i] , n[i] , inv_logit(y[i])); 而不是 p <- inv_logit(y[i]); if (is_nan(p)) y_pred[i] <- y[i] > 0; else if (p >= 1) y_pred[i] <- 1; else if (p <= 0) y_pred[i] <- 0; else y_pred[i] <- binomial_rng(100, inv_logit(y[i])); 另外,当从后验预测分布中绘制时,你可以做类似的事情 binomial_logit_rng 不幸的是,目前斯坦没有o = {}; o.map = function() { //log10(likes+comments) / elapsed hours from the post creation emit(Math.log(this.likes + this.comments + 1) / Math.LN10 / Math.abs((now - this.createdAt) / 6e7 + 1), this); }; o.reduce = function(key, values) { //sort the values, when they have the same score values.sort(function(a, b) { a.createdAt - b.createdAt; }); //serialize the values, because mongoose does not support multiple returned values return JSON.stringify(values); }; o.scope = {now: new Date()}; o.limit = 15; Posts.mapReduce(o, function(err, results) { if (err) return console.log(err); console.log(results); }); 功能。