使用readRDS加载Stan模型输出报错:对象mod.dyn未找到
问题:读取Stan拟合结果后出现
object 'mod.dyn' not found错误 我用Stan运行贝叶斯潜变量模型,运行代码如下:
# 运行Stan模型 mod.dyn <- stan(file="DynamicLVMmin.stan", data=stan.data, seed=570175513, thin = 5, iter=10000)
模型运行正常,之后用以下代码保存拟合结果:
# 保存Stan拟合结果 saveRDS(mod.dyn, "dynamic_fit.rds")
现在读取dynamic_fit.rds并想用Gelman-Rubin R-hat诊断收敛性,代码如下:
readRDS("dynamic_fit.rds") params <- c("innov", "c_n_4_v2exdfdshs", "c_n_5_v2exdfvths", "c_n_3_v2exdfpphs", "c_n_5_v2lginvstp", "c_n_3_v2lgoppart", "c_n_2_v2lgfunds", "c_n_4_v2lgcomslo", "c_n_2_v2lgintbup", "c_n_2_v2lgintblo", paste("beta[", 1:9, "]", sep="")) params.all <- names(mod.dyn)
但收到错误:
Error: object 'mod.dyn' not found Execution halted
错误原因
你遗漏了**将读取的RDS对象赋值给mod.dyn**这一步。saveRDS()确实把mod.dyn保存到了文件里,但readRDS()仅读取文件内容,不会自动将内容绑定到原变量名,必须显式赋值才能在后续代码中调用该对象。
修正后的代码
# 读取拟合结果并赋值给mod.dyn mod.dyn <- readRDS("dynamic_fit.rds") params <- c("innov", "c_n_4_v2exdfdshs", "c_n_5_v2exdfvths", "c_n_3_v2exdfpphs", "c_n_5_v2lginvstp", "c_n_3_v2lgoppart", "c_n_2_v2lgfunds", "c_n_4_v2lgcomslo", "c_n_2_v2lgintbup", "c_n_2_v2lgintblo", paste("beta[", 1:9, "]", sep="")) params.all <- names(mod.dyn)
后续收敛性诊断示例
完成赋值后,可以用以下代码计算或可视化指定参数的Gelman-Rubin R-hat值:
# 计算指定参数的R-hat值 summary(mod.dyn, pars = params)$summary[, "Rhat"] # 可视化R-hat值(需加载bayesplot包) library(bayesplot) mcmc_rhat(rstan::extract(mod.dyn, pars = params))
内容的提问来源于stack exchange,提问作者w5698
相关产品推荐
相关产品推荐

