R:使用glib(),贝叶斯模型平均(BMA-package)

时间:2015-05-29 12:08:22

标签: r bayesian

由于多重共线性问题,我在通过glib()估计BMA模型时遇到了困难,尽管我已经明确指出要使用哪些列。请在下面找到详细信息。

我将用于贝叶斯模型平均估计的数据:

Cij <- c(357848,766940,610542,482940,527326,574398,146342,139950,227229,67948,
 352118,884021,933894,1183289,445745,320996,527804,266172,425046,
 290507,1001799,926219,1016654,750816,146923,495992,280405,
 310608,1108250,776189,1562400,272482,352053,206286,
 443160,693190,991983,769488,504851,470639,
 396132,937085,847498,805037,705960,
 440832,847631,1131398,1063269,
 359480,1061648,1443370,
 376686,986608,
 344014)
n <- length(Cij);
TT <- trunc(sqrt(2*n))
i <- rep(1:TT,TT:1); #row numbers: year of origin
j <- sequence(TT:1) #col numbers: year of development
k <- i+j-1 #diagonal numbers: year of payment
#Since k=i+j-1, we have to  leave out another dummy in order to avoid  multicollinearity
k <- ifelse(k == 2, 1, k) 

我想通过级别和因素来评估 i j 的效果,但当然不是在同一个模型中。由于我可以决定将 i j 作为因素,级别或根本不包括它们,并且 k 要包含为级别,或排除,共有18(3x3x2)型号。这将我们带到以下数据框:

X <- data.frame(Cij,i.factor=as.factor(i),j.factor=as.factor(j),k,i,j)
X <- model.matrix(Cij ~ -1 + i.factor + j.factor + k + i + j,X) 
X <- as.data.frame(X[,-1])

接下来,通过以下声明,我指定了18个模型中每个模型中要考虑的变量。据我所知,这些规范中没有线性依赖。

model.set <- rbind(
  c(rep(0,9),rep(0,9),0,0,0),
  c(rep(0,9),rep(0,9),0,1,0),
  c(rep(0,9),rep(0,9),0,0,1),
  c(rep(0,9),rep(0,9),1,0,0),
  c(rep(1,9),rep(0,9),0,0,0),
  c(rep(0,9),rep(1,9),0,0,0),
  c(rep(0,9),rep(0,9),0,1,1),
  c(rep(0,9),rep(0,9),1,1,0),
  c(rep(0,9),rep(1,9),0,1,0),
  c(rep(0,9),rep(0,9),1,0,1),
  c(rep(1,9),rep(0,9),0,0,1),
  c(rep(1,9),rep(0,9),1,0,0),
  c(rep(0,9),rep(1,9),1,0,0),
  c(rep(1,9),rep(1,9),0,0,0),
  c(rep(0,9),rep(0,9),1,1,1),
  c(rep(0,9),rep(1,9),1,1,0),
  c(rep(1,9),rep(0,9),1,0,1),
  c(rep(1,9),rep(1,9),1,0,0))

然后我调用glib()函数,告诉它根据model.set从X中选择指定的列。

library(BMA)
model.glib <- glib(X,Cij,error="poisson", link="log",models=model.set)

导致错误

Error in glim(x, y, n, error = error, link = link, scale = scale) : X matrix is not full rank

该函数在评估通过model.set从 X 中选择哪些列之前,首先检查矩阵是否为f.c.r.我如何规避这一点,或者是否有其他方法可以在glib()函数中包含所有18个模型?

提前谢谢。

0 个答案:

没有答案