“树”(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. 编写测试用例的方法_适合小白的测试用例编写方法,一看就会!
  2. 《智能家居》培训第六天------2019-01-10
  3. win7 64安装工商网银U盾软件
  4. web前端是什么?如何能成为一名合格的前端开发工程师?
  5. discuz! X3.2 自定义后台门户模块模板里的标签
  6. Macx OS下没有GCC问题
  7. Flutter 自定义弹幕展示样式
  8. c语言ftell函数,C语言中ftell函数的使用方法
  9. linux tar解压bin文件,linux下 tar解压 gz解压 bz2等各种解压文件使用方法
  10. 计算机进pe按键,win10下进入pe系统操作方法
  11. word中 设置标题级别 的 快捷键
  12. 2011年安徽省公务员考试行测真题(3)
  13. 计算机课程给你最大的收获,计算机课程心得体会.doc
  14. 机器人运动控制-水下机器人
  15. 托福高频真词List19 // 附托福TPO阅读真题
  16. python面试项目案例
  17. 南邮计算机科学与技术专业排名,南京邮电大学优势专业排名,2021年南京邮电大学最好的专业排名...
  18. win系统JDK卸载和彻底删除
  19. 常用百度搜索、淘宝搜索、360搜索代码
  20. Camstar 开发:缓存的作用与分析

热门文章

  1. 分布式文件系统-HDFS(   HDFS全称是Hadoop Distributed System)
  2. Linux学习总结(33)——Linux Java启动关闭bash脚本
  3. spark 存入hbase_Spark DataFrame写入HBase的常用方式
  4. hive退出命令_从零开始学习大数据系列(五十五)使用Hive命令行及内置服务
  5. Docker 私有仓库搭建
  6. 《工业控制网络安全技术与实践》一2.2 分布式控制系统
  7. centos 6.5 zabbix 离线安装历程
  8. string 与BigDecimal互转
  9. Spring学习4-面向切面(AOP)之Spring接口方式
  10. CentOS6离线bash漏洞—再修复方法