使用R的统计学习:算法和实践(一):MDS(5)
4.MDS相关R函数和R包
(1)基于梯度算法的R函数
作为一种应用领域相当广泛的方法,MDS在不同的R包中,以不同的函数来解决。这些函数大多采用基于梯度的优化算法。有些在前面的例子中已经尝试过,不再一一举例。
经典标度:
cmdscale( ) stats包
wcmdscale( ) vegan包:加权的经典标度
pco( ),ecodist包
pco( ),labdsv包
pcoa( ),ape包
dudi.pco( ),ade4包:后四种方法采用主坐标分析(经典标度的另一种表述),这几个包和生态,进化,遗传有关。
度量标度:
sammon映射:sammon(),MASS包
非度量标度:
isoMDS(),MASS包
metaMDS(),vegan包
monoMDS(),vegan包(全局和局部的非度量标度,局部的多维标度在非线性维数缩减部分介绍)
保序回归:
isoreg(),stats包
(2) SMACOF方法和smacof包,复杂MDS问题的求解。
除了基于梯度的优化方法,近来在MDS领域,也在发展基于其它优化算法的MDS解法。
SMACOF(Scaling by MAjorizing a COmplicated Function)方法就是其一。SMACOF方法使用优化控制majorixation algorithm来最小化压力函数(http://en.wikipedia.org/wiki/Stress_majorization。 或参考[10])。
smacof包是基于SMACOF方法,专门用来求解MDS的R包。同时按照数据结构,给出几种不同的MDS问题的解法。
几种MDS的表现形式:
1-way vs. multi-way MDS: 在K-way MDS中,每个目标对有来自不同“回答”的K个相异度的测量(如重复测量或多重评价人)。
.1-mode vs. multi-mode MDS: 和上边的区别相似,但K个相异度是定性的区别
(如实验条件,被试者,刺激等)
每种MDS版本都有对应的度量或非度量标度的变体。关于此包的详细算法可参考[10]
smacof包的基本函数包括:
smacofSym( ):基本(对称)SMACOF
smacofRect:rectangular SMACOF。
smacofIndDiff( ):3向数据,
smacofConstraint ( ) :带外部约束的SMACOF
smacofSphere.primal( ) ,smacofSphere.dual( ) : 球面投影。
相关的图形输出包括:con_guration plot, Shepard diagram, residual plot, and stress decomposition diagram等。
几个例子
(a)SMACOF的基本解:Ekman's color data
这是MDS的一个经典案例,Ekman(1954)针对14种颜色(波长从434到674),由31位受试者按照两两配对的相似程度进行测量,相似程度分为5个等级(0=完全不相似,4=一致)。31位受试者的数据平均后,相似程度被除以四。
smacof包带有这个数据集的相似矩阵,下面的代码取自此包的自带案例:
library(smacof)
data("ekman")
ekman.d <- sim2diss(ekman, method = 1)#把相似阵转化为相异阵
res.basic <- smacofSym(ekman.d, metric = FALSE)
res.sphere <- smacofSphere.primal(ekman.d, metric = FALSE)
plot(res.basic, main = "Configurations Basic SMACOF")
plot(res.sphere, main = "Configurations Sphere SMACOF")
smacofSym( )是2维SMACOF的基本解,采用经典标度作为默认的初始结构(也可以自定义)。smacofSphere.primal 是二次曲面SMACOF,投影到球面结构上。计算都采用非度量标度。
(b) rectangular SMACOF:早餐评级数据 (Breakfast rating)
矩形SMACOF解决的是metric unfolding model。这种模型针对偏好选择问题(preferential choice)。它假设不同的个人可以按相同的方式感受多样的对象区别在于他们所考虑的对象属性的理想组合。这些数据可以看作是个体和选择对象之间的邻近矩阵,即部分邻近矩阵有缺失数据的MDS的特殊形式。这种形式如下图所示:
早餐评分数据,来自[4],samcof包自带数据集。
42个人根据他们的偏好对15种早餐进行评分。
library(smacof)
data("breakfast")
res.rect <- smacofRect(breakfast, itmax = 1000)
plot(res.rect, joint = TRUE)
图形同时表现了早餐类型和评分者的结构。
(c)3D spherical SMACOF:世界城市航线
世界18个城市的航线距离,在samcof包中采用dual算法生成球面投影,并用3D图表示出来。考虑到航线其实是在地球表面的曲线,使用欧氏距离的MDS结构必然会导致拟合的较大偏差。数据来自[1]
数据整理的部分略,得到dist类矩阵globe.dist
#经典标度
globe.cmds2d<-cmdscale(globe.dist,k=2)
globe.cmds3d<-cmdscale(globe.dist,k=3)
##画2D,3D图
color<-c('purple','brown','purple','purple','blue','black','red','red','blue',
'purple','red','blue','orange','blue','red','purple','blue','purple')
plot(globe.cmds2d[,c(1:2)],type='n')
text(globe.cmds2d,labels(globe.dist),cex=.7,col =color)
plot3d(globe.cmds3d,type='p',col =color,size=10,pch=16)
#Asia (purple), North America (red), South
##America (yellow), Europe (blue), Africa (brown), and Australasia (orange).
#球面投影
globe<-globe/15349 #(用最大值)归一化,否则球面画不出
globe.dist<-as.dist(globe)
res.sphere <- smacofSphere.dual(globe.dist, ndim = 3)
plot3d(res.sphere, sphere = TRUE)
3维图都是可旋转的。
[10] Leeuw ,Mair ,Multidimensional Scaling Using Majorization: SMACOF in R,
Journal of Statistical Software,vol31,3
(1)基于梯度算法的R函数
作为一种应用领域相当广泛的方法,MDS在不同的R包中,以不同的函数来解决。这些函数大多采用基于梯度的优化算法。有些在前面的例子中已经尝试过,不再一一举例。
经典标度:
cmdscale( ) stats包
wcmdscale( ) vegan包:加权的经典标度
pco( ),ecodist包
pco( ),labdsv包
pcoa( ),ape包
dudi.pco( ),ade4包:后四种方法采用主坐标分析(经典标度的另一种表述),这几个包和生态,进化,遗传有关。
度量标度:
sammon映射:sammon(),MASS包
非度量标度:
isoMDS(),MASS包
metaMDS(),vegan包
monoMDS(),vegan包(全局和局部的非度量标度,局部的多维标度在非线性维数缩减部分介绍)
保序回归:
isoreg(),stats包
(2) SMACOF方法和smacof包,复杂MDS问题的求解。
除了基于梯度的优化方法,近来在MDS领域,也在发展基于其它优化算法的MDS解法。
SMACOF(Scaling by MAjorizing a COmplicated Function)方法就是其一。SMACOF方法使用优化控制majorixation algorithm来最小化压力函数(http://en.wikipedia.org/wiki/Stress_majorization。 或参考[10])。
smacof包是基于SMACOF方法,专门用来求解MDS的R包。同时按照数据结构,给出几种不同的MDS问题的解法。
几种MDS的表现形式:
1-way vs. multi-way MDS: 在K-way MDS中,每个目标对有来自不同“回答”的K个相异度的测量(如重复测量或多重评价人)。
.1-mode vs. multi-mode MDS: 和上边的区别相似,但K个相异度是定性的区别
(如实验条件,被试者,刺激等)
每种MDS版本都有对应的度量或非度量标度的变体。关于此包的详细算法可参考[10]
smacof包的基本函数包括:
smacofSym( ):基本(对称)SMACOF
smacofRect:rectangular SMACOF。
smacofIndDiff( ):3向数据,
smacofConstraint ( ) :带外部约束的SMACOF
smacofSphere.primal( ) ,smacofSphere.dual( ) : 球面投影。
相关的图形输出包括:con_guration plot, Shepard diagram, residual plot, and stress decomposition diagram等。
几个例子
(a)SMACOF的基本解:Ekman's color data
这是MDS的一个经典案例,Ekman(1954)针对14种颜色(波长从434到674),由31位受试者按照两两配对的相似程度进行测量,相似程度分为5个等级(0=完全不相似,4=一致)。31位受试者的数据平均后,相似程度被除以四。
smacof包带有这个数据集的相似矩阵,下面的代码取自此包的自带案例:
library(smacof)
data("ekman")
ekman.d <- sim2diss(ekman, method = 1)#把相似阵转化为相异阵
res.basic <- smacofSym(ekman.d, metric = FALSE)
res.sphere <- smacofSphere.primal(ekman.d, metric = FALSE)
plot(res.basic, main = "Configurations Basic SMACOF")
plot(res.sphere, main = "Configurations Sphere SMACOF")
![]() |
![]() |
![]() |
颜色波长(图片来自网络) |
smacofSym( )是2维SMACOF的基本解,采用经典标度作为默认的初始结构(也可以自定义)。smacofSphere.primal 是二次曲面SMACOF,投影到球面结构上。计算都采用非度量标度。
(b) rectangular SMACOF:早餐评级数据 (Breakfast rating)
矩形SMACOF解决的是metric unfolding model。这种模型针对偏好选择问题(preferential choice)。它假设不同的个人可以按相同的方式感受多样的对象区别在于他们所考虑的对象属性的理想组合。这些数据可以看作是个体和选择对象之间的邻近矩阵,即部分邻近矩阵有缺失数据的MDS的特殊形式。这种形式如下图所示:
![]() |
早餐评分数据,来自[4],samcof包自带数据集。
42个人根据他们的偏好对15种早餐进行评分。
library(smacof)
data("breakfast")
res.rect <- smacofRect(breakfast, itmax = 1000)
plot(res.rect, joint = TRUE)
![]() |
图形同时表现了早餐类型和评分者的结构。
(c)3D spherical SMACOF:世界城市航线
世界18个城市的航线距离,在samcof包中采用dual算法生成球面投影,并用3D图表示出来。考虑到航线其实是在地球表面的曲线,使用欧氏距离的MDS结构必然会导致拟合的较大偏差。数据来自[1]
![]() |
数据整理的部分略,得到dist类矩阵globe.dist
#经典标度
globe.cmds2d<-cmdscale(globe.dist,k=2)
globe.cmds3d<-cmdscale(globe.dist,k=3)
##画2D,3D图
color<-c('purple','brown','purple','purple','blue','black','red','red','blue',
'purple','red','blue','orange','blue','red','purple','blue','purple')
plot(globe.cmds2d[,c(1:2)],type='n')
text(globe.cmds2d,labels(globe.dist),cex=.7,col =color)
plot3d(globe.cmds3d,type='p',col =color,size=10,pch=16)
#Asia (purple), North America (red), South
##America (yellow), Europe (blue), Africa (brown), and Australasia (orange).
![]() |
![]() |
#球面投影
globe<-globe/15349 #(用最大值)归一化,否则球面画不出
globe.dist<-as.dist(globe)
res.sphere <- smacofSphere.dual(globe.dist, ndim = 3)
plot3d(res.sphere, sphere = TRUE)
![]() |
3维图都是可旋转的。
[10] Leeuw ,Mair ,Multidimensional Scaling Using Majorization: SMACOF in R,
Journal of Statistical Software,vol31,3
> 我来回应