R - 协变量多于观察值的贝叶斯树

R - Bayes Trees with more covariates than observations

我在 R 中收到无法追溯的错误消息。

我正在尝试将贝叶斯树模型拟合到协变量多于观察值的数据。 以我的知识水平,我认为这应该不是问题,但是,无论我尝试什么包,所有尝试都会导致错误。

当使用 bcf 包中的 bcf() 函数和 ncol(x) > nrow(x) 时,我收到错误:

bcfoverparRcppClean(yscale[perm], z[perm], t(x_c[perm, ]), t(x_m[perm, : drmu failed

bcfoverparRcppClean() 本身写在 C++ 中,我还没有尝试深入研究。

当我只有 select 部分协变量时,该函数按预期执行。

类似的情况发生在 BayesTree 包中的 bart() 函数中。 此处,错误显示为:

NA/NaN/Inf in foreign function call (arg 7)

不用说,数据中没有 NA,也没有无穷大的值,一旦输入的观测值多于协变量,误差就会消失。

请在下面找到一个可重现的示例:

library('stats')
library('purrr')

x <- matrix(data = rnorm(100*200), nrow = 100, ncol = 200)
y <- rowSums(x)
d <- as.numeric(rbernoulli(100, p = .5))
pihat <- 1/(1+exp(-y))


library('bcf')

bcf(y, d, x, x, pihat, nburn = 1000, nsim = 500)


library('BayesTree')

bart(x.train = x, y.train = y, ndpost = 1000, nskip = 500, usequants = TRUE)

我想这一定是有意为之的行为,因为这两种方法都会发生,但我找不到概念上的原因。

Hahn, Murray, and Carvalho (2019)中,拟合树似乎与传统树的不同之处仅在于先验诱导后验分布,该后验分布指导模型的随机搜索。 我相信这不会改变处理高维数据的能力,但这些函数并不像示例中那样工作。

我是不是漏掉了什么?如果有人能提醒我这样做的原因或者甚至想出一个解决方法(只要我没有弄错理论),我将不胜感激。

提前致谢!

如果有人遇到类似的问题。

我最终使用了 bartMachine 包中的 bartMachine() 函数。

它可以处理高维数据。

仍然对它不能与其他包一起工作的原因感兴趣,如果有人知道的话。