2012-02-10 13 views
5

Mam 4 populacje ze znanymi środkami i odchyleniami standardowymi. Chciałbym poznać wielki słaby i wielki sd. Wielki środek jest oczywiście prosty do obliczenia, ale R ma przydatną funkcję użyteczności, weighted.mean(). Czy istnieje podobna funkcja do łączenia odchyleń standardowych?istniejąca funkcja do łączenia odchyleń standardowych w R?

, ale istniejąca funkcja sprawi, że mój kod będzie bardziej przejrzysty i łatwiejszy do zrozumienia.

Dodatkowe pytanie, jakich narzędzi używasz do wyszukiwania takich funkcji? Wiem, że to musi być na zewnątrz, ale dużo szukałem i nie mogę go znaleźć. Dzięki!

+0

Jeśli chodzi o pytanie, "findFn" z pakietu ** sos ** jest przydatnym narzędziem. – joran

+0

@AndresT, tak, populacje się nie nakładają. –

+0

@joran Dzięki, nie wiedziałem o tym, zacznę szukać w ten sposób. Zgaduję, że "odchylenie standardowe" będzie popularnym terminem w instrukcjach R –

Odpowiedz

4

Czy populacje się nie pokrywają?

library(fishmethods) 
combinevar 

Przykładowo przykładem Wikipedia będzie działać w następujący sposób:

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

i odchylenie standardowe będzie sqrt (combinevar (xbar, S, N), [2])

Jeśli nie chcesz pobierać biblioteki funkcja działa tak:

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

Nie znam konkretnego pakietu lub fu nazwę nefta, ale wydaje się, że łatwo jest przetasować własną funkcję ze strony Wikipedii. Zakładając, że w populacjach nie ma nakładania się:

## 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

Dziękuję bardzo za tę odpowiedź flodel. Patrząc na wzór na wikipedii, nie sądziłem, żebym mógł uczynić obliczenia tak proste jak ty. Właściwie mogę tego po prostu użyć, ale odpowiedź AndresT jest nieco bardziej wyczerpująca dla innych, którzy znaleźli to pytanie. Dzięki! –