spatstat中数值标记双变量标记变异函数分析方法及代码问询
双变量数值标记变异函数分析方案
要使用markvario对两个带数值标记(胸径DBH)的点模式X1和Y2进行双变量对比,需先将两者合并为多类型点模式,再通过markvario的交叉分析参数实现,具体步骤如下:
1. 预处理:合并点模式并添加类型标记
给两个点模式添加类型标签以区分不同径级组,再合并为单一的多类型点模式:
# 为X1和Y2添加类型标记与DBH的组合标记 X1$marks <- data.frame(type = "GroupX", DBH = marks(X1)) Y2$marks <- data.frame(type = "GroupY", DBH = marks(Y2)) # 合并两个点模式 combined_ppp <- superimpose(GroupX = X1, GroupY = Y2)
2. 计算双变量交叉标记变异函数
使用markvario的i和j参数指定对比的两组,mark参数指定分析的数值标记(DBH):
# 计算GroupX与GroupY之间的交叉标记变异函数 cross_markvario <- markvario(combined_ppp, i = "GroupX", j = "GroupY", mark = "DBH", normalise = TRUE) # 绘制结果 plot(cross_markvario, main = "双变量交叉标记变异函数(GroupX vs GroupY)")
3. 信封检验(显著性分析)
若需验证相关性的显著性,结合envelope函数做蒙特卡洛模拟检验,模拟时保持点位置不变、置换标记值生成零假设:
# 生成交叉标记变异函数的信封检验 cross_envelope <- envelope(combined_ppp, markvario, i = "GroupX", j = "GroupY", mark = "DBH", normalise = TRUE, nsim = 199, simulate = expression(rlabel(combined_ppp, labels = marks(combined_ppp)$DBH, permute = TRUE)), savefuns = TRUE, savepatterns = TRUE) # 绘制信封检验结果 plot(cross_envelope, main = "双变量交叉标记变异函数信封检验")
关键说明
markvario默认的半方差计算函数就是function(m1, m2) { (m1 - m2)^2 / 2 },无需额外指定f参数;- 交叉标记变异函数衡量GroupX的DBH与GroupY的DBH在不同空间距离下的半方差,数值越低说明该距离下两组径级的相关性越强;
- 信封检验中,若观测曲线落在模拟包络之外,说明该距离下的相关性具有统计学显著性。
内容的提问来源于stack exchange,提问作者jingyu
相关产品推荐
相关产品推荐

