Java
JAVA: Algoritmo RMSE, MBE, Willmott, Coeficiente de Correlação e Determinação
Lucas
17 de novembro de 2016
2 min de leitura


public class Estatistica {
public String getStats (double valorObs[], double valorEst[], int n){
double somaQuadrados = 0;
double somaTotalObs = 0;
double somaTotalEst = 0;
double estMenosMediaObs = 0;
double obsMenosMediaObs = 0;
double somaQuadradoEstMenosMediaObsMaisObsMenosMediaObs = 0;
double somaEstMenosObs = 0;
double somatorioUm = 0; // (Leiest - Med Leiest) x (Leiobs - Med Leiobs)
double somatorioDois = 0; // (Leiest - Media Leiest)^2
double somatorioTres = 0; // (Leiobs - Media Leiobs)^2
for(int i = 0; i<n; i++){
somaTotalObs += valorObs[i];
somaTotalEst += valorEst[i];
}
double mediaObs = somaTotalObs/n;
double mediaEst = somaTotalEst/n;
for(int i = 0; i<n; i++){
somaQuadrados += Math.pow((valorObs[i] - valorEst[i]), 2);
estMenosMediaObs = Math.abs(valorEst[i] - mediaObs);
obsMenosMediaObs = Math.abs(valorObs[i] - mediaObs);
somaQuadradoEstMenosMediaObsMaisObsMenosMediaObs += Math.pow((estMenosMediaObs + obsMenosMediaObs), 2);
somaEstMenosObs += valorEst[i] - valorObs[i];
somatorioUm += (valorEst[i] - mediaEst) * (valorObs[i] - mediaObs);
somatorioDois += Math.pow((valorEst[i] - mediaEst), 2);
somatorioTres += Math.pow((valorObs[i] - mediaObs), 2);
}
double rmse = Math.pow((somaQuadrados/n), 0.5); //root mean square error (RMSE)
double d = 1-(somaQuadrados/somaQuadradoEstMenosMediaObsMaisObsMenosMediaObs); // Concordancia de Willmott (d)
double mbe = somaEstMenosObs/n; // mean bias error (MBE)
double r = somatorioUm/(Math.pow((somatorioDois*somatorioTres), 0.5)); // Coeficiente de correlação (r)
double r2 = r*r; // Coeficiente de determinação (R²)
String stats = "RMSE;" + rmse + ";Concordancia de Willmott (d);" + d + ";MBE;" + mbe + ";Correlacao (r);" +
r +";Determinacao (R2);" + r2;
return stats;
}
}