Байесовское моделирование в R - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь реализовать байесовскую модель в R с использованием пакета bas с настройкой этих значений для моей модели:

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 строк, и я хотел бы попросить кого-нибудь помочь мне оптимизировать производительность этого кода.

1 Ответ

0 голосов
/ 18 июня 2020

Что-то вроде этого будет перебирать каждую строку вашего фрейма данных состояний, почтовых индексов и индексов (назовем его 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.

...