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