我是STAN的新手。我正在研究时间ETAS模型,这是一个用于地震建模的模型。地震发生时间t [i]的强度建模为 -
h(t[i]|p,c,mu)=mu+sum((p-1)*(c^(p-1))*(1/((t[i]-t[1:(i-1)]+c)^(p-1))));
其中t是时间,p,c,mu是三个参数。我正在使用Rstan。我为该模型编写了以下stan代码:
stan_etas="
data{
int<lower=0> N;
real<lower=0> t;
}
parameters{
real<lower=0> mu;
real<lower=1.005> p;
real<lower=0> c;
}
我知道我没有将时间指定为矢量。你能帮我写一下模型部分的可能性吗?我正面临写问题的问题。我认为我在R中用时间t [i]编写强度的方式不是在STAN中执行此操作的写入方式。
一小部分(仅包含20次)数据如下: dat = list(0.0000,310.1907,948.4677,1007.2617,1029.7996,1065.7343,1199.8650,1234.6809,1298.0234,1316.0350,1381.8400,1413.4311,1546.2059,1591.1326,1669.5084,1738.9363,1745.5503,1797.9980,1895.6705,1936.3146)
答案 0 :(得分:2)
pow
函数当前不对向量或数组进行操作,因此必须循环以构造强度。另外,我认为您的意思是将t
声明为长度为N
的真实数组,它看起来像real<lower=0> t[N];
。然后在模型块中,你会有类似的东西:
y[1] <- pow(c, -(p-1));
for (j in 2:N) {
y[j] <- mu;
for (i in 1:(j-1))
y[j] <- y[j] + (p - 1) * c^(p-1) *
1 / (t[j]-t[i]+c)^(p-1);
}
但是,您最终必须使用increment_log_prob()
函数来注册对数似然。虽然我不熟悉ETAS模型,但ETAS R package的文档声称它涉及一个积分,目前在Stan中无法用数字近似。