0

我正在尝试使用 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)

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

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

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

4

1 回答 1

0

像这样的东西将遍历状态、拉链和索引(我们称之为states_and_zips)数据帧的每一行,并返回一个预测列表。这个列表的每个元素(我称之为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它将返回一个预测向量,每行一个预测向量state_and_zips,您可以将其作为新列添加到states_and_zips.

于 2020-06-17T22:44:17.313 回答