我正在使用贝叶斯推理进行课堂作业。为此,我使用的MCMCregress
函数来自MCMCpack
。问题来自于我想得到残差,因为函数没有提供它们,所以我必须“手动”计算它们(在R中)。
我的模特是:
Model <- MCMCregress(Y~X1+X2+X3+X4+X5, data=DATA)
其中X1
和X5
是连续的,而X2
,X3
和X4
是二分的。模型输出为我提供了每个变量的估计值:
(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)
如何获得残差?
答案 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个完整的观察值。你可能不得不做一些明智的事情来获得任何合理的答案...