首页 > 解决方案 > 通过预定义的协方差矩阵计算逐行马氏距离

问题描述

我的数据看起来像这样:

> data.table(vara = rnorm(10), varb = rnorm(10), centa = rnorm(10), centb = rnorm(10))
           vara        varb       centa       centb
 1:  1.00419673  0.69347399  1.01359426 -0.98483999
 2:  0.49754529  0.93508341 -0.05607498 -0.77689024
 3: -2.37846521  0.66655093  1.52329674  0.13905182
 4:  0.30811512  0.07880182 -0.06553791 -1.64129333
 5: -0.87033370 -0.52522052 -0.79229174  0.92361533
 6: -1.02852317  0.54176228  1.17719753 -1.90073183
 7:  0.50358147  1.09485983 -1.71104946  1.80488113
 8: -0.77273213  0.25078481  0.42496541  0.21571760
 9:  0.05100357 -0.56005040 -0.39855705  1.69918850
10: -0.34916896  0.15693242  1.30007343 -0.03628893

我想计算中心为 ( , ) 对 ( , vara)varb的马氏距离。协方差矩阵是预定义的。这将是一个 2x2 矩阵。我需要为每一行测量距离。centacentb

谢谢!

标签: rdataframedplyrdata.table

解决方案


试试这个方法

library(distances)
library(dplyr)
df <- data.frame(vara = rnorm(10), varb = rnorm(10), centa = rnorm(10), centb = rnorm(10)) 

df_1 <- df%>% 
  transmute(vara_centa = vara - centa,
            varb_centb = varb - centb)

distances(df_1, normalize = "mahalanobize")

自定义归一化矩阵

mcov <- matrix(c(1, 0.2, 0.2, 1), nrow = 2)
distances(df_1, normalize = mcov)

推荐阅读