首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stan模型中的生成数量块

stan模型中的生成数量块
EN

Stack Overflow用户
提问于 2020-10-14 11:01:04
回答 1查看 440关注 0票数 2

我正在构建一个标准的线性回归模型,我希望包含generated quantities块,并希望使用dot_self()函数。问题是我拿不到模拟样品。错误是:Stan model 'LinearRegression' does not contain samples.。我认为函数dot_self()没有被识别为一个函数。我在这里展示了stan代码和R代码。提前谢谢。

注意:我确信输入的数据是正确的,因为没有generated quantities块的模型工作得很好。

标准代码:

代码语言:javascript
复制
data {          
  int<lower=1> N;           
  int<lower=1> K;           
  matrix[N, K] X;           
  vector[N] y;              
}
parameters {                
  vector[K] beta;           
  real<lower=0> sigma;      
}
model{                     
  vector[N] mu;             
  mu = X * beta;             

  beta ~ normal(0, 10);
  sigma ~ cauchy(0, 5);                                     
  y ~ normal(mu, sigma);    
}

generated quantities {
  real rss;                
  real totalss;
  real<lower=0, upper=1> R2;                 
  vector[N] mu;
  mu=X * beta;
  rss=dot_self(y-mu);
  totalss=dot_self(y-mean(y));
  R2=1 - rss/totalss;
}

R运行Stan模型的代码:

代码语言:javascript
复制
library(rstan)
library(coda)
library(ggplot2)
rstan_options(auto_write=T)
options(mc.cores=parallel::detectCores())

dat=list(N=N, K=ncol(X), y=y, X=X)
fit3 = stan(file = "C:.... LinearRegression.stan", data = dat, iter = 100,chains = 4)

print(fit3, digits=3, prob=c(.025,.5,.975))
EN

回答 1

Stack Overflow用户

发布于 2021-01-23 04:56:45

该错误是由于R2上的界限造成的。我认为没有必要对生成的数量施加限制。

这里我使用了模拟的x和y:

代码语言:javascript
复制
X = matrix(runif(N*K), N, K)
y = rowSums(X)

删除边界后的结果为:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64346001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档