R fixest大样本Poisson固定效应模型估计及多线程问题求助
模型设定
需估计以下Poisson固定效应模型:
$$\log{\mathbb{E}[y_{i,j,t}]}=\beta_{A(i,j,t)}+\alpha_{i,t}+\gamma_{i,j}$$
其中$A(i,j,t)\in\mathbb{N}$为$(i,j,t)$观测对应的“时长(age)”,仅关注$\beta_{\cdot}$系数,无需关注其他固定效应。
首次尝试:内存溢出问题
初始代码如下:
library(readr) Data <- read_csv("FullData.csv", col_types = cols(UPC_PRICE = col_factor(), WEEK = col_factor(), MOVE = col_integer(), STORE_COM_CODE = col_factor(), AGE = col_factor())) library(fixest) Results = fepois(MOVE ~ AGE | STORE_COM_CODE^UPC_PRICE + STORE_COM_CODE^WEEK, Data, nthreads=28, verbose=1000)
执行时因fepois需为AGE生成完整虚拟矩阵,导致内存不足(数据集含约1.5亿条观测,AGE最大值约400)。
二次尝试:固定效应提取失败
修改代码将AGE纳入固定效应部分:
Results = fepois(MOVE ~ 1 | STORE_COM_CODE^UPC_PRICE + STORE_COM_CODE^WEEK + AGE, Data, nthreads=28, verbose=1000) FE = fixef(Results)
fepois执行成功,但调用fixef()时触发报错:
Problem getting FE, maximum iterations reached (1st order loop).NOTE: The fixed-effects are not regular, they cannot be straightforwardly interpreted. The number of references is only approximate.
即使设置iter=100000000仍无法解决,且我需要获取$\beta_{\cdot}$系数,不想遗漏该部分结果。
额外问题:多线程未生效
尽管设置了nthreads=28或调用setFixest_nthreads(28),fepois仍仅使用单线程,getFixest_nthreads()返回值为28。
解决方案建议
1. 正确获取$\beta_{\cdot}$系数
不要将AGE放入固定效应部分,改用fixest的i()函数处理分类变量,避免生成完整虚拟矩阵,大幅降低内存消耗:
Results = fepois(MOVE ~ i(AGE) | STORE_COM_CODE^UPC_PRICE + STORE_COM_CODE^WEEK, Data, nthreads=28, verbose=1000)
执行后直接通过summary(Results)即可查看$\beta_{\cdot}$系数,无需提取固定效应。
2. 修复多线程失效问题
fixest的多线程依赖OpenMP支持,先检查编译环境:
fixest::getFixest_compiler()
若输出包含OpenMP,说明支持多线程。注意:大规模数据集下,fepois的预处理步骤可能单线程执行,核心估计阶段才会启用并行,可通过verbose输出确认并行状态。
3. 固定效应提取报错的原因
当AGE与其他固定效应存在共线性时,会触发提取失败的报错。由于你无需关注其他固定效应,使用i(AGE)将其作为核心变量估计即可规避该问题。
内容的提问来源于stack exchange,提问作者cfp

