Kcross.inhom与lohboot计算iso值不一致问题求助
非齐次交叉K函数与lohboot Bootstrap置信区间结果不一致的排查方案
以下是针对你遇到的Kcross.inhom直接计算结果与lohboot生成的bootstrap置信区间对应iso值不一致问题的排查和解决步骤:
1. 强制对齐r值序列
即使手动设置了r参数,仍需确保两个函数使用完全相同的r值数组:
- 先提取
Kcross.inhom生成的r值:ck = Kcross.inhom(temp, i = 'crime', j = 'center', lambdaI = model.crime) r_exact = ck$r - 再将该r值数组传入
lohboot:ckenv = lohboot(temp, fun='Kcross.inhom', i='crime', j='center', lambdaI=model.crime, r=r_exact) - 验证两者的r值是否完全一致:
all.equal(ck$r, ckenv$r)
2. 固定强度模型的使用逻辑
lohboot默认可能在每次bootstrap迭代中重新拟合强度模型,这会导致与原Kcross.inhom使用固定模型的结果差异。需强制使用预拟合的model.crime来预测强度,而非重新拟合:
# 用预拟合模型生成强度预测函数 lambda_fixed = function(locs) predict(model.crime, locations=locs, type="lambda") # 传入lohboot ckenv = lohboot(temp, fun='Kcross.inhom', i='crime', j='center', lambdaI=lambda_fixed, r=r_exact)
3. 统一边缘校正方法
确认两个函数使用的边缘校正参数一致(Kcross.inhom默认是"border"),避免因校正方法不同导致结果偏差:
ck = Kcross.inhom(temp, i='crime', j='center', lambdaI=model.crime, correction="border") ckenv = lohboot(temp, fun='Kcross.inhom', i='crime', j='center', lambdaI=lambda_fixed, r=r_exact, correction="border")
4. 消除bootstrap随机波动
26k行数据量较大,默认bootstrap迭代次数(通常100次)可能导致置信区间估计存在随机波动。增加迭代次数降低误差:
ckenv = lohboot(temp, fun='Kcross.inhom', i='crime', j='center', lambdaI=lambda_fixed, r=r_exact, correction="border", nsim=500)
5. 验证数据缩放一致性
检查rescale(temp, 10000)后的缩放是否在两个函数中保持一致:
- 确认
ck和ckenv结果中的r值单位是否统一(比如都是万米) - 若
lohboot内部对数据做了反向缩放,需手动同步缩放逻辑
内容的提问来源于stack exchange,提问作者palsi
相关产品推荐
相关产品推荐

