Как рассчитать (в R) диапазон разности диапазонов, чтобы проверить, находится ли 0 в этом диапазоне? - PullRequest
0 голосов
/ 28 марта 2020

Я изучаю взаимосвязь одной переменной Y с двумя возможными объяснительными переменными X1 и X2. Все мои переменные непрерывны. Кроме того, Y имеет ненормальное распределение, поэтому я решил отдельно оценить соотношение X1 и X2 с Y, используя коэффициент корреляции Спирмена. Я получаю коэффициент корреляции под названием rho с доверительным интервалом C.I (= диапазон) для Y ~ X1 (rho1) и Y ~ X2 (rho2). Я хочу вычислить диапазон возможных различий между rho1 и rho2 и проверить, находится ли 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    

Я хочу вычислить диапазон возможных различий между rho1 и rho2, чтобы проверить, как я уже сказал, если 0 находится в этом диапазоне, а затем сказать, что сила отношения rho1 и rho2 с Y скорее всего позор. В этом примере диапазон возможных различий:

Знаете ли вы, как рассчитать упомянутый диапазон?

1 Ответ

1 голос
/ 28 марта 2020

Я думаю, что неправильно понял вопрос ранее. Нам нужно проверить, находится ли какое-либо значение в векторе между другими значениями в другом векторе.

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, чтобы получить разницу между каждым элементом rho1, rho2, получить их абсолютное значение и получить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...