Вычисление нескольких фиксированных эффектов на большом наборе данных
Я пытаюсь выполнить регрессию с фиксированными эффектами для двух факторных переменных в наборе данных CSV, содержащем более 4000000 строк. Эти переменные могут соответственно принимать около 140000 и 50000 различных целочисленных значений.
Сначала я попытался выполнить регрессию с помощью пакетов biglm и ff для R следующим образом на машине с Linux с 8 Гб памяти; однако, похоже, что для этого требуется слишком много памяти, потому что R жалуется на необходимость выделить вектор размером, превышающим максимум на моей машине.
library(biglm)
library(ff)
d <- read.csv.ffdf(file='data.csv', header=TRUE)
model = y~factor(a)+factor(b)-1
out <- biglm(model, data=d)
Некоторые онлайн-исследования показали, что поскольку факторы загружаются в память с помощью ff, последнее существенно не улучшит использование памяти, если присутствует много значений факторов.
Кто-нибудь знает о каком-либо другом способе выполнения вышеупомянутой регрессии для набора данных с величиной, которую я описал, без необходимости прибегать к машине со значительно большим объемом памяти?
2 ответа
Вам стоит попробовать пакет lfe, он был разработан именно для этой цели:
library(lfe)
...
out <- felm(y ~ 0|a+b, data=d)
fe <- getfe(out)
Доказательство этого метода можно найти здесь: http://www.sciencedirect.com/science/article/pii/S0167947313001266
Вот статья об этом в R-журнале: http://journal.r-project.org/archive/2013-2/gaure.pdf
Вы можете получить то же математическое значение фиксированных эффектов, если будете унижать переменные (по категориям). Таким образом, вместо того, чтобы найти константу для каждого манекена, вы унижаете ее. и унижение будет очень быстрым, поскольку оно будет векторизовано.
Edit1: см. Green 2012 p.400-401 для математического доказательства.