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

在R中使用spatialprobit模型遇矩阵维度不匹配错误的解决咨询

解决SAR Probit模型的矩阵维度不匹配错误

错误原因

你生成的sparsematrix是83×83的区域级空间权重矩阵(对应83个区域),但数据集df_probit有125360行(每个区域包含多个观测值)。sarprobit函数要求空间权重矩阵的维度必须与数据集行数完全一致(即125360×125360),维度不匹配导致矩阵运算报错。

解决步骤

1. 确保数据包含区域标识列

df_probit必须有一列(比如region_name或region_id),用于将每一行观测关联到对应的83个区域,且该列的值要与geo_data$NL_NAME_1完全匹配。

2. 生成匹配观测行数的块对角空间权重矩阵

将区域级的83×83权重矩阵扩展为块对角稀疏矩阵,每个区域的权重块会重复对应到该区域的所有观测,最终矩阵维度为125360×125360。

具体代码如下:

# 给geo_data中的区域分配唯一索引
geo_data$region_idx <- 1:nrow(geo_data)

# 将区域索引匹配到df_probit(替换"your_region_column"为你数据中的区域列名)
df_probit <- merge(df_probit, geo_data[, c("NL_NAME_1", "region_idx")],
                   by.x = "your_region_column", by.y = "NL_NAME_1", all.x = TRUE)

# 计算每个区域的观测数量
n_per_region <- table(df_probit$region_idx)

# 生成块对角权重矩阵
library(Matrix)
block_W <- bdiag(lapply(1:83, function(i) {
  # 将第i个区域的权重行重复n_per_region[i]次,形成对应观测的权重行
  matrix(W[i, ], nrow = n_per_region[as.character(i)], ncol = 83, byrow = TRUE)
}))

# 转换为dgCMatrix格式的稀疏矩阵
sparsematrix <- as(block_W, "dgCMatrix")

3. 重新运行SAR Probit模型

使用新生成的sparsematrix重新执行模型拟合:

sarprobit.fit1 <- sarprobit(MALOIM_6 ~ 
                 region_money+number_child + VZR_NRAB_c +   
                 R_2_0 + R_5_2 + PENS_c + INV_c + R_1_1+NP_SEM + 
                 R_1_1_1, sparsematrix, df_probit)

额外检查

  • 确认df_probit中没有缺失的区域匹配(即merge后没有NA值)
  • 检查n_per_region的总和是否等于125360,确保所有观测都被正确分配到区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:15