R语言灰色关联分析法
R语言灰色关联分析法
- 输入数据
- 数据的标准化/归一化
- 求灰色系数
- 求差序列和最大值最小值
- 求关联系数
- 计算关联度并排序
- 所有代码
灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们假设以及知道某一个指标可能是与其他的某几个因素相关 的,那么我们想知道这个指标与其他哪个因素相对来说更有关系,而哪个因素相对关系弱一点,依次类推,把这些因素排个序,得到一个分析结果,我们就可以知道我们关注的这个指标,与因素中的哪些更相关。
( note : 灰色系统这个概念的提出是相对于白色系统和黑色系统而言的。这个概念最初是由控制科学与工程(hhh熟悉的一级学科)的教授邓聚龙提出的。按照控制论的惯例,颜色一般代表的是对于一个系统我们已知的信息的多少,白色就代表信息充足,比如一个力学系统,元素之间的关系都是能够确定的,这就是一个白色系统;而黑色系统代表我们对于其中的结构并不清楚的系统,通常叫做黑箱或黑盒的就是这类系统。灰色介于两者之间,表示我们只对该系统有部分了解。)
例题:
输入数据
输入数据并用DT包的datatable函数展示数据
install.packages("DT")
library(DT)
A <- c(0.83,326,21,3.2,0.2,0.15,250,0.23,0.87)
B <- c(0.90,295,38,2.4,0.25,0.2,180,0.15,0.95)
C <- c(0.99,340,25,2.2,0.12,0.14,300,0.27,0.99)
D <- c(0.92,287,19,2,0.33,0.09,200,0.3,0.89)
E <- c(0.87,310,27,0.9,0.20,0.15,150,0.18,0.82)
F <- c(0.95,303,10,1.7,0.09,0.17,175,0.26,0.94)
data <- data.frame(A,B,C,D,E,F)
rownames(data) <- c("产品质量","产品价格","地理位置","售后服务","技术水平","经济效益","供应能力","市场影响度","交货情况")
library(DT)
datatable(data)
ABDDEF分别对应第1到第6个供应商
数据的标准化/归一化
产品质量、技术水平、供应能力、经济效益、交货情况、市场影响度指标属于效益型指
产品价格、地理位置、售后服务指标属于成本型指标。现分别对上述指标进行规范化:
对于效益型指标(正项指标)标准化公式为:
x∗=x−min(x)max(x)−min(x)x^{\ast}=\frac{x-min\left( x \right)}{max\left( x \right) -min\left( x \right)} x∗=max(x)−min(x)x−min(x)
对于成本型指标(逆向指标)标准化公式为:
x∗=max(x)−xmax(x)−min(x)x^{\ast}=\frac{max\left( x \right) -x}{max\left( x \right) -min\left( x \right)} x∗=max(x)−min(x)max(x)−x
编写函数
#归一化函数正向指标
normalize <- function(x){return ((x-min(x))/(max(x)-min(x)))
}
#归一化函数逆向指标
normalize1 <- function(x){return ((max(x)-x)/(max(x)-min(x)))
}
pos <- apply(data[c(1,5:9),],1,normalize)
neg <- apply(data[c(2:4),],1,normalize1)
scaledata <- cbind(pos,neg);scaledata
scaledata <- t(round(scaledata,3))#这里还求了一个转置
datatable(scaledata)
建立参考序列,即每一列的最大值,并合并数据
best <- apply(scaledata,1,max)
data1 <-data.frame(scaledata,best);
datatable(data1,caption="比较数列和参考序列值")
求灰色系数
求差序列和最大值最小值
ξi(k)=minmin∣(x0(t)−xs(t))∣+ρmaxmax∣x0(t)−xs(t)∣∣x0(t)−xs(t)∣+ρmaxmax∣x0(t)−xs(t)∣\xi _i\left( k \right) =\frac{\min\min \left| \left( x_0\left( t \right) -x_s\left( t \right) \right) \right|+\rho \max\max \left| x_0\left( t \right) -x_s\left( t \right) \right|}{\left| x_0\left( t \right) -x_s\left( t \right) \right|+\rho \max\max \left| x_0\left( t \right) -x_s\left( t \right) \right|} ξi(k)=∣x0(t)−xs(t)∣+ρmaxmax∣x0(t)−xs(t)∣minmin∣(x0(t)−xs(t))∣+ρmaxmax∣x0(t)−xs(t)∣
这里x0(t)x_0(t)x0(t)就是标准化后的数据,$x_s(t)就是比较数据,即每一行的最大值首先求出
∣(x0(t)−xs(t))∣\left| \left( x_0\left( t \right) -x_s\left( t \right) \right) \right| ∣(x0(t)−xs(t))∣
需要主要的是
这里的minmin∣(x0(t)−xs(t))∣和maxmax∣x0(t)−xs(t)∣\min\min \left| \left( x_0\left( t \right) -x_s\left( t \right) \right) \right|\text{和}\max\max \left| x_0\left( t \right) -x_s\left(t \right) \right|minmin∣(x0(t)−xs(t))∣和maxmax∣x0(t)−xs(t)∣用R语言的min和max函数就能求(因为matlab的min函数是求每一列的最小值,所所以在matlab中用min(min))
这里的ρ\rhoρ一般取0.5
err <-abs((1-scaledata))
datatable(err)
min <- min(err)
max <- max(err)
求关联系数
#计算关联系数
rho <- 0.5#分辨系数
xishu <- (min + rho * max)/(err + rho * max)#计算灰色关联分析
xishu <- round(xishu,3)
datatable(xishu)
计算关联度并排序
关联度最好求了,只需要对每一类求一个平均值
最后用sort函数排序就行了
#计算关联度
sort(apply(xishu, 2, mean),decreasing = T)
可以看出D的关联度最高,因此应该选择4号供应商(D对应4)
所有代码
创作不易如果对您有帮助,还请点赞
install.packages("DT")
library(DT)
A <- c(0.83,326,21,3.2,0.2,0.15,250,0.23,0.87)
B <- c(0.90,295,38,2.4,0.25,0.2,180,0.15,0.95)
C <- c(0.99,340,25,2.2,0.12,0.14,300,0.27,0.99)
D <- c(0.92,287,19,2,0.33,0.09,200,0.3,0.89)
E <- c(0.87,310,27,0.9,0.20,0.15,150,0.18,0.82)
F <- c(0.95,303,10,1.7,0.09,0.17,175,0.26,0.94)
data <- data.frame(A,B,C,D,E,F)
rownames(data) <- c("产品质量","产品价格","地理位置","售后服务","技术水平","经济效益","供应能力","市场影响度","交货情况")
library(DT)
datatable(data)
#归一化函数正向指标
normalize <- function(x){return ((x-min(x))/(max(x)-min(x)))
}
#归一化函数逆向指标
normalize1 <- function(x){return ((max(x)-x)/(max(x)-min(x)))
}
pos <- apply(data[c(1,5:9),],1,normalize)
neg <- apply(data[c(2:4),],1,normalize1)
scaledata <- cbind(pos,neg);scaledata
scaledata <- t(round(scaledata,3))
datatable(scaledata)
best <- apply(scaledata,1,max)
data1 <-data.frame(scaledata,best);
datatable(data1,caption="比较数列和参考序列值")
#计算差序列
err <-abs((1-scaledata))
datatable(err)
min <- min(err)
max <- max(err)
#计算关联系数
rho <- 0.5#分辨系数
xishu <- (min + rho * max)/(err + rho * max)#计算灰色关联分析
xishu <- round(xishu,3)
datatable(xishu)
#计算关联度
sort(apply(xishu, 2, mean),decreasing = T)
R语言灰色关联分析法相关推荐
- 数学建模常用模型04:灰色关联分析法
数学建模常用模型04:灰色关联分析法 灰色关联分析法 本文所用的资料参考来源:美赛资料网:美赛资料网 与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用.层次分析用在确定权重上面 ...
- 【数据处理】灰色关联分析法
文章目录 灰色关联分析法 灰色关联度分析 灰色系统 关联度 灰色关联分析法基本思想 例子 一.创建数组 二.数据处理 1.标准化(无量纲化) 2.根据公式需要值,计算对应差数列表,并计算矩阵中的最大值 ...
- 【数据挖掘】关联规则之灰色关联分析法
灰色关联分析法 利用灰色关联分析的九个步骤: 1.根据分析目的确定分析指标体系,收集分析数据. 设n个数据序列形成如下矩阵: 其中m为指标的个数, 2.确定参考数据列 参考数据列应该是一个理想的比较标 ...
- r语言实现关联分析--关联规则挖掘(Apriori算法) (r语言预测学习笔记)
r语言实现关联分析–关联规则挖掘 关联分析: 引子: 我们一般把一件事情发生,对另一间事情也会产生影响的关系叫做关联.而关联分析就是在大量数据中发现项集之间有趣的关联和相关联系(形如"由于某 ...
- 灰色关联分析法详解及python实践
1. 关于灰色关联分析 1.1. 什么是灰色关联分析 灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧 ...
- 灰色关联分析法(GRA)-C++实现
目录 1. 前言 2. 理论基础 3. 代码 1. 前言 最近小白在跟进一个项目,其中运用到了灰色关联分析法用来分析样本数据.同时在阅读了一些原理资料后,设计了一个模块化的C++程序(其实也不算模块化 ...
- 数学建模常用算法—灰色关联分析法(GRA)
解决问题 灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密.曲线越接近,相应序列之间的关联度就越大,反之就越小. 一般的抽象系统,如社会系统.经济系统.农业系统.生态系统.教 ...
- python 灰色关联分析法(GRA)求权重
我遇到的问题: 假设现在有p个指标,g个参评单位.已经告诉你这g个参评单位在p个指标上的得分分别为多少,那么如何确定这p个指标的权重应该为多少? 原理 1.构成矩阵如下: 2.首先对矩阵做行均值化处理 ...
- 数学建模:评价性模型学习——灰色关联分析法(GRA模型)
目录 前言 一.灰色关联分析 1.什么是灰色关联分析? 2.流程介绍 二.综合评价 1.数据无量纲化处理 2.确定参考序列 3.确定权重 4.计算灰色关联系数 5.计算灰色加权关联度 6.代码 总结 ...
最新文章
- 自定义Xcode 文件头部的注释
- matlab内将数组内所有数累乘,数学实验上机汇总【未完成】
- 微信公众平台开发(55)刮刮乐
- 基于组块设计执行开放世界等距游戏引擎
- 【Linux】一步一步学Linux——builtin命令(215)
- spring mvc学习(13)windows上安装maven
- 国产品牌“爱国者”首次杀入数码相机十强
- linux职业_对Linux的好奇心导致了意外的职业
- Tensorflow基本语法和实现神经网络
- ToStringBuilder学习
- python随机密码生成
- 什么是数据库?以及主流的数据库有哪些
- 计算机二级没有学院盖章,二级学院盖章.DOC
- 移动硬盘遇到无法访问,参数错误的处理方法
- nano编辑器的使用
- 入职阿里巴巴,成为年薪百万阿里P7高级架构师需要必备哪些技术栈
- 2g网络显示无服务器,显示2g网络什么意思
- HTML+CSS期末大作业 中国传统美食网站设计 节日美食13页 html5网页设计作业代码 html制作网页案例代码 html大作业网页代码
- 面试杂谈之我的实习求职之路(7个offer)
- SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)