Desvio Padrao

Ola,

Alguem conhece alguma classe que me ajude a fazer o calculo de desvio padrao??

Grato

Poxa, faz o método ai, é bem fácil!

onde:
:arrow: sigma = desvio padrão
:arrow: N = quantidade de elementos, medições, valores ou o nome que você quiser dar
:arrow: xi = o valor ou medição atual (você vai fazer um laço para percorrê-los)
:arrow: x “barrado” = média aritmética dos valores

ALGORITMO

:arrow: Guarde seus valores em um vetor
:arrow: Calcule a média aritmética (some todos os valores e divida o resultado pela quantidade de valores (o tamanho do seu vetor). Guarde isso em uma variável.
:arrow: Faça um novo laço que percorra novamente todos os elementos e vá acumulando em uma variável “somatório” o quadrado do resultado da diferença entre cada xi e a média.
:arrow: Terminado o laço, basta extrair a raiz quadrada de 1/N multiplicado por seu somatório.

O quadrado da média menos a média dos quadrados (multiplicado por um fator…) ?

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

[code]package br.ufpi.analise;

import org.apache.commons.math.stat.descriptive.moment.Variance;

/**Classe que ora fazer todos os calculos estatistico da aplicação

  • @author Cleiton

*/
public class Estatistica {
private Variance variancia;

/**
 * 
 */
public Estatistica() {
	super();
	variancia = new Variance();
}

/**
 * Obtem o desvio padrão de um array de numeros passados
 * 
 * @param observed
 * @return
 */
public double desvioPadrao(double[] observed) {
	return Math.sqrt(this.variancia.evaluate(observed));
}

}
[/code]
Para baixar o jar
http://commons.apache.org/math/download_math.cgi

Tipo, é fácil de fazer, rapidinho e tal…
Mas sei lá… acho que já deveria existir algo pronto pra esse tipo de coisa…


errado?

Vc esta certo, mas achei isto ai bastante simples.
Praticamente é chamar dois métodos.

[code]/**
* Obtem o desvio padrão de uma Lista de numeros passados
*
* @param temposDetodosFluxos
* @return
*/
public double desvioPadrao(List objetos) {
if (objetos.size() == 1) {
return 0.0;
} else {
double mediaAritimetica = mediaAritimetica(objetos);
double somatorio = 0l;
for (int i = 0; i < objetos.size(); i++) {
double result = objetos.get(i) - mediaAritimetica;
somatorio = somatorio + result * result;
}
return Math.sqrt(((double) 1 /( objetos.size()-1))
* somatorio);
}
}

/**
 * Obtem o a media aritmetica de um array de Elementos
 * 
 * @param temposDetodosFluxos
 * @return
 */
public double mediaAritimetica(List<Long> objetos) {
	double somatorio = 0l;
	for (Long d : objetos) {
		somatorio += d;
	}
	return somatorio / objetos.size();
}

[/code]

[quote=d34d_d3v1l]Tipo, é fácil de fazer, rapidinho e tal…
Mas sei lá… acho que já deveria existir algo pronto pra esse tipo de coisa…


errado?[/quote]

http://commons.apache.org/math/
Veja: http://commons.apache.org/math/apidocs/org/apache/commons/math3/stat/descriptive/SummaryStatistics.html

Se for usar várias outras fórmulas faz sentido; usar algumas, até vai… mas baixar uma lib só pra usar o desvio padrão, é demais…

OK - mas você confia mais no meu cálculo de desvio-padrão ou no cálculo que essa biblioteca disponibiliza :?:

mediaAritimetica não pode ser long.

vlw. alterado para double