Esse é o código que eu tenho para resolver a conta do desvio padrão, porém mexi nele e ainda não deu certo.
public double desvioPadrao(List<Int> objetos) {
if (objetos.size() == 1) {
return 0.0;
} else {
double media = media (objetos);
double soma = 0l;
for (int i = 0; i < objetos.size(); i++) {
double result = objetos.get(i) - media;
soma = soma + result * result;
}
return Math.sqrt(((double) 1 /( objetos.size()-1))
* soma);
}
}
public static double desvioPadrao(List<Integer> numeros) {
double media = numeros.stream().mapToInt(Integer::intValue).average().orElse(0);
double mediaDesvios = numeros.stream().mapToDouble(i -> Math.pow(i - media, 2)).average().orElse(0);
return Math.sqrt(mediaDesvios);
}
1 curtida
Não deu certo, eu tentei mas não deu certo!
Com a biblioteca do Apache Commons é bem fácil:
private double getDesvioPadrao(double [] valores){
return Math.sqrt(new Variance().evaluate(valores));
}
Link da biblioteca:
http://commons.apache.org/proper/commons-math/download_math.cgi
1 curtida
Provavelmente você não passou o parâmetro List de forma correta, pois a codificação dele não tem erro.
Por um pequeno detalhe estatístico, vou postar duas codificações relacionadas a desvio padrão, entretanto, uma delas é equivalente à que lvbarbosa já fez, e o motivo da postagem pode ser vista no nome de cada um dos métodos relacionados:
private static double desvioPadraoAmostral(double... variaveis) {
if (variaveis.length < 2) {
return 0;
}
double somaQuadradoVariaveis = Arrays.stream(variaveis).map(num -> num * num).sum();
return Math.sqrt((somaQuadradoVariaveis - variaveis.length * Math.pow(media(variaveis), 2)) / (variaveis.length - 1));
}
//
private static double desvioPadraoPopulacional(double... variaveis) {
if (variaveis.length < 2) {
return 0;
}
double somaQuadradoVariaveis = Arrays.stream(variaveis).map(num -> num * num).sum();
return Math.sqrt((somaQuadradoVariaveis / variaveis.length) - Math.pow(media(variaveis), 2));
}
//
private static double media(double... variaveis) {
return Arrays.stream(variaveis).average().orElse(0);
}
A utilização de qualquer um dos métodos, de qualquer um dos participantes, depende de informar os parâmetros de forma correta.
Provavelmente seu erro anda por aqui: https://www.youtube.com/watch?v=B9dUNclaUsg
1 curtida