绘制连接所有可能的数据点对的线段,按线段斜率的符号着色(绘制 kendall tau)

draw segments connecting all possible datapoint pairs, colouring by sign of segment slope (plotting kendall tau)

我的问题与 Davis 和 Chen(2006 年)的 article 相关,其中展示了一种可视化 Kendall 的两个变量之间非参数相关性的 tau 度量的方法。

给定散点图中的多个数据点,每个点都通过线段连接到所有其他点。符合以下条件的线段可以是不同的颜色:

  1. 线段是黑色如果它的斜率是;
  2. 线段是红色如果它的斜率是;
  3. 线段为蓝色是其斜率为0(水平平线);
  4. 线段是黑色如1。如果它的斜率未定义(垂直线)。

这里是原文中的一个例子:

我的问题是我可以生成散点图,但不能生成连接所有可能的点对的线段,根据上述标准改变颜色。

这是一个数据集示例:

dataset <- dplyr::tibble(alpha = c(1, 5, 7, 8, 9, 10, 11, 12), 
              beta =  c(7, 7, 5, 4, 3, 14, 15, 18))

我可以生成这个:

ggplot2::ggplot(dataset, aes(x = alpha, y = beta)) + geom_point()

但不是这个:

注意。该解决方案必须适用于具有大量数据点 (~1000)

的数据集

有很多方法,但您需要构建自己的 data.frame 细分。例如

library(tidyverse)

pd <- dataset %>% 
  mutate(d = map(row_number(), function(x) slice(., -x) %>% rename(x = alpha, y = beta))) %>% 
  unnest(d) %>% 
  mutate(
    slope = (y - beta) / (x - alpha),
    cat = case_when(
      is.infinite(slope) | slope > 0 ~ 'a', 
      slope < 0 ~ 'b',
      slope == 0 ~ 'c'
    )
  )

ggplot() +
  geom_segment(aes(alpha, xend = x, beta, yend = y, color = cat), pd) +
  geom_point(aes(alpha, beta), dataset) +
  scale_color_manual(values = c(a = 'black', b = 'red', c = 'blue'))