灰色关联分析包括两个重要功能。
第一项功能:灰色关联度,与correlation系数相似,如果要评估某些单位,在使用此功能之前转置数据。第二个功能:灰色聚类,如层次聚类。
灰色关联度有两种用法。该算法用于测量两个变量的相似性,就像`cor`一样。如果要评估某些单位,可以转置数据集。
可下载资源
*一种是检查两个变量的相关性,数据类型如下:
| 参考| v1 | v2 | v3 |
| ———– |||| —- | —- |
| 1.2 | 1.8 | 0.9 | 8.4 |
| 0.11 | 0.3 | 0.5 | 0.2 |
| 1.3 | 0.7 | 0.12 | 0.98 |
| 1.9 | 1.09 | 2.8 | 0.99 |
释名
灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们假设以及知道某一个指标可能是与其他的某几个因素相关的,那么我们想知道这个指标与其他哪个因素相对来说更有关系,而哪个因素相对关系弱一点,依次类推,把这些因素排个序,得到一个分析结果,我们就可以知道我们关注的这个指标,与因素中的哪些更相关。
( note : 灰色系统这个概念的提出是相对于白色系统和黑色系统而言的。这个概念最初是由控制科学与工程(hhh熟悉的一级学科)的教授邓聚龙提出的。按照控制论的惯例,颜色一般代表的是对于一个系统我们已知的信息的多少,白色就代表信息充足,比如一个力学系统,元素之间的关系都是能够确定的,这就是一个白色系统;而黑色系统代表我们对于其中的结构并不清楚的系统,通常叫做黑箱或黑盒的就是这类系统。灰色介于两者之间,表示我们只对该系统有部分了解。)
reference:参考变量,reference和v1之间的灰色关联度…近似地测量reference和v1的相似度。
*另一个是评估某些单位的好坏。
| 单位| v1 | v2 | v3 |
| ———– |||| —- | —- |
| 江苏| 1.8 | 0.9 | 8.4 |
| 浙江| 0.3 | 0.5 | 0.2 |
| 安徽 0.7 | 0.12 | 0.98 |
| 福建| 1.09 | 2.8 | 0.99 |
示例
##生成数据
#' economyCompare = data.frame(refer, liaoning, shandong, jiangsu, zhejiang, fujian, guangdong)
#
# 异常控制 #
if (any(is.na(df))) stop("'df' have NA" )
if (distingCoeff<0 | distingCoeff>1) stop("'distingCoeff' must be in range of [0,1]" )
diff = X #设置差学列矩阵空间
for (i in
mx = max(diff)
计算关联系数
relations = (mi+distingCoeff*mx) / (diff + distingCoeff*mx)
#计算关联度#
# 暂时简单处理, 等权
relDegree = rep(NA, nc)
for (i in 1:nc) {
relDegree[i] = mean(relations[,i]) # 等权
}
排序: 按关联度大到小
X_order = X[order(relDegree,
relDes = rep(NA, nc) #分配空间 关联关系描述(说明谁和谁的关联度)
X_names = names(X_o
names(relationalDegree) = relDes
if (cluster) {
greyRelDegree = GRA(economyC
# 得到差异率矩阵 #
grey_diff = matrix(0
grey_diff[i,j] = abs(rel
#得到距离矩阵#
grey_dist = matrix(0, nrow
iff[i,j]+grey_diff[j,i]
}
}
# 得到灰色相关系数矩阵 #
grey_dist_max = max(grey_dist)
grey_correl = matrix(0, nrow = nc, ncol = nc)
for (i in 1:nc) {
for (j in 1:nc) {
grey_correl[i,j] = 1 - grey_dist[i,j] / grey_dist_max
}
}
d = as.dist(1-grey_correl) # 得到无对角线的下三角矩阵(数值意义反向了, 值越小表示越相关 )
# 主对角线其实表示了各个对象的相近程度, 画图的时候, 相近的对象放在一起
系统聚类
hc = hclust(d, method = clusterMethod) # 系统聚类(分层聚类)函数, single: 单一连接(最短距离法/最近邻)
# hc$height, 是上面矩阵的对角元素升序
# hc$order, 层次树图上横轴个体序号
plot(hc,hang=-1) #hang: 设置标签悬挂位置
}
#输出#
if (cluster) {
lst = list(relationalDegree=relationalDegree,
return(lst)
}
```
```{r}
## 生成数据
rownames(economyCompare) = c("indGV", "indVA", "profit", "incomeTax")
## 灰色关联度
greyRelDegree = greya(economyCompare)
greyRelDegree
```
灰色关联度
灰色聚类,如层次聚类
随时关注您喜欢的主题
## 灰色聚类 greya(economyCompare, cluster = T)
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!