簡體   English   中英

在R中應用固定影響因子會破壞回歸

[英]Applying fixed effects factor in R breaks the regression

我試圖在R中運行固定效果回歸。當我運行線性模型而未應用固定效果因子時,該模型可以正常工作。 但是,當我應用因子-這是用戶ID的數字代碼時,會出現以下錯誤:

Error in rep.int(c(1, numeric(n)), n - 1L) : cannot allocate vector of length 1055470143

我不確定錯誤的含義,但我擔心這可能是在R中正確編碼變量的問題。

我認為這是更多的統計信息,較少的編程問題,原因有兩個:

首先,我不確定您使用的是橫截面數據還是面板數據。 如果使用橫截面數據,則無法控制30000個個體(當然,它們會增加變化)。

其次,如果您使用的是面板數據,則R中有不錯的程序包(例如plm程序包)可以進行這種計算。

一個例子:

set.seed(42)
DF <- data.frame(x=rnorm(1e5),id=factor(sample(seq_len(1e3),1e5,TRUE)))
DF$y <- 100*DF$x + 5 + rnorm(1e5,sd=0.01) + as.numeric(DF$id)^2

fit <- lm(y~x+id,data=DF)

R會話需要近2.5 GB的RAM(如果您添加OS所需的RAM,這比許多PC可用的RAM還多),並且需要一些時間才能完成。 結果非常無用。

如果您沒有遇到RAM限制,則可能會受到向量長度的限制(例如,如果您具有更多的因子水平),尤其是在使用舊版本的R時。

怎么了?

lm第一步就是使用model.matrix函數創建設計矩陣。 這是因素發生的較小示例:

model.matrix(b~a,data=data.frame(a=factor(1:5),b=2))

#   (Intercept) a2 a3 a4 a5
# 1           1  0  0  0  0
# 2           1  1  0  0  0
# 3           1  0  1  0  0
# 4           1  0  0  1  0
# 5           1  0  0  0  1
# attr(,"assign")
# [1] 0 1 1 1 1
# attr(,"contrasts")
# attr(,"contrasts")$a
# [1] "contr.treatment"

看看n個因子水平如何產生n-1個虛擬變量? 如果您有許多因子水平和許多觀察結果,則此矩陣將變得巨大。

你該怎么辦?

我很確定,您應該使用混合效果模型。 有兩個在R中實現線性混合效果模型的重要軟件包,軟件包nlme和更新的軟件包lme4。

library(lme4)

fit.mixed <- lmer(y~x+(1|id),data=DF)
summary(fit.mixed)

Linear mixed model fit by REML 
Formula: y ~ x + (1 | id) 
Data: DF 
    AIC     BIC  logLik deviance REMLdev
1025277 1025315 -512634  1025282 1025269
Random effects:
  Groups   Name        Variance   Std.Dev. 
id       (Intercept) 8.9057e+08 29842.472
Residual             1.3875e+03    37.249
Number of obs: 100000, groups: id, 1000

Fixed effects:
             Estimate Std. Error t value
(Intercept) 3.338e+05  9.437e+02   353.8
x           1.000e+02  1.180e-01   847.3

Correlation of Fixed Effects:
  (Intr)
x 0.000

這需要很少的RAM,計算速度很快,並且是更正確的模型。

看看隨機攔截如何解釋大部分差異?

因此,您需要研究混合效應模型。 有一些不錯的出版物,例如Baayen,Davidson,Bates(2008)解釋了如何使用lme4。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM