“树”(tree)是一种数据结构,它最大的特点就是不含环状结构。假设对节点两两之间的距离赋予一定的权重值,使用连线将节点连成树结构,其中连线的权重值之和最小的树称为“最小生成树”(minimal spanning tree)。

小编在知乎上看到有博主使用图示的方法介绍了最小生成树的两种算法:Kruskal算法和Prim算法算法,链接如下:

https://zhuanlan.zhihu.com/p/136387766

在R语言中,可以通过spdep工具包中的函数实现最小生成树算法,此前我们已经用该包中的函数计算了莫兰指数:

spdep | 如何在R语言中计算空间自相关指数

mstree()函数

mstree()函数可以寻找最小生成树,它使用的是Prim算法:

mstree(nbw, ini = NULL)

该函数共有两个参数。nbw为空间权重矩阵,它的生成方法参见本号另外一篇推文spdep | 如何在R语言中计算空间自相关指数以及本文的下文。

ini为树的根节点。树是一种层次结构,上一层次的节点称为下一层次的父节点,下一层次的节点称为上一层次节点的子节点,一个父节点可对应多个子节点,而除根节点外每个节点都有且仅有一个父节点,根节点没有父节点。

空间权重矩阵

前面提及的推文已经介绍几个与空间权重矩阵相关的函数。

首先,需先生成空间邻接矩阵(只含邻接关系,不含权重)。例如,对于面要素而言:

library(spdep)
bhicv <- st_read(system.file("etc/shapes/bhicv.shp",package="spdep")[1], quiet=TRUE)
nb <- poly2nb(bhicv)
par(mar=c(0,0,0,0))
plot(st_geometry(bhicv))
plot(nb, st_geometry(bhicv), add = T,col = "red", lty = 2)

然后在空间邻接矩阵的基础上,生成空间权重矩阵。权重确定方法有B型、W型等类型,详见推文spdep | 如何在R语言中计算空间自相关指数。

nbw <- nb2listw(nb)

但是,以上空间权重矩阵的计算仅考虑空间连接性,而没有考虑其他更一般的属性权重特征,这一特征可以由nb2listw()函数的参数glist进行描述,该参数默认值为NULL。

nbcosts()函数可以根据属性数据计算节点之间更一般的连通权重,再向glist参数赋值,它的语法结构如下:

nbcosts(nb, data,method = c("euclidean", "maximum", "manhattan", "canberra","binary", "minkowski", "mahalanobis"),p = 2, cov, inverted = FALSE)
  • nb:空间邻接矩阵;

  • data:属性数据;

  • method:属性“距离”的计算方法。

data = data.frame(st_drop_geometry(bhicv[,5:8]))
nb.cost = nbcosts(nb, data)
nbw.2 <- nb2listw(nb, glist = nb.cost)

  • 如果仅考虑真实的距离作为权重,可以直接使用nbdists()函数计算空间邻接矩阵。

示例

由于mstree()函数仅有两个参数,因此得到空间权重矩阵后,再指定一个根节点,即可运行函数。

tree <- mstree(nbw.2, 2)par(mar=c(0,0,0,0))
plot(st_geometry(bhicv), border = grey(0.5))
plot(tree, coordinates(as(bhicv, "Spatial")),add = T, cex.circles = 0.005,cex.lab = 0.5, col = "red", lty = 2)

spdep | 最小生成树相关推荐

  1. R语言学堂推文索引-2022年12月

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 更新时间: 2022.12.12 0 前言 1 数据处理通识专辑 1.1 R语言基础与base-R 1.2 数据处理与tidy-R ...

  2. R语言学堂推文索引-v5.9.1

    更新时间: 2022.9.8 0 前言 1 数据处理通识专辑 1.1 R语言基础知识 1.2 数据管理(初阶) 1.3 各类型数据处理方案 1.4 数据管理(高阶) 1.5 数据获取方法 2 制表与可 ...

  3. R语言学堂推文索引-2022年10月

    专注系列化.高质量的R语言教程 (本号已支持快捷转载,无需白名单即可转载) 更新时间: 2022.10.21 0 前言 1 数据处理通识专辑 1.1 R语言基础知识 1.2 base-r/tidy-r ...

  4. R语言学堂推文索引-v5.8.1

    更新时间: 2022.8.6 0 前言 从本版开始,索引做了如下一些调整: 转载其他公众号的推文也编入到索引中,并标记"[转]"字样: 来自付费合集的推文标记"[付费]& ...

  5. R语言学堂推文索引-2022年11月

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 更新时间: 2022.11.22 0 前言 1 数据处理通识专辑 1.1 R语言基础与base-R 1.2 数据处理与tidy-R ...

  6. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  7. [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

    L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...

  8. 图的算法专题——最小生成树

    概要: Prim算法 Kruskal算法 1.Prim算法 算法流程: (1)对图G(V,E)设置集合S来存放已被并入的顶点,然后执行n次(2)(3) (2)每次从未并入顶点集合中选择与集合S最近的一 ...

  9. 【BZOJ1016】【Luogu P4208】 [JSOI2008]最小生成树计数 最小生成树,矩阵树定理

    蛮不错的一道题,遗憾就遗憾在数据范围会导致暴力轻松跑过. 最小生成树的两个性质: 不同的最小生成树,相同权值使用的边数一定相同. 不同的最小生成树,将其都去掉同一个权值的所有边,其连通性一致. 这样我 ...

最新文章

  1. MySQL数据库相关命令
  2. Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应...
  3. VTK:可视化之CornerAnnotation
  4. C++实现二分查找(附完整源码)
  5. oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及临时解决方案...
  6. Nagios 3.x 在线帮助中文版
  7. 求和符号上下的值怎么打_Excel快速求和的N种方法,一网打尽
  8. 关于双网卡电脑无法加入域或失去与域的联系的方法
  9. TypeError: tensor is not a torch image.
  10. 爬虫爬当当网书籍信息
  11. android bionic memcpy 汇编源码解析
  12. linux下复制文件并重命名,linux复制文件并修改文件名
  13. 小程序 背景图 repeat_小魔女诺贝3D射击/中文 | 电脑游戏
  14. Xray工具~(Web自动化漏洞检测)
  15. 常见的http状态码以及https的通讯过程和DNS的解析过程
  16. 双11临近,电脑无缘无故的弹出了双11天猫广告,必须追踪到底
  17. 决策引擎服务平台blaze_是Blaze数据服务还是LiveCycle数据服务?
  18. vue element upload组件 file-list的动态绑定
  19. Emacs Stardict
  20. 保健品不是药为什么能“治病”?

热门文章

  1. 阿里云的SLB,植入cookie和重写cookie有什么区别?
  2. 敏捷开发系列学习总结(12)——给Scrum Master的十个建议,你值得拥有
  3. Java基础学习总结(129)——Arrays.asList得到的List进行add和remove等操作出现异常解析
  4. 生产上线发现重大Bug的思考
  5. Linux学习总结(8)——VMware v12.1.1 专业版以及永久密钥
  6. 蠕虫病毒往往是通过进入计算机系统,2011年上海市高校计算机等级考试1级模拟卷题目...
  7. 一阶倒立摆的输入和输出是什么_了解一阶高通滤波器传递函数
  8. python钉钉扫码登录程序_使用python+django集成钉钉三方扫码登陆
  9. 年龄是计数还是计量_电子皮带秤是静态称重还是动态称重?
  10. 打车应用上马快递业务靠谱吗?