A variância pode ser entendida como a média aritmética dos quadrados dos desvios de cada elemento da população.
O desvio de um elemento é a diferença entre o elemento e seu valor esperado. Quando lidamos com um conjunto, o valor esperado é a média dos elementos.
Então o desvio do elemento xi é xi - x.
A variância populacional pode ser descrita como:
Na maioria dos casos, não se tem disponível todos os elementos de um conjunto, mas apenas uma amostra. Nesses casos, calculamos a variância de amostra ou variância amostral.
A diferença no cálculo é que, em vez de dividirmos pelo número total de elementos da amostra no cálculo da média, dividimos pelo número total menos um, o que aumenta o resultado do desvio padrão, compensando não conhecermos todos os elementos do conjunto.
Então o cálculo muda para:
Em Erlang, para calcular o somatório dos desvios, primeiros usamos list comprehension para gerar uma lista dos quadrados desvios:
[math:pow(Xi - Xm, 2) || Xi <- List]
O que este código diz é: retorne a lista dos quadrados (
math:pow/2
) das diferenças entre cada elemento (Xi
) da lista (Xi <- List
) e sua média (Xm
, calculado anteriormente).Depois ele usa
math:sum/1
para gerar um somatório e retorna a divisão do resultado do somatório pelo tamanho da lista menos um (Num / Demon
).Volte ao artigo anterior para ver como fica o código.
Em Scheme, a lógica é quase a mesma, mas em vez de list comprehension, é usado map/reduce. O
#'map
roda a função anónima (lambda) em cada elemento, extraindo os quadrados dos desvios.[update]
Troquei o link para map/reduce, que apontava para um arcabouço do Google, quando as referências reais seriam encontradas no segundo parágrafo do texto referenciado.
[/update]
A função usada foi (λx.(x - x)²)xi, ou:
(lambda (x) (expt (- x xm) 2))
em LISP.Para o reduce (
#'apply
) é usado somatório (#'+
), aplicado ao conjunto resultante.Novalmente, volte ao artigo anterior para ver o código.
[]’s
Cacilhας, La Batalema