Я пытаюсь сделать линейную регрессию с фиксированными эффектами с 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, из-за чего ему не хватает памяти, когда я могу просто вычислить коэффициенты? Спасибо.