2013-05-29 4 views
0

У меня есть данные финансовой информации различных компаний, организованной компанией ticker. Я хотел бы вернуть одну из значений столбцов другим, сохраняя постоянную компанию. Есть ли простой способ записать это в ноте lm()?Коэффициенты регрессии по группам в dataframe R

Я попытался с помощью:

reg <- lmList(lead2.dDA ~ paudit1 + abs.d.GINDEX + logcapx + logmkvalt + 
       logmkvalt2|pp, data=reg.df) 

где pp является вектором названий компаний, но это возвращает коэффициенты, как если бы я регресс всех данных сразу (и не отделился от имени компании).

+2

Вызов 'lmList' выглядит так, как будто он сработал. Пожалуйста, предоставьте воспроизводимый пример того, что он не работает. –

ответ

2

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

reg <- lm(lead2.dDA ~ 0 + pp/(paudit1 + abs.d.GINDEX + logcapx + 
      logmkvalt + logmkvalt2), data=reg.df) 

Убедитесь, что pp является фактором и не числовой. Также обратите внимание, что общий перехват должен быть подавлен, чтобы это работало; в новой формулировке у нас есть другой «перехват» для каждой группы.

Пара комментариев:

  • Хотя коэффициенты регрессии, полученные таким образом, будет соответствовать приведенным на lmList(), следует отметить, что с lm() мы оцениваем только одну остаточную дисперсию во всех группах, в то время как lmList() бы оценить отдельные остаточные отклонения для каждой группы.
  • Как я уже упоминал в своем предыдущем комментарии, синтаксис lmList(), который вы дали, выглядит так, как будто он сработал. Поскольку вы говорите, что это не так, это заставляет меня ожидать, что действительно проблема - это что-то другое (хотя трудно сказать, что без воспроизводимого примера), и поэтому кажется вероятным, что решение, которое я разместил, по тем же неизвестным причинам. Если вы хотите получить более подробные рекомендации, предоставьте дополнительную информацию; помогите нам помочь вам.
+0

Спасибо Джейку! Меня не интересуют остаточные отклонения, поэтому метод lm() отлично работает. – user2303635

Смежные вопросы