多元回归树分析Multivariate Regression Trees,MRT
liuian 2025-09-14 22:28 28 浏览
多元回归树(Multivariate Regression Trees,MRT)是单元回归树的拓展,是一种对一系列连续型变量递归划分成多个类群的聚类方法,是在决策树(decision-trees)基础上发展起来的一种较新的分类技术。同一般回归模型一样,MRT也需要因变量(响应变量,群落学中一般是物种数据)和自变量(预测变量,一般为环境因子数据)。不同的是, MRT不需要在响应变量和预测变量之间建立参数估计的回归关系,而是以预测变量为分类节点,利用二歧式的分割法(binary split), 将由响应变量定义的空间(样方)逐步划分为尽可能同质的类别,每一次划分都由某一预测变量(环境因子)的一个最佳划分值来完成, 将响应变量定义的空间(样方)分成两个部分(也叫节点, node),最佳划分原则是让两个节点内部的差异尽量小,节点间的差异尽量大。
MRT是一种强大而可靠的分类方法,即使被划分的变量含有缺失值,或者响应变量与解释变量是非线性关系,或解释变量之间存在高阶相互关系,经过交叉验证等一系列筛选过程,多元回归树都能够发挥很好的预测作用。
多元回归树结果通常用一个倒立的树状结构图表示,上面的节点为分支点,分枝点是能够使得两分枝的响应变量的变异最大的预测变量的某个值,使得各节点(分类群)内样本的总方差最小或由于样本数量过少无法继续分层,这里的终节点为叶,而分枝开始的节点被称为根。在大量的类群划分方案中,通常保留“最具预测能力的”划分方案。
回归树建模的原理与方法
多元回归树的计算通常分两步来完成,最初生成一颗较大的树,然后通过统计估计来删除底部的一些节点对树进行修剪,以防止过度拟合并保留最佳的分类方案。
1. 数据约束划分
在预测变量(连续型或分类变量)的控制下,通过持续的(或递归的)分层将响应变量(连续型变量)不断分类(亦即分枝),其划分的依据为这一系列预测变量的解释变量。使得各节点(分类群)内样本的总方差最小或由于样本数量过少无法继续分层。此时,保留的是相对误差(relative error, RE)最小的回归树,但是,这种情况下,回归树只具有解释功能,而缺乏预测功能。相对误差为所有叶子组哪平方和除以原始数据的平方和,也就是回归树不能解释的方差比例。
2. 交叉验证和回归树的剪枝
为获得最最具预测能力的分类方案,第一步产生的回归树还需要通过剪枝处理。回归树的预测能力可以用其预测误差进行评估。评价的标准是既要保证回归树包含了足够的信息,又要把并不重要的枝节去掉。比较著名的规则就是“1SE”(1标准差)准则,其意思是: 首先要保证交叉验证误差(CVRE,通过交叉验证获得)尽量小,但不一定要取最小值, 而是允许它在“最小误差”加一个相应标准差的范围内,然后在此范围内选取尽量小的复杂性参量,进而以它为依据进行剪枝。这个规则体现了兼顾树的规模(复杂性)和误差大小的思想。
交叉验证通常是利用原始数据的一部分(称为训练集 training set)构建一颗树,剩下另一部分(称为验证集 test set)验证训练集构建的树的准确性,具有良好预测能力的回归树会将验证集合中的各数据点划分到合适的类群中,即新分配的响应变量总是接近所在组的形心(centroid)。交叉验证误差(CVRE)可以被用来评估回归树的预测能力。公示为:
图1. 交叉验证误差的公式
因此,CVRE可以定义为验证组未能被树解释的方差除以响应变量的总方差。当然,CVRE计算公式的分子会随着分组情况的变化而变化。理想的预测情况下,CVRE值为0是最理想的预测结果,CVRE的值越接近于1,预测结果越差。
mvpart程序包中MRT的运算流程
- 将数据随机划分成k组(默认为10组,xval=10)。
- 从k组中随机选取一组作为“验证组”(testing set),剩余k-1组(训练组,training set)重现混合后通过约束分析,按照组内平方和最小的原则,建立回归树。
- 将以上过程重复k-1次,即依次剔除一组数据。
- 共产生k个回归树,对于每个回归树的不同分类方案,将验证组(一组数据)内的对象分配到分组结果中。计算每个回归树分类方案的CVRE。
- 对回归树进行剪枝:可以保留CVRE最小的分类方案。也可以根据“1SE”准则,保留CVRE在最小的CVRE加1个标准差范围内最小的分类方案。
- 为了获得上面运行过程的误差估计值,需要重复多次(100次或500次)将对象随机分配为k组。
- 置换检验保留具有最小CVRE误差(或者是1SE值最小,此法最常用)的回归树。
实战:
后台回复“mvpart”获取安装包windows和mac版下载链接
#计算需要用到的主要函数为mvpart程序包的mvpart()。该函数要求输入的响应变量为matrix,解释变量为data.frame().
#安装程序包,因mvpart在R网站已不在更新,因此必须从本地安装;
# 后台回复“mvpart”获取安装包windows和mac版下载链接
#windos请mvpart_1.6-1.zip解压缩后拷贝mvpart文件夹到R程序安装文件夹library目录下,例如:D:\Program Files\R\R-3.1.1\library (找不到安装包,后台回复 mvpart 或 mrt 获得下载链接)
#for mac https://cran.r-project.org/src/contrib/Archive/mvpart/
#install.packages("~/training/MRT/mvpart_1.6-2.tar", repos = NULL,type="source")
#加载mvpart包
library(mvpart)
#调用程序包自带数据集spider
#spider有28行18列,前12列为不同种蜘蛛的多度数据,剩余的为环境数据
data(spider)
#defaults,"."代表env中所有变量
fit<-mvpart(data.matrix(spider[,1:12])~herbs+reft+moss+sand+twigs+water,spider)
图2. 内置蜘蛛数据的多元回归树分析分组结果
从图中可以看出蜘蛛数据所在的样方被分成3组,首先被herb变量分成2组,然后第一组又被twigs变量分成了两组。图下边Error为误差,CV Error为交叉验证误差,SE为标准差
注意:因MRT交叉验证存在随机过程,每次分类可能存在不同结果,这时最好多运行几次或者选择交互模式,选择合适的分组方案。
#设定xv="1se",根据“1SE”准则自动选择最优分类方案,与默认结果相同,因为默认选择1SE
fit<-mvpart(data.matrix(spider[,1:12])~herbs+reft+moss+sand+twigs+water,spider,xv="1se")
图3. 根据“1SE”准则自动选择最优分类方案
#xv="min",选择具有最小CVRE值的回归树
fit<-mvpart(data.matrix(spider[,1:12])~herbs+reft+moss+sand+twigs+water,spider,xv="min")
图4. 选择具有最小CVRE值的回归树
从图中可以看出,数据被分成了7组,最小CVRE的树所分组数通常会比“1SE”准则选择的最优分类方案的组数多。分组越多,CVRE越小,从这里我们可以理解剪枝的概念,尽管此时,CVRE最小,但是我们有时候要兼顾分组的组数,有时候分组太多,并不利于我们对数据的分析。这也是函数默认选择“1SE”准则的原因。
#xv="pick",允许通过人机交互方式从函数提供的误差图中选择自己认为合适的分组
fit<-mvpart(data.matrix(spider[,1:12])~herbs+reft+moss+sand+twigs+water,spider,xv="pick")
#运行函数生成误差图,绿色为相对误差,蓝色为CVRE,红色水平线指示最小CVRE(大红点)的1个标准差范围。红点为具有最小CVRE的分类方案。橙点为最接近1SE准则的分组。
图5. 人机交互方式从函数提供的误差图中选择自己认为合适的分组
通常,红点和橙点之间的分组方案都是可以接受的分组方案,我们用鼠标左键点击合适的分组处的点,就会生产多元回归树的树形图。例如,我们点击橙点,生成和前边xv=”1se”相同的分类结果。
图6. 点击合适的分组处的点,就会生产多元回归树的树形图
#还可以设置交叉验证的迭代次数,默认xvmult = 0,上方绿色条形图指出获得最佳分类方案交叉验证迭代的次数
fit<-mvpart(data.matrix(spider[,1:12])~herbs+reft+moss+sand+twigs+water,spider,xv="pick",xvmult =100)
图7. 绿色条形图指出获得最佳分类方案交叉验证迭代的次数
#根据“1SE”准则自动选择最优分类方案,以pca图的形式展示分组
fit <- mvpart(data.matrix(spider[,1:12])~herbs+reft+moss+sand+twigs+water,spider,xv="1se",pca=TRUE)点击生产的图,将以pca图的形式展示分组
图8. 以pca图的形式展示分组
直观显示多元回归树应用的实例
#例子来源于数量生态学,并对代码中错误的地方进行了修改
#改变工作路径
setwd("D:/training/MRT")
#导入实例数据
#法国和瑞士边境的Jura山脉的Doubs河30个取样点的数据,spe为各种鱼类在各取样点的多度,env为11个与河流相关的环境变量,spa为样方的地理坐标
#Species (community) data frame (fish abundances)
spe <- read.csv("DoubsSpe.csv", row.names=1)
#Environmental data frame
env <- read.csv("DoubsEnv.csv", row.names=1)
#Spatial data frame
spa <- read.csv("DoubsSpa.csv", row.names=1)
#"."代表env中所有变量,可以选择你感兴趣的变量也可以都选择
spe.ch.mvpart <- mvpart(data.matrix(spe) ~ ., env, xv="1se")
summary(spe.ch.mvpart)
图9. 河流取样点分组。多元回归树展示分组情况,样品可以被分成3组,首先das(距离源头距离)变量将样品分为含18个样品和12个样品的两组,然后amm(铵浓度)变量又将12个样品分为2组。
#Group composition (labels of terminal nodes) where指示样品分组情况
(gr <- spe.ch.mvpart$where)
#Renumber clusters sequentially
gr2<-gr
for (i in 1:length(unique(gr2))){
gr2[gr2==unique(gr2)[i]]<-i
}
#Plot of the clusters on a map of the Doubs river
plot(spa, asp=1, type="n", main="MRT groups", xlab="x coordinate (km)", ylab="y coordinate (km)")
lines(spa, col="light blue")
text(50, 10, "Upstream", cex=1.2, col="red")
text(25, 115, "Downstream", cex=1.2, col="red")
k <- length(levels(factor(gr2)))
for (i in 1:k) {
points(spa[gr2==i,1], spa[gr2==i,2], pch=i+20,cex=3, col=i+1, bg=i+1)
}
text(spa, row.names(spa), cex=0.8, col="white", font=2)
legend("bottomright", paste("Group",1:k), pch=(1:k)+20, col=2:(k+1), pt.bg=2:(k+1), pt.cex=2, bty="n")
图10. 分组结果按坐标展示,按组着色
与样品地理分布信息结合,可以清楚显示我们样品的分组情况,然后可结合地理生物学知识进行解释
参考文献
- 数量生态学—R语言的应用,作者: 博卡德 (Daniel Borcard) / 吉莱 (Franqois Gillet) / 勒让德 (Pierre Legendre) ,赖江山译
- 什么是多元回归树?作者:张金龙,http://blog.sciencenet.cn/home.php?mod=space&uid=255662&do=blog&id=417115
相关推荐
-
- stop0x0000007b蓝屏(stop0X0000007b蓝屏,修改注册表)
-
步骤/方式1将电脑送到当地的维修店步骤/方式2然后将师傅维修一下蓝屏的问题当电脑启动蓝屏出现错误代码0x0000007b时,首先我们将电脑重启,在开机时不停按启动热键进入到bios设置页面,进入页面后找到“IntegratedPeriphe...
-
2026-01-14 11:21 liuian
- 怎样设置默认打印机(打印机设置彩色打印在哪里设置)
-
步骤如下:1.单击Windows“开始”菜单,指向“设置”,单击“打印机”,打开“打印机”窗口。2.右键单击打印机图标,系统弹出快速菜单,单击其中的“设为默认值”。如果“打印机”窗口没有当前使用的打印...
- 机械硬盘坏了能修吗(机械硬盘损坏可以修复吗)
-
硬盘修复是很多人都可能会面临的难关。硬盘是计算机上最重要的组成部分,是计算机上的数据存储设备,因此一旦硬盘发生故障,用户很可能会丢失所有数据。况且硬盘是机械设备,有一定的使用寿命,长时间使用出现故障...
- win7正版怎么下载(我告诉你怎么下载win7)
-
如题,题主想在红警之家下载红警,很简单,可以用迅雷下载软件下载,下载以后用解压软件解压就行了,但是红警这款软件在winxp系统下,是最理想的,7系统下面会出现闪退的情况。下载很容易的,闪退的时候,设置...
- 电脑关机脚本bat命令(win10关机bat脚本)
-
bat关机命令需要使用文本文档。使用文本文档制作bat关机命令步骤如下所示:1、在电脑桌面空白处点击鼠标右键。2、在鼠标右键菜单中,选择新建文本文档。3、点击打开文本文档。4、在新建文本文档中输入关机...
- fat32格式是什么意思(u盘fAT32格式是什么意思)
-
是一种分区格式。这种格式使用32位文件分配表,大大提高了磁盘的管理能力,打破了每个分区只有4GB的FAT16限制。对于使用FAT32文件系统的每个逻辑盘内部空间又可划分为三部分,依次是引导区(BOO...
-
- 手机系统更新软件(手机系统更新软件不更新会怎样)
-
第一步:打开苹果手机的设置,点击“通用”选项进入。第二步:选择“软件更新”选项进入第三步:在软件更新界面,如果有新的更新,点击“下载并安装”即可!应用商店里一键更新。在手机软件里,为了更新最新版本可以进软件商店里面找一下,更新点一下,然后它...
-
2026-01-14 09:37 liuian
- 联想小新如何重装系统(联想小新重装系统怎么操作)
-
联想小新重装系统,方法∶在关机状态下,按下电脑的一键恢复按钮(需确保笔记本屏盖在打开状态)。首先找到按键孔,用针对准插孔,捅一下,电脑启动,进入启动选择界面,选择systemrecovery,按回车...
- 麦克风没声音(win11麦克风没声音)
-
一.先确保你的麦克风能正常使用。请确保麦克风本身是好的,连接线没有问题,请确保你的测试软件已正确设置,如YY之类的软件。二.确认你的麦克风是否插入正确的插孔一般麦克风是插入红色插孔中。三.确认你...
- vs2015官网下载(vs2015 下载)
-
VisualStudio2015下载完成之后,会有一个名为“vs2015.pro_chs.iso”的光盘镜像文件。光盘镜像文件将光盘镜像文件在虚拟光驱中加载之后,可以打开查看光盘内容。安装文件双...
- u盘自我保护怎么解除(怎么样取消u盘的自我保护)
-
要解除U盘保护,首先插入U盘后打开“我的电脑”,右击选择U盘图标,点击“属性”。在弹出的对话框中,选择“安全”标签,然后点击“编辑”按钮,根据自己的需要选择或取消“对于系统用户完全控制”权限,点击“确...
- 如何设置自动关机win10(windows 10如何设置自动关机)
-
Win10设置自动关机,需要以下步骤:1.按“Win+R”组合键,呼出“运行”;2.将定时关机命令设置为“shutdown-s-t7200”;3.在“运行”内输入命令,点击“确定”即可;4.如果设置错...
- 公版驱动(公版驱动和专用驱动的区别)
-
公版这个名词特指显卡本身,与驱动无关。一般采用芯片制造商自己设计的显卡,称为公版。显卡驱动只有WHQL版本、Beta版本、兼容版、定制版之分。兼容版一般称为万能驱动,不会给显卡带来多少优化,只是让你能...
- 一周热门
-
-
飞牛OS入门安装遇到问题,如何解决?
-
如何在 iPhone 和 Android 上恢复已删除的抖音消息
-
Boost高性能并发无锁队列指南:boost::lockfree::queue
-
大模型手册: 保姆级用CherryStudio知识库
-
用什么工具在Win中查看8G大的log文件?
-
如何在 Windows 10 或 11 上通过命令行安装 Node.js 和 NPM
-
威联通NAS安装阿里云盘WebDAV服务并添加到Infuse
-
Trae IDE 如何与 GitHub 无缝对接?
-
idea插件之maven search(工欲善其事,必先利其器)
-
如何修改图片拍摄日期?快速修改图片拍摄日期的6种方法
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
