Цикл для создания нескольких фреймов данных из фрейма данных о населении - PullRequest
0 голосов
/ 21 мая 2018

Предположим, у меня есть фрейм данных с именем pop, и я хочу разделить этот фрейм данных на категориальную переменную под названием replicate.Эта копия состоит из 110 категорий, и я хочу провести анализ каждого фрейма данных, а затем результаты каждого из них должны быть объединены для создания нового фрейма данных.Другими словами, предположим, что это копия i, тогда я хочу создать фрейм данных i и выполнить логистическую регрессию для i и сохранить бета 0 для i.Все бета 0 будут объединены, чтобы создать таблицу со всеми бета 0 для повторения 1-110.Я знаю, что это полный рот, но заранее спасибо.

1 Ответ

0 голосов
/ 21 мая 2018

Поскольку вы не предоставили некоторые данные, я буду использовать mtcars.Вы можете использовать split, чтобы разделить data.frame по категориальному значению.Комбинируя это с map и tidy из пакетов purrr и broom, вы можете создать фрейм данных со всеми бета-версиями за один раз.

Так что получается 1: split data.frame,2: запустить регрессионную модель 3: привести в порядок данные, чтобы вывести коэффициенты и создать data.frame из данных.

Вам нужно будет настроить это в соответствии с вашим data.frame и реплицировать переменную.Метла может справиться с логистической регрессией, поэтому все должно получиться.

library(purrr)
library(broom)

my_lms <- mtcars %>%
  split(.$cyl) %>%
  map(~ lm(mpg ~ wt, data = .x)) %>%
  map_dfr(~ tidy(.))

my_lms
         term  estimate std.error statistic      p.value
1 (Intercept) 39.571196 4.3465820  9.103980 7.771511e-06
2          wt -5.647025 1.8501185 -3.052251 1.374278e-02
3 (Intercept) 28.408845 4.1843688  6.789278 1.054844e-03
4          wt -2.780106 1.3349173 -2.082605 9.175766e-02
5 (Intercept) 23.868029 3.0054619  7.941551 4.052705e-06
6          wt -2.192438 0.7392393 -2.965803 1.179281e-02

РЕДАКТИРОВАТЬ

my_lms <- lapply(split(mtcars, mtcars$cyl), function(x) lm(mpg ~ wt, data = x))
my_coefs <- as.data.frame(sapply(my_lms, coef))
my_coefs
                    4         6         8
(Intercept) 39.571196 28.408845 23.868029
wt          -5.647025 -2.780106 -2.192438

#Or transpose the coefficents if you want column results.
t(my_coefs)
  (Intercept)        wt
4    39.57120 -5.647025
6    28.40884 -2.780106
8    23.86803 -2.192438
...