Я использую метод вложенных данных, чтобы применить цензурированную модель данных для потоковой передачи данных ясности в 1275 потоков (225 000 наблюдений).Я успешно использовал group_by
, чтобы сгруппировать набор данных по трем иерархическим уровням (HUC4, Основной водораздел и Поток… думаю, страна, штат, округ).Я хочу использовать этот подход, так как он гораздо быстрее и легче для чтения, чем тот подход, который я использовал.Однако я получаю сообщение об ошибке: NA/NaN/Inf in foreign function call
, когда я сопоставляю модель с вложенным фреймом данных.Это очень озадачивает, так как подход отлично работает, когда я применяю его к большим и средним кадрам данных group_by.Также это странно, поскольку элементы списка в каждом из трех фреймов данных group_by идентичны (просто сгруппированы на разных уровнях).Данные большие и громоздкие, но я могу попытаться дать некоторые подсказки относительно структуры.
Исходные данные выглядят следующим образом:
> summary(tb_cens)
huc4 loc_major_basin sys_loc_code sample_date y m
Length:203631 Min. : 4010101 Length:203631 Min. :1998-04-06 Min. :1998 Min. : 1.000
Class :character 1st Qu.: 7010207 Class :character 1st Qu.:2006-05-27 1st Qu.:2006 1st Qu.: 5.000
Mode :character Median : 7020011 Mode :character Median :2009-09-10 Median :2009 Median : 7.000
Mean : 7193116 Mean :2009-10-29 Mean :2009 Mean : 6.676
3rd Qu.: 7040004 3rd Qu.:2013-08-28 3rd Qu.:2013 3rd Qu.: 8.000
Max. :10230003 Max. :2018-10-23 Max. :2018 Max. :12.000
d doy combined_stube_conv100_conv60 detection_limit record_length censored1
Min. : 1.00 Min. : 1.0 Min. : 0.00 TRUE : 80189 Min. :10.00 Mode :logical
1st Qu.: 9.00 1st Qu.:143.0 1st Qu.: 26.00 FALSE:123442 1st Qu.:12.00 FALSE:159845
Median :16.00 Median :184.0 Median : 58.57 Median :14.00 TRUE :43786
Mean :16.02 Mean :187.8 Mean : 53.29 Mean :14.48
3rd Qu.:24.00 3rd Qu.:233.0 3rd Qu.: 72.00 3rd Qu.:17.00
Max. :31.00 Max. :365.0 Max. :100.00 Max. :26.00
censored2
Mode :logical
FALSE:167033
TRUE :36598
В моем случае это команды
##### create the model function
cens_model <- function(tb_cens) {
survreg(Surv(left_clarity, right_clarity, type = 'interval2') ~ y + m, data = tb_cens, dist = 'gaussian')
}
##### group_by huc4 (12 huc4s)
by_huc4 %
group_by(huc4) %>%
nest()
# apply censored data model to each huc4 and mutate results to data frame
by_huc4 %
mutate(huc_model = map(data, cens_model))
by_huc4
Что отлично работает!Кроме того,
##### group_by watershed (75 major watersheds)
by_watershed %
group_by(loc_major_basin) %>%
nest()
# apply censored data model to each watershed and mutate results to data frame
by_watershed %
mutate(watershed_model = map(data, cens_model))
by_watershed
, который также отлично работает!Однако при использовании той же технологии для потоков (наименьший уровень group_by) выдается ошибка о NA / NaN / Inf при вызове сторонней функции.
##### group_by stream
by_stream %
group_by(sys_loc_code) %>%
nest()
# apply censored data model to each watershed and mutate results to data frame
by_stream %
mutate(stream_model = map(data, cens_model))
by_stream
Это дает следующую ошибку:
Error in mutate_impl(.data, dots) :
Evaluation error: NA/NaN/Inf in foreign function call (arg 3).
В моих данных нет ни NA, ни NaN.В последнем столбце есть некоторые Inf, но модель Tobit требовала того, чтобы они указывали правильные цензурированные данные (и функция map отлично работала с самым большим и средним уровнями group_by. У нее были проблемы только при группировании по уровню потока).
Есть ли у кого-нибудь идеи о попытке запустить его на землю?Любые мысли будут высоко ценится