使用R中的矩阵运算符执行矩阵行之间的加权距离

时间:2014-11-25 12:16:01

标签: r matrix

我以为我能够自己使用R矩阵进行以下计算,但我错了。基于下面矩阵的更大版本,我想计算以下公式

formula

结果是矩阵行之间的平方差异除以列的方差,最终除以9,即矩阵列的nr。该计算的结果将是矩阵行之间的加权差异的矩形矩阵。

structure(c(4.36, 4.44, 4.04, 4.49, 4.09, 4.46, 3.81, 4.44, 3.4, 
3.09, 3.31, 3.7, 4.28, 4.62, 4.2, 4.05, 4.28, 3.72, 3.66, 4.49, 
4.17, 4.85, 5.18, 4.26, 4.29, 4.3, 3.83, 4.38, 4.74, 4.95, 5.33, 
4.82, 4.39, 5.16, 3.6, 4.58), .Dim = c(4L, 9L), .Dimnames = list(
    c("Australia", "Austria", "Brazil", "Canada"), c("Performance.Orientation", 
    "Future.Orientation", "Gender.Egalitarianism", "Assertiveness", 
    "Humane.orientation", "in.group.collectivism", "institutional.collectivism", 
    "power.concentration.decentralization..power.distance.", 
    "uncertainty.avoidance")))

我真的很感激我能得到的任何帮助,因为我不知道如何解决这个问题。

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

您可以在此处使用dist功能。首先将每列除以其标准偏差,以进行所需的缩放。

mat2<-apply(mat,2,function(x)x/sd(x))
x<-dist(mat2)^2/9
x
#            Australia      Austria       Brazil
# Austria 1.2201838730                          
# Brazil  2.2438097238 2.6753385616             
# Canada  0.5118006068 1.9591707783 3.3896964564

恢复普通矩阵:

as.matrix(x)
#              Australia     Austria      Brazil       Canada
# Australia 0.0000000000 1.220183873 2.243809724 0.5118006068
# Austria   1.2201838730 0.000000000 2.675338562 1.9591707783
# Brazil    2.2438097238 2.675338562 0.000000000 3.3896964564
# Canada    0.5118006068 1.959170778 3.389696456 0.0000000000