Почему у lm заканчивается память, а умножение матриц прекрасно работает для коэффициентов?

Я пытаюсь сделать фиксированные эффекты линейной регрессии с R. Мои данные выглядят как

<code>dte   yr   id   v1   v2
  .    .    .    .    .
  .    .    .    .    .
  .    .    .    .    .
</code>

Затем я решил просто сделать это, сделавyr фактор и использованиеlm:

<code>lm(v1 ~ factor(yr) + v2 - 1, data = df)
</code>

Однако, это, кажется, исчерпывает память. У меня есть 20 уровней в моем факторе иdf Это 14 миллионов строк, для хранения которых требуется около 2 ГБ, я запускаю это на машине с 22 ГБ, выделенной для этого процесса.

Затем я решил попробовать вещи старомодным способом: создать фиктивные переменные для каждого из моих летt1 вt20 при выполнении:

<code>df$t1 <- 1*(df$yr==1)
df$t2 <- 1*(df$yr==2)
df$t3 <- 1*(df$yr==3)
...
</code>

и просто вычислить:

<code>solve(crossprod(x), crossprod(x,y))
</code>

Это работает без проблем и дает ответ почти сразу.

Мне особенно любопытно, что же такое в lm, что заставляет его исчерпать память, когда я могу просто вычислить коэффициенты? Благодарю.

Ответы на вопрос(5)

Ваш ответ на вопрос