R中的残差和包络图

时间:2017-05-24 16:08:27

标签: r plot jags

我使用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=30i=1:30

所以我现在需要做的是将最小值,最大值和平均值作为线条放在一个图中,然后将第一列(原始数据)的点放在z上。

我怎么做?

我想在下面的图片中做,但是用黑色的连续线条。 enter image description here

1 个答案:

答案 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])

当然,这可以被美化,但这是我想到的一种解决方案。