R 中的贝叶斯建模

Bayesian Modelling in R

我正在尝试使用 bas 包在 R 中实现贝叶斯模型,并为我的模型设置这些值:

databas <- bas.lm(at_areabuilding ~ ., data = dataCOMMA, method = "MCMC", prior = "ZS-null", modelprior = uniform())

我正在尝试借助特定状态下存在的特定区域来预测给定状态的区域;但对于不同的邮政编码。我的模型基本上找到给定状态的数据中存在的各种邮政编码(为此使用状态索引),然后给出输出。

现在,每当我尝试预测一个州的面积时,我都会给出以下输入:

> UT <- data.frame(zip = 84321, loc_st_prov_cd = "UT" ,state_idx = 7)
> predict_1 <- predict(databas,UT, estimator="BMA", interval = "predict", se.fit=TRUE)
> data.frame('state' = 'UT','estimated area' = predict_1$Ybma)

现在,我得到了这个状态的输出。 假设我有一个带有给定邮政编码的州列表,我想 运行 我的模型 (databas) 在该列表上并获得预测,我不能通过使用上述方法,因为这需要时间。还有其他方法可以做到吗? 我在一位先生的帮助下做了同样的事情,这是我的代码:

 pred <- sapply(1:nrow(first), function(row) { predict(basdata,first[row, ],estimator="BMA", interval = "predict", se.fit=TRUE)$Ybma })

basdata:我的模型 第一:我正在预测区域的新数据集。 现在,我面临的问题是代码需要很长时间才能预测值。它遍历每一行并计算面积。我的数据集中有 150000 行,如果有人可以帮助我优化此代码的性能,我会请求。

这样的事情将遍历状态、拉链和索引(我们称之为 states_and_zips)和 return 预测列表的数据框的每一行。此列表的每个元素(我称之为 pred)与 state_and_zips 的相应行对应:

pred = lapply(1:nrow(states_and_zips), function(row) {
  predict(databas, ~ states_and_zips[row, ], 
          estimator="BMA", interval = "predict", se.fit=TRUE)$Ybma
})

如果 Ybma 是单个值,则使用 sapply 而不是 lapply,它将 return 一个预测向量,每个预测向量对应 state_and_zips,您可以将其作为新列添加到 states_and_zips