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