gpt4 book ai didi

r - 错误 : Attempt to redefine node in linear regression

转载 作者:行者123 更新时间:2023-12-04 09:05:37 25 4
gpt4 key购买 nike

我安装了以下 simple linear regression Bayesian模型使用 rjags .
我能够通过单独指定所有预测变量来运行模型(例如 lm 对象)。现在我想学习如何通过将它们作为矩阵引入而不是单独指定它们来指定预测变量。
所以我运行了以下代码,但它给出了一些错误。
我用过 tobbaco数据集在 rrr包以提供可重现的示例。

library(rrr)
require(dplyr)
library(rjags)
tobacco <- as_data_frame(tobacco)
N1 = length(tobacco$Y1.BurnRate)
x1 = model.matrix(Y1.BurnRate~X2.PercentChlorine+X3.PercentPotassium ,data = tobacco)

bayes_model_mul1=
"model {
for(i in 1:N1){
Y1.BurnRate[i]~dnorm(mu1[i],tau1)

for(j in 1:3){
mu1[i]=beta1[j]*x1[i,j]
}
}

for (l in 1:3) { beta1[l] ~dnorm(0, 0.001) }
tau1 ~ dgamma(.01,.01)
sigma_tau1 = 1/tau1

}"


model3 <- jags.model(textConnection(bayes_model_mul1),
data = list(Y1.BurnRate=tobacco$Y1.BurnRate, x1=x1, N1=N1),
n.chains=1)
我跑后 model3 ,我收到以下错误。

Error in jags.model(textConnection(bayes_model_mul1), data = list(Y1.BurnRate = tobacco$Y1.BurnRate, :
RUNTIME ERROR:
Compilation error on line 6.
Attempt to redefine node mu1[1]


谁能帮我解决这个问题?
这是由于将预测变量作为矩阵引入吗?

最佳答案

有几种方法可以做到这一点,这里有两种:

  • 在似然循环之外使用矩阵乘法
  • m1 =
    "model {
    mu1 = x1 %*% beta1 # ---> this
    for(i in 1:N1){
    Y1.BurnRate[i] ~ dnorm(mu1[i], tau1)
    }

    for (l in 1:3) { beta1[l] ~ dnorm(0, 0.001) }
    tau1 ~ dgamma(.01,.01)
    sigma_tau1 = 1/tau1
    }"
  • 使用 inprod将参数与设计矩阵相乘
  • m2 = 
    "model {
    for(i in 1:N1){
    mu1[i] = inprod(beta1, x1[i,]) #----> this
    Y1.BurnRate[i] ~ dnorm(mu1[i], tau1)
    }

    for (l in 1:3) { beta1[l] ~ dnorm(0, 0.001) }
    tau1 ~ dgamma(.01,.01)
    sigma_tau1 = 1/tau1
    }"

    您收到了 for(j in 1:3){ mu1[i] = beta1[j]* x1[i,j] } 的错误消息每次循环参数索引 j 时你覆盖 mu1[i] .它也没有总结个别条款。您也许可以索引 mu1j以及然后 sum但未经测试...

    关于r - 错误 : Attempt to redefine node in linear regression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63457703/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com