R - Различия с использованием суммы с каждой переменной отдельно или суммы со всеми переменными вместе - PullRequest
0 голосов
/ 25 февраля 2020

Я схожу с ума, потому что я использую функцию sum (), и она показывает разные результаты без смысла. У меня есть 4 числовые переменные: A, B, M, N. Также у меня есть переменная весов: W.

Если я сделаю взвешенную сумму:

sum(df$W * (df$A), na.rm = T) = AR
sum(df$W * df$A, na.rm = T) = AR

Результат тот же .

Если я добавлю B:

sum(df$W * (df$A + df$B), na.rm = T) = ABR
sum(df$W * df$A, df$W * df$B, na.rm = T) = ABR

Результат тот же.

Если я добавлю M:

sum(df$W * (df$A + df$B + df$M), na.rm = T) = ABMR1
sum(df$W * df$A, df$W * df$B, df$W * df$M, na.rm = T) = ABMR2

Результат станет другой.

Если я добавлю N:

sum(df$W * (df$A + df$B + df$M + df$N), na.rm = T) = ABMNR1
sum(df$W * df$A, df$W * df$B, df$W * df$M, df$W * df$N, na.rm = T) = ABMNR2

Результат будет другим.

Так что, похоже, переменная M и / или N имеет некоторую проблему. НО, если я начну добавлять переменные M и N ...:

sum(df$W * (df$M), na.rm = T) = MR
sum(df$W * df$M, na.rm = T) = MR

Результат будет таким же.

Если я добавлю N:

sum(df$W * (df$M + df$N), na.rm = T) = MNR
sum(df$W * df$M, df$W * df$N, na.rm = T) = MNR

результат тот же.

Теперь, если я добавлю A:

sum(df$W * (df$M + df$N + df$A), na.rm = T) = MNA1
sum(df$W * df$M, df$W * df$N, df$W * df$A, na.rm = T) = MNA2

Результат станет другим.

Если я добавлю B:

sum(df$W * (df$M + df$N + df$A + df$B), na.rm = T) = MNAB1
sum(df$W * df$M, df$W * df$N, df$W * df$A, df$W * df$B, na.rm = T) = MNAB2

Результат будет другим.

Теперь кажется, что проблема связана с переменными A или B. Как это возможно? Есть ли разница, если я получу сумму, умножающую переменную W на сумму переменных (первый способ), или если я добавлю другие переменные (второй способ)?

Большое спасибо за любую помощь кон предоставить!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Это из-за АН. Вот пример, иллюстрирующий ситуацию:

x <- c(1,2,NA)
y <- c(1,NA,3)
z <- c(2,3,4)
s1 <- sum(x*(y+z), na.rm = T)
s2 <- sum(x*y,x*z, na.rm = T)

Что дает s1 = 3 и s2 = 9. Однако суммы одинаковы, если нет NA. Давайте посмотрим, что происходит:

  1. Для s1, сумма (y+z) дает вектор 3 NA 7. Умноженный на вектор x, получается вектор 3 NA NA. Без учета NA сумма равна 3.
  2. Для s2 продукт x * y дает 1 NA NA, продукт x*z дает 2 6 NA. Исключая NA s, сумма этих векторов равна 9.

Короче говоря, свойство распределения, известное из обычной алгебры, не выполняется, если присутствует NA s.

0 голосов
/ 25 февраля 2020

Рассмотрим этот минимальный пример:

df<-data.frame(W=c(1,2),A=c(NA,3),B=c(4,NA))

Давайте проверим:

sum(df$W*df$A,na.rm=TRUE)
#[1] 6
sum(df$W*df$B,na.rm=TRUE)
#[1] 4
sum(df$W*df$B,df$W*df$A,na.rm=TRUE)
#[1] 10
sum(df$W*(df$B+df$A),na.rm=TRUE)
#[1] 0

Вы должны выяснить, что происходит. Подсказка:

df$W*(df$B+df$A)
#[1] NA NA
...