用锯齿估计dacay常数

用户名

我尝试估计数据的衰减。让我解释。想象一下,您观察到事件X,每个事件都有一个效果y,该效果随时间exp(-t / Tau)衰减。您观察时间t和事件x以及预测其作用y的结果。让我向您展示我的JAGS代码。

model{
for( j in 1:N ){
  for(i in 1:p){
    td[j,i] <- exp( - t[j,i] / Tau[i] )
  }

  mu[j] <- inprod( X[j,]*td[j,] ,beta[] )
  Y[j] ~ dnorm( mu[j], sigma )
}

   for(j in 1:p){
     bsigma[j] ~dgamma(0.001,0.001);
     beta[j] ~ dnorm(0,bsigma[j]);
     Tau[j] ~ dgamma(0.001,0.001);
   }
   sigma  ~ dgamma(0.001,0.001)
}

我在R中生成测试数据,如下所示:

N = 1000;

sigma = 0.1;
beta  = c(0.75,0.33)
tau   = c(5.7,1.3)

X<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t = abs(t);
Y<- rnorm(N,(X*exp(- t/tau ) )%*%as.matrix(beta),sigma)

使用我的模型,我可以成功找到beta的值,但是我无法估计Tau的正确值。
这里是完整的代码:

N = 1000;

sigma = 0.1;
beta  = c(0.75,0.33)
tau   = c(5.7,1.3)

X<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t<-cbind(rnorm(N,1,1),rnorm(N,2,1))
t = abs(t);
Y<- rnorm(N,(X*exp(- t/tau ) )%*%as.matrix(beta),sigma)

####JAGS
##################
library(mcmcplots)
library(runjags)
library(rjags)

hmodel_jags<- function(X,Y,t){
  modelstring = "
  model{
    for( j in 1:N ){
      for(i in 1:p){
        td[j,i] <- exp( - t[j,i] / Tau[i] )
      }

     mu[j] <- inprod( X[j,]*td[j,] ,beta[] )
      Y[j] ~ dnorm( mu[j], sigma )
    }

    for(j in 1:p){
      bsigma[j] ~dgamma(0.001,0.001);
      beta[j] ~ dnorm(0,bsigma[j]);
      Tau[j] ~ dgamma(0.001,0.001);
    }
    sigma  ~ dgamma(0.001,0.001)
  }"
  writeLines(modelstring,con="dec.txt")
  ########
  set.seed(123)


  jags_data <- list(Y = Y,
                t = t,
                X = X,
                p = ncol(X),
                N=nrow(X)
                )
  params <- c( "Tau",'sigma','beta') 
  adapt <- 1000
  burn <- 1000
  iterations <- 1000
  inits <- list( )

  sample <- run.jags(model="dec.txt", thin =2, monitor=params,data=jags_data, n.chains=2, inits=inits, adapt=adapt, burnin=burn,      sample=iterations, summarise=T, method="parallel") 

  sample
}
res_jags_het <- hmodel_jags(X,Y,t) 
雅各布·索科拉尔

错误出在您的数据模拟中。你有

 Y<- rnorm(N,(X*exp(- t/tau ) )%*%as.matrix(beta),sigma)

专注于t/tau看看如果你这样做会发生什么

 t <- matrix(c(1,1,1,1,1,1,2,2,2,2,2,2), ncol=2)
 tau <- c(1,20)
 t/tau
 [,1] [,2]
 [1,] 1.00  2.0
 [2,] 0.05  0.1
 [3,] 1.00  2.0
 [4,] 0.05  0.1
 [5,] 1.00  2.0
 [6,] 0.05  0.1

有几种方法可以解决此问题,其中最直观的方法是循环遍历t行。

 tt <- matrix(data=NA, nrow=dim(t)[1], ncol=dim(t)[2])
 for(i in 1:dim(t)[1]){
   tt[i,] <- t[i,]/tau
 }
 tt
 [,1] [,2]
 [1,]    1  0.1
 [2,]    1  0.1
 [3,]    1  0.1
 [4,]    1  0.1
 [5,]    1  0.1
 [6,]    1  0.1

虽然我没有时间重新运行JAGS模型,但可以确认这是唯一的问题-我得走了!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Numpy Polyfit进行曲线拟合,用平方根估计函数常数

来自分类Dev

用nan代替常数

来自分类Dev

用python估计欧几里得变换

来自分类Dev

用指数估计值填充空白

来自分类Dev

编写一个不使用任何函数来估计数学常数 e 的程序

来自分类Dev

用C调用常数复数的最快方法

来自分类Dev

用OCaml计算欧拉常数

来自分类Dev

用pygame绘制未填充的抗锯齿圆

来自分类Dev

用pygame绘制未填充的抗锯齿圆

来自分类Dev

用卡尔曼滤波器估计误差

来自分类Dev

用solvePnPRansac()分解出太多值-姿势估计

来自分类Dev

用卡尔曼滤波器估计误差

来自分类Dev

2019 - 用 C++ 估计点云体积

来自分类Dev

试图用python知道元音和常数

来自分类Dev

用C18读取pic18 rom常数

来自分类Dev

C-为什么用&而不是switch / if比较常数?

来自分类Dev

用3个常数计算可能性的算法?

来自分类Dev

用未知常数求解方程 wolfram mathematica

来自分类Dev

为什么用nl进行估计后访问系数需要比其他估计命令稍有不同的语法?

来自分类Dev

JAVA-用循环初始化锯齿状3D阵列?

来自分类Dev

用固定常数对整数进行硬件除法的最快方法是什么?

来自分类Dev

球拍:用一个函数更改两个常数

来自分类Dev

用一个常数因子确定嵌套循环的时间和空间复杂度

来自分类Dev

用常数值更改excel公式的一部分

来自分类Dev

AngularJS常数

来自分类Dev

提供常数

来自分类Dev

摆动常数vs组件常数

来自分类Dev

摆动常数vs组件常数

来自分类Dev

用 R 中的数百万个观测值和数千个变量估计 OLS 模型