单双变量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.总结

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

相关推荐
牛奔17 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
geovindu17 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的17 小时前
汇编——JCC指令
开发语言·汇编·网络安全
mayaairi18 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
kite012119 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
l1564694820 小时前
突围!图文混合知识库难以解析,Kimi-K3 原生视觉架构深耕知识工作,DMXAPI 统一接口,缩短项目开发周期
java·大数据·开发语言
charlie11451419121 小时前
现代C++工程实践 WeakPtr 实战(三):WeakPtrFactory 与「最后成员」惯用法
开发语言·c++·开源项目·现代c++
IT小盘1 天前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
不如语冰1 天前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
阿童木写作1 天前
Python批量翻译亚马逊商品图实战教程
开发语言·python·xcode