如何从MCMCregress计算模型残差

时间:2014-07-27 15:42:52

标签: r bayesian

我正在使用贝叶斯推理进行课堂作业。为此,我使用的MCMCregress函数来自MCMCpack。问题来自于我想得到残差,因为函数没有提供它们,所以我必须“手动”计算它们(在R中)。

我的模特是:

Model <- MCMCregress(Y~X1+X2+X3+X4+X5, data=DATA)

其中X1X5是连续的,而X2X3X4是二分的。模型输出为我提供了每个变量的估计值:

(Intercept) = 1.90, 
X1 = -0.02, 
X2 = -0.05, 
X3 = 0.32,
X4 = 0.61,
X5 = -0.003,
sigma2 = 0.54

我想我必须这样:

1.90 - 0.02*X1 - 0.05*X2 + 0.32*X3 ...

但是我知道我在R代码中缺少一些重要的东西,所以我想知道哪个是正确的R代码以获得残差。


这是一个可重复的例子(尽管它与原始数据不对应):

Y  <- c(0.2,0.8,1,4.3,5,3.5,3.2,1,3.3,1,2,4,3.6,3,5,4.3,3.2,4,1,2)
X1 <- c(17,13,15,NA,12,24,15,NA,12,22,14,12,18,NA,10,13,12,11,26,10)
X2 <- c(0,0,0,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1,NA,NA)
X3 <- c(0,0,1,1,1,0,1,0,0,0,0,1,0,NA,0,NA,NA,0,1,0)
X4 <- c(1,0,1,0,0,1,0,0,NA,0,NA,NA,0,0,1,0,1,1,0,1)
X5 <- c(2.46,4.56,32.1,NA,NA,NA,NA,NA,NA,3.76,5.67,4.56,NA,
        17.32,12.2,4.56,7.2,1.2,NA,9.2)

X2 <- ifelse(X2 > 0, c("Yes"), c("No")) 
X3 <- ifelse(X3 > 0, c("Yes"), c("No")) 
X4 <- ifelse(X4 > 0, c("Yes"), c("No")) 

DATA <- data.frame(Y,X1,X2,X3,X4,X5)


library(MCMCpack)
MCMC <- MCMCregress(Y~X1+X2+X3+X4+X5, data=DATA)
summary(MCMC)

如何获得残差?

1 个答案:

答案 0 :(得分:3)

我发现在MCMC链条末端发生了可怕的事情 运行 - 检查xyplot(MCMC,layout=c(2,4))。我不知道是什么 问题是,你必须解决这个问题,但与此同时我也是 将中位数而不是均值作为系数估计值。

coefs <- apply(MCMC,2,median)[1:6]
X <- model.matrix(~X1+X2+X3+X4+X5, data=DATA)
pred0 <- X %*% coefs

最复杂的部分是处理NA值:这是内置的 大多数现有残差()方法......

pred <- napredict(attr(na.exclude(DATA),"na.action"),pred0)
resids <- pred-DATA$Y

请注意,在这种情况下,一旦删除了NA值,您就可以将5参数回归模型拟合到6个完整的观察值。你可能不得不做一些明智的事情来获得任何合理的答案...