You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R fixest大样本Poisson固定效应模型估计及多线程问题求助

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:32:34