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

GLS与固定效应结合及pggls重复项问题求解

解决方案:带时间固定效应的GLS实现与数据问题处理

核心问题分析

你遇到的两个错误本质都是面板数据的个体-时间组合不唯一:

  1. 最初用Start+date_time作为index时,同一Start在同一时间可能对应多个End(不同疏散路径),导致(id-time)重复;
  2. 合并为location_id后仍报错,说明location_id+date_time的组合仍存在重复观测,或者date_time的格式问题导致伪重复。

方法一:清理数据并使用合法面板结构

1. 先处理重复观测

首先确认并清理location_id+date_time的重复项:

# 检查重复的路径-时间组合
dup_check <- table(paste(df$location_id, df$date_time), useNA = "ifany")
# 查看重复次数大于1的组合
dup_check[dup_check > 1]

# 处理重复:如果是冗余重复记录,直接去重
df_clean <- df[!duplicated(df[, c("location_id", "date_time")]), ]

# 如果是同一路径同一时间有多条记录(比如多次上报),按业务逻辑聚合(例如疏散人数求和、因变量取均值)
library(dplyr)
df_clean <- df %>%
  group_by(location_id, date_time, x) %>% # 包含回归自变量x,避免聚合丢失关键信息
  summarise(
    y = mean(y),          # 因变量按需求聚合,比如均值/总和
    Evac_num = sum(Evac_num),
    .groups = "drop"
  )

2. 转换date_time为时间类型(避免伪重复)

如果date_time是字符型,可能存在格式不一致(如空格、日期格式错误)导致的伪重复,先转换为标准时间类型:

df_clean$date_time <- as.POSIXct(df_clean$date_time, format = "%d-%m-%Y %H:%M")

3. 运行带时间固定效应的GLS

用清理后的数据执行pggls:

library(plm)
fgls_1 <- pggls(
  y ~ x, 
  data = df_clean, 
  model = "within", 
  effect = "time", 
  index = c("location_id", "date_time")
)
summary(fgls_1)

方法二:手动添加时间固定效应到GLS(无需严格面板结构)

如果不想依赖plm的面板要求,可以直接在加权GLS中加入时间虚拟变量,或用lfe包做加权固定效应,更灵活:

方式1:手动加入时间虚拟变量

# 第一步:估计带时间固定效应的OLS,得到残差
r1_fe <- lm(y ~ x + factor(date_time), data = df)
df$resi <- r1_fe$residuals

# 第二步:估计异方差的方差函数(可根据需求加入x或时间变量)
varfunc.ols1 <- lm(log(resi^2) ~ x, data = df)
df$varfunc <- exp(varfunc.ols1$fitted.values)

# 第三步:带时间固定效应的加权GLS
r1.gls_fe <- lm(y ~ x + factor(date_time), weights = 1/sqrt(varfunc), data = df)
summary(r1.gls_fe)

方式2:用lfe包高效实现加权固定效应

当date_time的水平较多时,felm比lm更高效:

library(lfe)
# 计算权重
weights <- 1/sqrt(df$varfunc)
# 加权时间固定效应回归
fe_gls <- felm(y ~ x | date_time, data = df, weights = weights)
summary(fe_gls)

关键思路说明

  • 你的核心需求是控制时间固定效应+解决异方差,两种思路都可行:
    1. 面板GLS(pggls):要求严格的个体-时间唯一面板结构,适合长期面板数据;
    2. 加权固定效应(手动加虚拟变量或felm):无需严格面板结构,适合存在重复观测的截面-时间混合数据。
  • 不需要拆分日期和时间列,只要保证date_time的格式统一、组合唯一即可。

内容的提问来源于stack exchange,提问作者beaner0228

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:57:25