聚類分析的第一步都是度量樣本單元間的距離、相異性或類似性,兩個觀測值之間的歐幾里得距離函數
i、j:表明第 i 和第 j 個觀測值,flex
p:變量的個數spa
R中自帶dist()函數計算矩陣或數據框中全部行(觀測值)之間的距離,格式爲code
dist(x,method=)
x:表示輸入數據ci
method:默認爲歐幾里得距離it
dist()函數默認返回一個下三角矩陣,可是 as.matrix()函數能夠使用標準括號符號獲得距離變量
#flexclust包中的養分數據集 # > data(nutrient, package = "flexclust") #從包中導入數據的方法 > head(nutrient,4) #獲取前4行 energy protein fat calcium iron #energy數值的變化很大,須要對數據進行縮放 BEEF BRAISED 340 20 28 9 2.6 HAMBURGER 245 21 17 9 2.7 BEEF ROAST 420 15 39 7 2.0 BEEF STEAK 375 19 32 9 2.6 d <- dist(nutrient) > as.matrix(d)[1:4,1:4] BEEF BRAISED HAMBURGER BEEF ROAST BEEF STEAK BEEF BRAISED 0.00000 95.6400 80.93429 35.24202 #觀測值之間的距離越大,異質性就越大 HAMBURGER 95.64000 0.0000 176.49218 130.87784 BEEF ROAST 80.93429 176.4922 0.00000 45.76418 BEEF STEAK 35.24202 130.8778 45.76418 0.00000
歐幾里得距離一般做爲 連續型數據的距離度量,但若是存在其餘類型的數據,則須要相異的替代措施。數據類型
能夠使用cluster包中的daisy()函數來得到包含任意二元(binary)、名義(nomial)、有序(ordinal)、連續(continuous)屬性組合的相異矩陣。方法
cluster包中的其餘函數能夠使用這些異質性進行聚類分析。例如 agnes()函數提供了層次聚類,pam()函數提供了圍繞中心點的劃分的辦法。im