结合R中标准偏差的现有功能?

Sam*_*ift 6 aggregate r standard-deviation

我有4个具有已知手段和标准偏差的人群.我想知道伟大的意思和伟大的sd.平均值显然很容易计算,但R有一个方便的效用函数weighted.mean().是否存在组合标准偏差的类似功能?

计算并不复杂,但现有的功能可以使我的代码更清晰,更容易理解.

奖金问题,你用什么工具来搜索这样的功能?我知道它必须在那里,但我做了很多搜索,但找不到它.谢谢!

aat*_*lob 5

人口不重叠吗?

library(fishmethods)
combinevar
Run Code Online (Sandbox Code Playgroud)

例如,维基百科中的示例将像这样工作:

xbar <- c(70,65)
s<-c(3,2)
n <- c(1,1)
combinevar(xbar,s,n)
Run Code Online (Sandbox Code Playgroud)

并且标准偏差为sqrt(combinevar(xbar,s,n)[2])

如果您不想下载该库,该函数将如下所示:

combinevar <- 
function (xbar = NULL, s_squared = NULL, n = NULL) 
{
    if (length(xbar) != length(s_squared) | length(xbar) != length(n) | 
        length(s_squared) != length(n)) 
        stop("Vector lengths are different.")
    sum_of_squares <- sum((n - 1) * s_squared + n * xbar^2)
    grand_mean <- sum(n * xbar)/sum(n)
    combined_var <- (sum_of_squares - sum(n) * grand_mean^2)/(sum(n) - 
        1)
    return(c(grand_mean, combined_var))
}
Run Code Online (Sandbox Code Playgroud)


flo*_*del 5

我不知道特定的程序包或函数名称,但是从Wikipedia的页面上滚动自己的函数似乎很容易。假设人口没有重叠:

## N: vector of sizes
## M: vector of means
## S: vector of standard deviations

grand.mean <- function(M, N) {weighted.mean(M, N)}
grand.sd   <- function(S, M, N) {sqrt(weighted.mean(S^2 + M^2, N) -
                                      weighted.mean(M, N)^2)}
Run Code Online (Sandbox Code Playgroud)