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

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

dte   yr   id   v1   v2
 .   .   .   .   .
 .   .   .   .   .
 .   .   .   .   .

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

lm(v1 ~ factor(yr) + v2 - 1, data = df)

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

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

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

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

solve(crossprod(x), crossprod(x,y))

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

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

11
задан 李哲源 4 September 2016 в 18:47
поделиться