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

使用 traceplot 函数从链收敛图中去除非典型的内部线

如何解决使用 traceplot 函数从链收敛图中去除非典型的内部线

我正在制作使用 traceplot 函数生成的链的收敛图。但是,请查看图表上出现了哪些不寻常的线条。您将如何移除它们?

数据:https://drive.google.com/file/d/1iOuGbjNI_caLWBIz4s7hZX5GlfhLrwr9/view?usp=sharing

以下是代码

require(rstan)
library(boa)
library(bayesplot)
library(rstanarm)
library(ggplot2)
library(dplyr)

setwd("C:\\Users\\Desktop")
dados = read.table("dados.csv",header = T,sep=";",dec = ",")
dados$periodo = as.factor(dados$periodo)
dados <- dados %>% mutate(proporcao =  (dados$resposta)/60)
dados <- dados %>% mutate(logdose = log(dados$concentracao))
dados <- dados %>% mutate(Período = dados$periodo)
dados<- mutate(dados,C_resposta=60-resposta)
dados <- dados %>% dplyr::mutate(Period = ifelse(periodo %in% c("24h","24h","48h","72h","72h"),c("Experiment Duration: 24h","Experiment Duration: 24h","Experiment Duration: 48h","Experiment Duration: 72h",dados2 = dados[c(1:5),]
n = length(dados2$logdose)
y = dados2$resposta

logistic_example24 <- "data {
int<lower=0> N;
vector[N] x;
int<lower=0> y[N];
int<lower=0> n[N];
}
parameters {
real beta1;
real beta2;
}
model {
beta1 ~ normal(0,100);
beta2 ~ normal(0,100);
y ~ binomial_logit(n,beta1 + beta2 * x);
}"

logistic_fit24 <- stan(model_code = logistic_example24,data = list(N = dim(dados2)[1],n = dados2$total,x = dados2$logdose,y = dados2$resposta),chain = 3,iter = 11000,warmup = 1000,thin = 10,refresh = 0)

x11()
par(cex=1.5,cex.lab=1.3)
traceplot(logistic_fit24,inc_warmup=T,ncol=1,col="black")+
  xlab("Iterações") +
  theme_bw() + theme(axis.title = element_text(size = 28,color="black"),axis.text = element_text(size = 24,strip.text.x = element_text(size = 22,color="black"))

请注意,使用 stan_trace 函数时,不会出现这些非典型线条,但是,出于美观,我的兴趣是使用 traceplot 函数

x11()
stan_trace(logistic_fit24)

解决方法

通过设置 col="black",您已经删除了 ggplot 需要保持每个链的跟踪分开的信息。添加 aes(group=chain) 如下似乎有效(尽管我会考虑您是否真的想让链彼此无法区分:显示跟踪图的部分目的是验证不同的链是否具有相似的行为.. .)

traceplot(logistic_fit24,inc_warmup=TRUE,ncol=1,col="black")+
    aes(group=chain) 

但我要补充一点,您可以通过以下方式获得相同的图表(据我所知):

stan_trace(logistic_fit24,ncol=1) +
    scale_colour_manual(values=rep("black",3),guide=FALSE)

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