如何为分组数据创建组内欧几里得距离的箱线图?

时间:2018-08-07 13:41:37

标签: r plot distance boxplot euclidean-distance

示例数据:

set.seed(1234)
a <- matrix(rnorm(250),nrow=25,ncol=10)
fac <- as.factor(c(rep("A",8),rep("B",10),rep("C",7)))
a.dist <- dist(a, "euclidian")
boxplot(a.dist ~ fac)

当我尝试运行boxplot(a.dist ~ fac)时,出现以下错误:

Error in model.frame.default(formula = a.dist ~ fac) : 
  variable lengths differ (found for 'fac')

我试图通过以下方式解决此问题

a.dist <- as.matrix(a.dist)
a.dist[upper.tri(a.dist)] <- NA

但是随后boxplot给了我一个有趣的情节。

我可以用

绘制特定组的组内欧氏距离
subset <- as.factor(fac) %in% ("A")
a.dist.A <- a.dist[subset]
boxplot(a.dist.A)

基本上,我需要针对每个因子水平执行此操作,然后将这些箱形图合并为一个。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:2)

set.seed(1234)
a <- matrix(rnorm(250),nrow=25,ncol=10)
fac <- as.factor(c(rep("A",8),rep("B",10),rep("C",7)))

a_grp <- split.data.frame(a, fac)    ## split matrix by group
d_grp <- lapply(a_grp, dist)         ## apply `dist` by group
n_grp <- lengths(d_grp)              ## number of pairs by group
d <- unlist(d_grp)                   ## combine
g <- rep(factor(levels(fac), levels = levels(fac)), n_grp)  ## combine
boxplot(d ~ g)                       ## joint plot

enter image description here

因为您不希望组间距离,所以必须按组应用dist