Использование lm () для линейной регрессии в длинном и широком формате - PullRequest
1 голос
/ 08 октября 2019

У меня есть данные в длинном формате, по одному наблюдению на строку. Данные были собраны в течение 4 периодов времени, и периоды времени сохраняются в переменной этапа: базовый уровень, предварительное финансирование, последующее финансирование, последующее.

Я хотел бы запустить линейную регрессию для посемо по агентству, используя lm () в течениекаждый период времени, например что-то вроде:

lm(posemo_baseline ~ agency_baseline, data = x)
lm(posemo_prefunded ~ agency_prefunded, data = x)
etc...

Должен ли я использовать reshaper или spread (), чтобы преобразовать это в широкий формат с новыми столбцами для posemo_baseline, posemo_prefunded, posemo_postfunded, posemo_confter, agency_baseline и т. д ... вЧтобы использовать lm ()? Или есть лучший способ передать это в lm ()?

Вот моя текущая структура данных:

# A tibble: 8 x 4
  name      stage       posemo  agency
  <chr>       <fct>       <dbl>  <dbl>
1 a         prefunded    3.12   3.11
2 b         prefunded    3.07   2.23
3 b         consequent   3.28   3.84
4 b         postfunded   2.04   2.36
5 a         baseline     3.62   4.28
6 a         consequent   3.31   3.77
7 a         postfunded   3.5    4.54
8 b         baseline     2.84   4.11

Ожидаемый результат - преобразование DF в столбцы с:

name, posemo_baseline, posemo_prefunded, posemo_postfunded, posemo_consequent, agency_baseline, agency_prefunded, agency_postfunded, agency_consequent

Тогда я бы запустил lm для каждого из четырех этапов агентства и posemo, например, lm (posemo_baseline ~ agency_baseline, data = x), lm (posemo_prefunded ~ agency_prefunded, data = x) и т. Д.?

1 Ответ

1 голос
/ 08 октября 2019

Если предположить, что ввод, воспроизводимый в примечании в конце, мы можем использовать аргумент subset=, равный lm, чтобы выбрать различные подмножества для использования, предоставляя список объектов lm, по одному на уровень stage:

Map(function(lv) lm(posemo ~ agency, DF, subset = stage == lv), levels(DF$stage))

Конечно, имея только два балла за цикл, мы не сможем оценить сигму, но если показанные здесь данные являются лишь подмножеством фактических данных, мы должны это сделать.

Если акцент делается на коэффициентах, то мы могли бы просто запустить одну lm, вложенную в стадию (но учтите, что для каждой будет использоваться объединенная сигма, а не отдельная сигма - коэффициенты будут одинаковыми).

lm(posemo ~ stage/(1 + agency) - 1, DF)

Мы также можем использовать nlme с pool = TRUE или pool = FALSE, в зависимости от того, хотим мы вычислять объединенную сигму или нет.

library(nlme)
lmList(posemo ~ agency | stage, DF, pool = FALSE)

Примечание

Lines <- "  name      stage       posemo  agency
1 a         prefunded    3.12   3.11
2 b         prefunded    3.07   2.23
3 b         consequent   3.28   3.84
4 b         postfunded   2.04   2.36
5 a         baseline     3.62   4.28
6 a         consequent   3.31   3.77
7 a         postfunded   3.5    4.54
8 b         baseline     2.84   4.11"
DF <- read.table(text = Lines, colClasses = list(name = "character"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...