我使用JAGS拟合回归模型,现在我想做一个残差的模拟包络来检查这个模型的拟合度。假设下面的矩阵是残差矩阵,其中每一行都是观察,每列都是模拟。
第一列是原始数据集的残差,其他是模拟残差
resid <- matrix(runif(330,0,2),ncol =11)
resid <- apply(resid,2,sort)
要进行模拟包络,我需要找到每个观测值的最小值,最大值和平均值,而不是第一列是原始残差。然后我做了
means <- apply(resid[,-1],1,mean)
minimuns <- apply(resid[,-1],1,min)
maximuns <- apply(resid[,-1],1,max)
现在我需要绘制每个平均线,最小值和最大值
z=qnorm((i+n-1/8)/(2*n+1/2))
在这种情况下n=30
和i=1:30
所以我现在需要做的是将最小值,最大值和平均值作为线条放在一个图中,然后将第一列(原始数据)的点放在z
上。
我怎么做?
答案 0 :(得分:1)
这是一个没有大量格式化的简单图表
<强>编辑强>
resid <- matrix(runif(330,0,2),ncol =11)
resid <- apply(resid,2,sort)
means <- apply(resid[,-1],1,mean)
minimuns <- apply(resid[,-1],1,min)
maximuns <- apply(resid[,-1],1,max)
n=length(minimuns)
i=seq_along(minimuns)
z=qnorm((i+n-1/8)/(2*n+1/2))
plot(z, minimuns, type='l',ylim=range(c(minimuns,maximuns,resid[,1])))
lines(z, maximuns)
lines(z, means, lty=2)
points(z, resid[,1])
legend("topleft", legend=c("envelope", "mean", "first column"), lty=c(1,2,NA),pch=c(NA,NA,1))
或许类似
plot(NA, xlim=range(z), ylim=range(c(minimuns,maximuns,resid[,1])))
polygon(c(z,rev(z)),c(minimuns,rev(maximuns)),border=NA, col="grey90")
lines(z, means, lty=2)
points(z, resid[,1])
当然,这可以被美化,但这是我想到的一种解决方案。