单双变量Ripley’s K函数 R 语言实现

素材汇总(免费下载或可通过主页的联系方式添加好友获取):【免费】单双变量Ripley'sK函数R语言实现(CSDN分享)资源-CSDN下载

1.使用方式

不再过多介绍Ripley's K函数,详情可参考文章开头提供的论文素材,知网引用格式为:1赖冠中.利用Ripley's K函数法的制造业微观企业数据空间集聚分析J.地理空间信息,2026,24(3):61-66.

,下面主要介绍R语言的使用:

R 复制代码
library(sf)
library(spatstat)
library(dplyr)

colors()

POIZZYppp <- as.ppp(st_read("E:\\论文\\K函数\\矢量数据\\BY_POI_制造业_分类.shp",query = "SELECT X7DL FROM \"BY_POI_制造业_分类\""))
POIZZY_Fppp <- as.ppp(st_read("E:\\论文\\K函数\\矢量数据\\BY_POI_制造业_分类.shp",query = "SELECT X7DL FROM \"BY_POI_制造业_分类\" WHERE  X7DL = 'PM'" ) )

POIZZYMJDppp <- as.ppp(st_read("E:\\论文\\K函数\\矢量数据\\BY_POI_制造业_分类.shp" ,query = "SELECT XYSMJ FROM \"BY_POI_制造业_分类\"" ) )
POIZZY_FMJDppp <- as.ppp(st_read("E:\\论文\\K函数\\矢量数据\\BY_POI_制造业_分类.shp",query = "SELECT XYSMJ FROM \"BY_POI_制造业_分类\" WHERE  XYSMJ = 'Ci'" ) )

wd3 <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\原始建_Dis全制_聚_Sim2.shp"))
areagywin <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\工业集聚区gj2000_Copy_Sim.shp"))
areagywin2 <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\工业集聚区gj2000_Copy_Sim2.shp"))
areagywin3 <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\工业集聚区gj2000_Copy_Sim3.shp"))
areagywin4 <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\工业集聚区gj2000_Copy_Sim4.shp"))
areagywin5 <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\工业集聚区gj2000_Copy_Buf_Sim_Eli1.shp"))
areagywin6 <- as.owin(st_read("E:\\论文\\K函数\\矢量数据\\工业集聚区gj2000_Copy_Buf_Sim_Eli2.shp"))

POIZZYpppwin3 <- POIZZYppp[areagywin3]
POIZZYpppwin5 <- POIZZYppp[areagywin5]
POIZZYpppwin6 <- POIZZYppp[areagywin6]
POIZZY_Fpppwin6 <- POIZZY_Fppp[areagywin6]

POIZZYMJDpppwin3 <- POIZZYMJDppp[wd3]
POIZZY_FMJDpppwin3 <- POIZZY_FMJDppp[wd3]
POIZZYMJDpppwin6 <- POIZZYMJDppp[areagywin6]
POIZZY_FMJDpppwin6 <- POIZZY_FMJDppp[areagywin6]

GYMJD_Lest <- Lest(POIZZYMJDpppwin6,correction="translation",r = seq(0, 8000, length.out = 51))
EGYMJD_FCi_Lest <- envelope(POIZZY_FMJDpppwin6, Lest, nsim=39,nrank = 1,correction="translation",r = seq(0, 8000, length.out = 801))
plot(GYMJD_Lest,.-r~r,xlim =c(0,8000))
plot(EGYMJD_FTi_Lest,.-r~r,xlim =c(0,8000))
plot(GYMJD_Lest,.-r~r,xlim =c(0,8000),ylim =c(-200,1500),legend=FALSE)
plot(EGYMJD_FLi_Lest,.-r~r,xlim =c(0,8000),ylim =c(-200,1500), col=c("magenta"   , "red",  "gray",  "gray"),shadecol=rgb(1, 0, 1, alpha = 0.2),legend=FALSE,add=TRUE)
dev.copy(png, file = "E:\\论文\\K函数\\出图\\kest\\GYMJDall2.png",width = 2400, height = 1800, res = c(300, 300))
dev.off()

POIZZYMJDpppms <- POIZZYMJDppp %mark% factor(st_read("E:\\论文\\K函数\\矢量数据\\BY_POI_制造业_分类.shp",query = "SELECT XYSMJ FROM \"BY_POI_制造业_分类\"")$"XYSMJ")
marks(POIZZYMJDpppms)
POIZZYMJDpppwin3 <- POIZZYMJDpppms[wd3]
marks(POIZZYMJDpppwin3)
E_FTiCi_Lcross <- envelope(POIZZYMJDpppwin3,Lcross,funargs=c("Ti","Ci"), nsim=39,nrank = 1,correction="translation",r = seq(0, 8000, length.out = 801))
plot(EMJD_FCi_Lest,.-r~r,xlim =c(0,8000),ylim =c(-200,2000), col=c("gold"  , "red",  "gray",  "gray"),shadecol=rgb(1, 0.843, 0, alpha = 0.2),legend=FALSE,add=TRUE)
plot(E_FLiTi_Lcross,.-r~r,xlim =c(0,8000))
plot(E_FTiCi_Lcross,.-r~r,xlim =c(0,8000),ylim =c(-200,2000), col=c( "green"  , "red",  "gray",  "gray"),shadecol=rgb(0, 1, 1, alpha = 0.2),legend=FALSE,add=TRUE)
dev.copy(png, file = "E:\\论文\\K函数\\出图\\kest\\MJDLcrossall2.png",width = 2400, height = 1800, res = c(300, 300))
dev.off()


E6_Lest <- envelope(POIZZYpppwin6, Lest, nsim=39,nrank = 1,correction="translation",r = seq(0, 8000, length.out = 801))
E_F6PM_Lest <- envelope(POIZZY_Fpppwin6, Lest, nsim=39,nrank = 1,correction="translation",r = seq(0, 8000, length.out = 801))

plot(EMJD_Lest,.-r~r,xlim =c(0,8000))
plot(E_F6PM_Lest,.-r~r,xlim =c(0,8000))

plot(E6_Lest,.-r~r,xlim =c(0,8000))
plot(E_F6PM_Lest,.-r~r,xlim =c(0,8000))

for (i in c("AF","TC","MC","WF","PP","ME","PM")) { 
    plot(get(paste0("E_F6", i,"_Lest")),.-r~r,xlim =c(0,8000))
}

plot(E_Lest,.-r~r,xlim =c(0,8000),ylim =c(-1500,2500))
plot(E6_Lest,.-r~r,xlim =c(0,8000),ylim =c(-1500,2500), col=c("black" , "red",  "gray",  "gray"),shadecol=rgb(0, 0, 0, alpha = 0.2),legend=FALSE)
plot(E_F6PM_Lest,.-r~r,xlim =c(0,8000),ylim =c(-1500,2500), col=c("cyan" , "red",  "gray",  "gray"),shadecol=rgb(0, 1, 1, alpha = 0.2),legend=FALSE,add=TRUE)

dev.copy(png, file = "E:\\论文\\K函数\\出图\\kest\\GYall2.png",width = 2400, height = 1800, res = c(300, 300))
dev.off()

POIZZYpppms <- POIZZYppp %mark% factor(st_read("E:\\论文\\K函数\\矢量数据\\BY_POI_制造业_分类.shp",query = "SELECT X7DL FROM \"BY_POI_制造业_分类\"")$"X7DL")
POIZZYpppmswin6 <- POIZZYpppms[areagywin6]


E_FAFTC_Lcross <- envelope(POIZZYpppmswin6,Lcross,funargs=c("AF","TC"), nsim=39,nrank = 1,correction="translation",r = seq(0, 8000, length.out = 801))
plot(E_FAFTC_Lcross ,.-r~r,xlim =c(0,8000))

df <-as.data.frame(E_FLcross)
head(df,10)

主要使用library(sf)、library(spatstat)、library(dplyr)中的函数,其中关键函数是envelope,需要注意的是使用as.owin转换为窗口格式以及置信区间的透明绘制。

单变量模式图1

双变量模式图2

其中横坐标r 为搜索阈值,纵坐标使用见下图3:

图3

2.总结

如果觉得有帮助,欢迎使用,如有疑问或交流可联系主页的联系方式。

相关推荐
贪玩的蛋挞18 小时前
C#与闭包
开发语言·c#
端庄的战斗机19 小时前
javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
开发语言·javascript·设计模式
Full Stack Developme19 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
C语言小火车21 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
北冥you鱼21 小时前
abigen 最佳实践:从入门到精通,高效生成 Go 语言合约绑定
开发语言·golang·区块链
ALex_zry1 天前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
她说..1 天前
Java 默认值设置方式
java·开发语言·后端·springboot
忧郁的紫菜1 天前
基础实现:单篇 Markdown 转 Word
开发语言·c#·word
甜美的小天鹅1 天前
Swifter C#之inline还是不inline,这是个问题
开发语言·c#
小短腿的代码世界1 天前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构