基于权重的空间网格抽样:按倾向分配观测值至网格单元
实现观测到空间网格的加权分配方案
核心思路是基于sim_spatial的sim_1值构建分配权重,让success=1的观测以与sim_1正相关的概率被分配到网格单元,success=0的观测可采用均匀分配或弱相关权重(根据需求调整)。以下是具体实现步骤和代码示例:
步骤1:预处理空间网格的权重
首先将sim_spatial中的sim_1转换为可用于抽样的概率权重,避免极端值导致权重失衡:
- 对sim_1做min-max缩放,将值映射到[0,1]区间
- 若sim_1存在负值,先偏移至非负区间(如加上最小值的绝对值)
- 将缩放后的值归一化,确保权重总和为1
步骤2:分组分配观测
将sim_data按success分为两组,分别采用不同抽样策略:
- success=1组:使用sim_1对应的权重进行加权随机抽样
- success=0组:可使用均匀权重(无空间偏好)或自定义弱相关权重(如sim_1的倒数)
R语言示例(假设用sf处理空间网格)
library(dplyr) library(sf) # 预处理空间网格,生成概率权重 sim_spatial <- sim_spatial %>% mutate( sim_1_scaled = (sim_1 - min(sim_1)) / (max(sim_1) - min(sim_1)), weight = sim_1_scaled / sum(sim_1_scaled) ) # 提取网格ID和对应权重 grid_ids <- sim_spatial$grid_id success1_weights <- sim_spatial$weight success0_weights <- rep(1/length(grid_ids), length(grid_ids)) # 均匀权重 # 为每个观测分配网格 sim_data <- sim_data %>% mutate( grid_id = case_when( success == 1 ~ sample(grid_ids, n(), replace = TRUE, prob = success1_weights), success == 0 ~ sample(grid_ids, n(), replace = TRUE, prob = success0_weights) ) ) # 可选:关联空间网格属性 sim_data_spatial <- sim_data %>% left_join(sim_spatial %>% st_drop_geometry(), by = "grid_id")
Python语言示例(用geopandas处理空间网格)
import pandas as pd import numpy as np import geopandas as gpd # 预处理空间网格,生成概率权重 sim_spatial['sim_1_scaled'] = (sim_spatial['sim_1'] - sim_spatial['sim_1'].min()) / (sim_spatial['sim_1'].max() - sim_spatial['sim_1'].min()) sim_spatial['weight'] = sim_spatial['sim_1_scaled'] / sim_spatial['sim_1_scaled'].sum() # 提取网格ID和对应权重 grid_ids = sim_spatial['grid_id'].values success1_weights = sim_spatial['weight'].values success0_weights = np.full(len(grid_ids), 1/len(grid_ids)) # 均匀权重 # 定义分配函数 def assign_grid(row): if row['success'] == 1: return np.random.choice(grid_ids, p=success1_weights) else: return np.random.choice(grid_ids, p=success0_weights) # 执行分配 sim_data['grid_id'] = sim_data.apply(assign_grid, axis=1) # 可选:关联空间网格属性 sim_data_spatial = sim_data.merge(sim_spatial.drop(columns='geometry'), on='grid_id')
优化与验证
- 若需要更强的空间自相关性,可对sim_1_scaled做幂变换(如
sim_1_scaled ** 2),放大高值单元的权重占比 - 若网格有容量限制,可采用迭代抽样:每次分配后减少对应网格的剩余容量,重新计算权重
- 分配完成后,可统计不同sim_1区间内success=1观测的占比,验证空间自相关性是否符合预期
内容的提问来源于stack exchange,提问作者Peter MacPherson
相关产品推荐
相关产品推荐

