【发布时间】:2019-08-15 19:19:37
【问题描述】:
您可以在下面找到一个带有 2 个预测变量的线性回归的简单示例。它运作良好。但是,当只有 1 个预测器时(参见第二个脚本),会出现以下错误消息:
例外:在上下文中声明和发现的数字维度不匹配;处理阶段=数据初始化;变量名=x;暗淡声明=(20,1);发现暗淡=(20)
问题在于 1 行的矩阵会自动转换为向量,因此与声明的维度不匹配。一种解决方案是将 x 声明为向量,但问题是我正在运行具有不同数量的预测变量(可能是 1 或更多)的相同脚本。
STAN 脚本:
write("// Stan model for simple linear regression
data {
int<lower=0> N; // number of data items
int<lower=0> K;// number of predictors
matrix[N, K] x;// predictor matrix
vector[N] y;// outcome vector
}
parameters {
real alpha; // intercept
vector[K] beta; // coefficients for predictors
real<lower=0> sigma; // error scale
}
model {
y ~ normal(x * beta + alpha, sigma); // likelihood
}", "ex_dimension.stan")
具有 2 个预测变量的 R 脚本(工作):
N=20
K=2
x1=1:N+rnorm(N,0,0.5)
x2=rnorm(N,2,1)
x=cbind(x1,x2)
a=2
b=3
y=a*x1+b*x2+rnorm(N,0,1)
stan_data=list(N=N,
K=K,
x=x,
y=y)
fit <- stan(file = "ex_dimension.stan",
data = stan_data,
warmup = 500,
iter = 2000,
chains = 4,
cores = 4,
thin = 1,
control=list(adapt_delta=0.8))
fit
带有 1 个预测器的脚本(不工作):
stan_data=list(N=N,
K=1,
x=x[,1],
y=y)
fit <- stan(file = "ex_dimension.stan",
data = stan_data,
warmup = 500,
iter = 2000,
chains = 4,
cores = 4,
thin = 1,
control=list(adapt_delta=0.8))
fit
【问题讨论】: