как регрессии с категориальной переменной, которая имеет - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть фрейм данных (1000000 наблюдений) с 2 переменными y (заработная плата) и именами (122000 имен), и я хочу объяснить "y" с помощью "имен"

Я пробовал с R и Python

R

mod<-lm(y~names,data=pop1)

R: ошибка сообщения: невозможно выделить вектор размером 111,0 Гб

python

fit = ols('y ~ C(names)', data=pop1).fit()

MemoryError

1 Ответ

0 голосов
/ 25 сентября 2019

Ваша проблема (из-за ревущих комментариев) в том, что вам не хватает памяти для выполнения ваших вычислений.Еще один очень важный момент - почему вы хотите провести регрессию?

При наличии OLS, который включает только однофакторную переменную (фиктивную переменную) с несколькими уровнями, то, что вы на самом деле оцениваете, является средним по группе, в данном случае среднее значение y для каждого name.Большинство реализаций LS используют декомпозицию QR и создают матрицу контрастного дизайна, что означает, что пересечение является средним значением первой группы, в то время как другие коэффициенты являются средним различием, отличным от пересечения.Это имеет место в функции R lm.Но мы все еще можем получить коэффициенты, вычислить R-квадрат и т.д., если мы действительно хотим.Для иллюстрации приведен пример использования набора данных mtcars

data(mtcars)
fit <- lm(mpg ~factor(cyl), data = mtcars)
coefs <- tapply(mtcars$mpg, mtcars$cyl, mean)
intercept <- coefs[1]
beta <- c(intercept, coefs[-1] - intercept)
names(beta) <- c("(Intercept)", paste0("cyl", levels(factor(mtcars$cyl))[-1]))
beta
#output
(Intercept)        cyl4        cyl8 
  26.663636   -6.920779  -11.563636
coef(fit)
#output
 (Intercept) factor(cyl)6 factor(cyl)8 
   26.663636    -6.920779   -11.563636 
#output
all.equal(coef(fit), out, check.attributes = FALSE)
[1] TRUE

R-квадрат также рассчитывается.

Но опять же, что вы действительно хотите оценить?В этом случае линейная регрессия немного излишня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...