如何计算(在 R 中)范围差异中的范围以检查 0 是否在此范围内?

How to calculate (in R) the range in the difference of ranges to check if 0 is within this range?

我正在研究一个变量 Y 与两个可能的解释变量 X1X2 之间的关系。我所有的变量都是连续的。此外,Y 具有非正态分布,因此我决定使用 Spearman 相关系数分别评估 X1X2Y 的关系。我得到一个名为 rho 的相关系数,其中 Y~X1 (rho1) 和 Y~X2 (rho2) 的置信区间为 C.I(= 范围)。我想计算rho1rho2之间的可能差异范围,并检查0是否在此范围内。

举个例子:

rho1 <- range(0.90,0.92)
rho2 <- range(0.91,0.93)

Range

0.00  0.03     # The difference between `rho1` and `rho2` is between 0 and 

另一个例子:

rho1 <- range(0.85,0.88)
rho2 <- range(0.89,0.91)

Range

0.01  0.06    

我想计算 rho1rho2 之间可能存在差异的范围,以检查,如我所说,如果 0 在这个范围内,然后说[的关系强度=21=] 和 rho2Y 可能是耻辱。在这个例子中,可能的差异范围是:

你知道如何计算上述范围吗?

我想我之前误解了这个问题。我们需要检查一个向量中的任何值是否介于另一个向量中的其他值之间。

get_difference_values <- function(x, y) {
  if(any(dplyr::between(x, min(y), max(y))))
    c(0, max(max(x) - min(y), max(y) - min(x)))
  else
    range(abs(outer(x, y, `-`)))
}

rho1 <- range(0.90,0.92)
rho2 <- range(0.91,0.93)
get_difference_values(rho1, rho2)
#[1] 0.00 0.03

rho1 <- range(0.85,0.88)
rho2 <- range(0.89,0.91)
get_difference_values(rho1, rho2)  
#[1] 0.01 0.06 

旧答案

在可重现的示例中,我认为您需要的是 seq 而不是 range

我们可以用outer求出rho1rho2的每个元素的差值,求出它们的绝对值,得到range.

rho1 <- seq(0.90,0.92, 0.01)
rho2 <- seq(0.91,0.93, 0.01)
range(abs(outer(rho1, rho2, `-`)))
#[1] 0.00 0.03


rho1 <- seq(0.85,0.88, 0.01)
rho2 <- seq(0.89,0.91, 0.01)

range(abs(outer(rho1, rho2, `-`)))
#[1] 0.01 0.06