tidyr应用带有purr和扫帚的回归模型

时间:2018-12-03 21:24:01

标签: r dplyr purrr broom

我正在使用嵌套数据方法来应用审查数据模型以在1275个数据流(约225,000个观测值)中传输清晰数据。我已经成功地使用group_by将数据集分为三个层次级别(HUC4,主要分水岭和溪流…以为国家,州,县)。我想采用这种方法,因为它似乎比我一直在使用的for循环方法快得多且易于阅读。但是,当我将模型映射到嵌套数据框时,出现错误: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模型需要这些Inf,因为它们指定了正确的检查数据(并且map函数与最大和中间group_by级别完美配合。只有在按流级别分组时才有麻烦)。 / p>

有人对尝试将其付诸实践有任何想法。任何想法将不胜感激

0 个答案:

没有答案