проблема с получением нескольких линий регрессии на нескольких фигурах с dplyr и вложенными тибблами - PullRequest
0 голосов
/ 24 января 2019

Я хочу сравнить цензурированную модель данных с моделью прямого доступа. У меня есть таблица, которая содержит вложенные данные, я добавил две разные модели регрессии (простая модель lm и модель тобита для цензурированных данных), и я использовал функции tidy и glance, чтобы извлечь оценки параметров и поместить их в свои собственные столбцы. Я также и добавил функцию построения к структуре. Вот тиббл:

Когда я запускаю функцию построения графика, каждый из 77 графиков содержит правильные точки из одной строки с geom_point. Тем не менее, каждая фигура содержит линии регрессии любых других фигур, а не две (по одной от каждой модели регрессии). Но скорее обе модели умножают на 77 цифр регрессионных линий.

Вот функция построения графика, как я отобразил ее на таблицу:

 by_huc8_plots <- by_watershed_pvalue_slope %>%
  mutate(plot = map2(data, loc_major_basin, ~ ggplot(data = .x) +
                       geom_point(aes(x = y, y = combined_stube_conv100_conv60)) +
                       geom_abline(intercept = ols_intercept, 
                                   slope = ols_slope, color = 'blue') +
                       geom_abline(intercept = cens_intercept, 
                                   slope = cens_slope, color = 'green') +
                       ggtitle(.y) +
                       ylab('Clarity (cm)') +
                       xlab('Year')))

Вот результирующий тиббл с оценками параметров двух моделей:

 by_huc8_plots
# A tibble: 76 x 11
   loc_major_basin data           ols_model ols_pvlaue ols_intercept ols_slope cens_model   cens_pval cens_intercept cens_slope plot  
             <int> <list>         <list>         <dbl>         <dbl>     <dbl> <list>           <dbl>          <dbl>      <dbl> <list>
 1         7080201 <tibble [3,32~ <S3: lm>   3.67e- 28        -1556.     0.791 <S3: survre~  0.               -1001.      0.515 <S3: ~
 2         7040002 <tibble [14,5~ <S3: lm>   1.20e- 95        -1492.     0.764 <S3: survre~  0.               -1006.      0.524 <S3: ~
 3         7010204 <tibble [6,69~ <S3: lm>   5.35e-206        -3606.     1.82  <S3: survre~  0.               -3591.      1.82  <S3: ~
 4         9020103 <tibble [1,10~ <S3: lm>   4.02e- 37        -3273.     1.65  <S3: survre~  0.               -3123.      1.57  <S3: ~
 5         9020104 <tibble [1,66~ <S3: lm>   1.39e- 28          903.    -0.445 <S3: survre~  0.                 912.     -0.450 <S3: ~
 6         9020303 <tibble [1,58~ <S3: lm>   3.69e- 38        -3867.     1.94  <S3: survre~  0.               -4303.      2.15  <S3: ~
 7         7010207 <tibble [3,57~ <S3: lm>   2.38e-135        -3578.     1.81  <S3: survre~  1.11e-16         -2043.      1.06  <S3: ~
 8         7010202 <tibble [2,73~ <S3: lm>   2.87e- 51        -2457.     1.25  <S3: survre~  5.20e- 2          -409.      0.240 <S3: ~
 9         7030005 <tibble [5,24~ <S3: lm>   3.36e-132        -3206.     1.62  <S3: survre~  0.               -1996.      1.03  <S3: ~
10         4010201 <tibble [1,41~ <S3: lm>   1.09e- 15         1217.    -0.578 <S3: survre~  0.                4763.     -2.34  <S3: ~
# ... with 66 more rows

Есть идеи, почему код ggplot захватывает все 77 строк оценок параметров, а не только оценки из каждой отдельной строки?

Кстати, моей первой попыткой было индексирование вложенных моделей напрямую с помощью

by_huc8_plots <- by_watershed_pvalue_slope %>%
  mutate(plot = map2(data, loc_major_basin, ~ ggplot(data = .x) +
                       geom_point(aes(x = y, y = combined_stube_conv100_conv60)) +
                       geom_abline(intercept = ols_model$coefficients[1], 
                                   slope = ols_model$coefficients[2], color = 'blue') +
                       geom_abline(intercept = cens_model$coefficients[1], 
                                   slope = cens_model$coefficients[2], color = 'green') +
                       ggtitle(.y) +
                       ylab('Clarity (cm)') +
                       xlab('Year')))

но это дало мне ошибку: "Столбцы intercept, slope должны быть 1d атомными векторами или списками", что подразумевает, что я не индексирую в структуре должным образом ... следовательно, я "вытаскиваю коэффициенты и поставить их в свои колонки "подход.

Заранее спасибо.

...