原文鏈接:http://tecdat.cn/?p=16881
灰色關聯分析包括兩個重要功能。
第一項功能:灰色關聯度,與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 |
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)
-


最受歡迎的見解
3.R語言對用電負荷時間序列數據進行K-medoids聚類建模和GAM回歸
5.Python Monte Carlo K-Means聚類實戰
