Тидир применяет регрессионную модель с мурлыканьем - PullRequest
0 голосов
/ 04 декабря 2018

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

Есть ли у кого-нибудь идеи о попытке запустить его на землю?Любые мысли будут высоко ценится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...