R - 分别对每个变量求和或对所有变量求和的差异

R - Differences using sum with each variable separately or sum with all variables together

我快要疯了,因为我正在使用 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 and/or 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 变量乘以变量之和(第一种方式),或者如果我添加不同的变量(第二种方式),有什么不同吗?

非常感谢您提供的任何帮助!

考虑这个最小的例子:

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

这是由于 NA。这是说明情况的示例:

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。排除NAs,这些向量之和为9.

简而言之,如果 NA 存在,则通常代数中已知的分配 属性 不成立。