Вычисление нескольких фиксированных эффектов на большом наборе данных

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

Другие вопросы по тегам