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

使用splm包spml函数估计空间面板模型时遇对象长度不匹配错误

解决空间面板模型object lengths differ报错问题

问题根源

报错的核心原因是:你基于包含所有年份的面板空间数据(共690×7=4830行)生成了邻接矩阵,但空间权重矩阵应该对应690个截面街区组(地理邻接关系不随年份变化),两者长度不匹配导致lag.listw函数报错。

修复步骤及代码

1. 提取截面空间数据(单一年份的街区组)

从面板数据中提取唯一的街区组空间信息,地理邻接关系不会随年份改变,只需保留每个街区组的一个空间实例即可:

# 提取2013年的截面空间数据,确保每个街区组只出现一次
bp_sf_cross <- bp_sf_subset[bp_sf_subset$year == 2013, ]

# 若街区组ID在全数据中唯一,也可以用去重方法:
# bp_sf_cross <- bp_sf_subset[!duplicated(bp_sf_subset$block_group), ]

2. 基于截面数据重新生成空间权重矩阵

# 生成邻接矩阵
nb2 <- poly2nb(bp_sf_cross, queen=TRUE)
# 为相邻多边形分配权重(行标准化)
lw2 <- nb2listw(nb2, style="W", zero.policy=TRUE)
# 转换为适合面板模型的对称权重矩阵
W <- listw2U(lw2)

3. 重新运行空间面板模型

# 估计空间面板数据模型
model <- spml(formula = viol_index_crime_rate_rep ~ 
                        ice_index + 
                        unemployment_rate_pop + 
                        poverty_rate_hh,
               data = bp_sf_subset,
               index = c("block_group","year"),
               model = "within",
               lag=TRUE,
               spatial.error = "b",
               effect = "twoways",
               listw = W)

验证建议

  • 检查权重矩阵维度:运行dim(W)应返回690 690,与你的街区组数量一致。
  • 确认面板数据中每个block_group在各年份都有完整观测,无重复或缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:22:29