Ola,
Alguem conhece alguma classe que me ajude a fazer o calculo de desvio padrao??
Grato
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…) ?
[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
*/
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