微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Stan上调整线性回归的问题

如何解决在Stan上调整线性回归的问题

我在调整线性回归模型时遇到麻烦。观察错误消息时,将在转换后的参数的块部分中进行标识。

请参见下面的stan代码结构。

Packages:

library(rstan)
library(bayesplot)

数据:

head(Orange)
cols <- c(colnames(Orange[-1]))
Orange <- Orange[,cols]
str(Orange)

stan中的代码

看到stan中的块结构遵循推荐的模式,但是我无法确定代码的哪一部分对我来说似乎是错误的。

y = Orange$circumference
x = Orange$age
n = length(y)

regresstan = '
data{
  int n;
  real y[n];
  real x[n];
}

parameters{
  real alpha;
  real beta;
  real sigma;
}

transformed parameters{
    real mu[n];
    mu = alpha + beta*x;
}

model{
  //Priors
  alpha ~ normal(0,100);
  beta ~ normal(0,100);
  sigma ~ uniform(0,100);

  //Likelihood
    y ~ normal(mu,sigma);
}
'

错误

Syntax ERROR,MESSAGE(S) FROM PARSER:
No matches for: 

  real * real[ ]

Available argument signatures for operator*:

  real * real
  vector * real
  row_vector * real
  matrix * real
  row_vector * vector
  vector * row_vector
  matrix * vector
  row_vector * matrix
  matrix * matrix
  real * vector
  real * row_vector
  real * matrix

No matches for: 

  real + ill-formed

Available argument signatures for operator+:

  int + int
  real + real
  vector + vector
  row_vector + row_vector
  matrix + matrix
  vector + real
  row_vector + real
  matrix + real
  real + vector
  real + row_vector
  real + matrix
  +int
  +real
  +vector
  +row_vector
  +matrix

Expression is ill formed.
 error in 'modele28054257a16_a9d23411185fa271b60f20be43062e80' at line 16,column 23
  -------------------------------------------------
    14: transformed parameters{
    15:     real mu[n];
    16:     mu = alpha + beta*x;
                              ^
    17: }
  -------------------------------------------------

Error in stanc(file = file,model_code = model_code,model_name = model_name,: 
  Failed to parse Stan model 'a9d23411185fa271b60f20be43062e80' due to the above error.

解决方法

错误来自该行上已转换的参数块

mu = alpha + beta*x;

错误是说您不能将实标量乘以实向量(错误real * real[ ])。您可以通过遍历mu的值来解决此问题

transformed parameters {
  real mu[n];
  for(i in 1:n) {
    mu[i] = alpha + beta * x[i];
  }
}

此问题得以解决,因为您现在有了一个纯标量乘以一个纯标量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。