Ваша проблема (из-за ревущих комментариев) в том, что вам не хватает памяти для выполнения ваших вычислений.Еще один очень важный момент - почему вы хотите провести регрессию?
При наличии 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-квадрат также рассчитывается.
Но опять же, что вы действительно хотите оценить?В этом случае линейная регрессия немного излишня.