Dlaczego lm zabrakło pamięci, a mnożenie macierzy działa dobrze dla współczynników?

Próbuję zrobić regresję liniową z ustalonymi efektami z R. Moje dane wyglądają

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

Zdecydowałem się po prostu to zrobićyr czynnik i wykorzystanielm:

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

Jednak wydaje się, że zabrakło pamięci. Mam 20 poziomów w moim czynniku idf jest 14 milionów wierszy, których przechowywanie zajmuje około 2 GB, używam tego na komputerze z 22 GB przeznaczonym na ten proces.

Postanowiłem więc spróbować rzeczy w staromodny sposób: tworzyć fikcyjne zmienne dla każdego z moich latt1 dot20 wykonując:

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

i po prostu oblicz:

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

To działa bez problemu i daje odpowiedź niemal natychmiast.

Jestem szczególnie ciekawy, co takiego jest w lm, co sprawia, że ​​zabrakło mu pamięci, gdy mogę obliczyć współczynniki w porządku? Dzięki.

questionAnswers(5)

yourAnswerToTheQuestion