2012-02-10 73 views
5

我有4个已知方法和标准偏差的种群。我想知道盛大的意思和盛大sd。大的意思显然很容易计算,但R有一个方便的效用函数,weighted.mean()。标准差是否有类似的功能?现有函数结合R中的标准偏差?

The calculation is not complicated,但现有的函数会使我的代码更清晰,更易于理解。

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

+0

关于您的搜索问题,** sos **包中的'findFn'是一个方便的工具。 – joran 2012-02-10 02:55:49

+0

@AndresT,是的,人口是不重叠的。 – 2012-02-10 03:00:05

+0

@joran谢谢,我不知道,我会开始寻找这种方式。我猜“标准偏差”将成为R手册中的一个热门词汇 – 2012-02-10 03:00:57

回答

4

人口是否不重叠?

library(fishmethods) 
combinevar 

例如在维基百科的例子将工作是这样的:

xbar <- c(70,65) 
s<-c(3,2) 
n <- c(1,1) 
combinevar(xbar,s,n) 

和标准偏差将被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)) 
} 
4

我不知道具体的包还是fu nction的名字,但它似乎很容易从维基百科的页面推出自己的功能。假设人群中没有重叠:

## 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)} 
+0

非常感谢这个答案flodel。在看维基百科的公式时,我不认为我可以让计算看起来像你一样简单。事实上,我可能只是使用这个,但AndresT的回复对于其他人发现这个问题要更全面一些。谢谢! – 2012-02-10 15:30:58