Tratamiento de datos |
Definición de la clase Estadistica
La media de una serie estadística nos proporciona una idea de sus características, pero esta información es insuficiente. Por ejemplo, un país puede tener una determinada renta per cápita pero desigualmente distribuida, con algunos miembros muy ricos y otros pobres, y otro país puede tener la misma renta pero más homogéneamente repartida. De estas observaciones, surgen las medidas de dispersión, las más importantes son la desviación media y la desviación cuadrática media o desviación estándar.
Media aritmética
Una de las medidas que caracterizan a una distribución es la media aritmética, que se obtiene sumando los valores xi introducidos, y dividiendo entre el número total N, tal como vimos al estudiar la clase Lista.
Sea x es el array que guarda las n medidas. La codificación de la función valorMedio que calcula y devuelve el valor medio no reviste dificultad.
double valorMedio(){ double suma=0.0; for(int i=0; i<n; i++){ suma+=x[i]; } return suma/n; }
Medidas de dispersión
Se denomina desviación, a la diferencia entre un valor y la media aritmética de la serie estadística, di=xi-<x>. La desviación media es la media aritmética de los valores absolutos de todas las desviaciones. Su fórmula es
La codificación de esta fórmula es similar a la del valor medio. La función desviacionMedia ha de conocer el valor medio de la serie estadística que se guarda en la variable local media, para calcular después cada una de las desviaciones, sumar el valor absoluto de cada una de ellas y dividir el resultado entre el número de términos.
double desviacionMedia(){ double suma=0; double media=valorMedio(); for(int i=0; i<n; i++){ suma+=Math.abs(x[i]-media); } return suma/n; }
La desviación cuadrática media es la raíz cuadrada de la varianza, es decir, de la media aritmética de los cuadrados de las desviaciones respecto a la media.
La codificación de esta función es similar a la función miembro desviacionMedia. Para hallar la raíz cuadrada se llama a la función estática sqrt de la clase Math. Sin embargo, no se emplea ninguna función especial para hallar el cuadrado de un número, simplemente basta multiplicar dos veces el mismo número.
double desviacionCuadratica(){ double suma=0; double media=valorMedio(); for(int i=0; i<n; i++){ suma+=(x[i]-media)*(x[i]-media); } return Math.sqrt(suma/n); }
Definimos una clase denominada Estadistica, con dos miembros dato: el array de datos x, y el número de datos n. Como funciones miembro: el constructor que inicializa los miembros dato, las funciones valorMedio, desviacionMedia y desviacionCuadratica.
Ponemos el control de acceso delante de la declaración de los miembros dato, y de las funciones miembro. Los miembros dato los declaramos privados (private) de modo que no se puedan modificar desde los objetos de dicha clase. Las funciones miembro las declaramos públicas (public)
Si los miembros dato son privados, podemos redefinir la función toString miembro de la clase base Object, para conocer los datos que guarda un objeto de la clase Estadistica. Como se puede ver en el listado que viene a continuación, la función toString devuelve un string que es la concatenación de un dato a continuación del otro separados por un tabulador, al final añade un retorno de carro para pasar a la siguiente línea.
La función toString se llama siempre que un objeto de la clase Estadistica se pone como argumento de la función System.out.println.
public class Estadistica { private double[] x; private int n; public Estadistica(double[] datos) { x=datos; n=datos.length; } public double valorMedio(){ double suma=0; for(int i=0; i<n; i++){ suma+=x[i]; } return suma/n; } public double desviacionMedia(){ double suma=0; double media=valorMedio(); for(int i=0; i<n; i++){ suma+=Math.abs(x[i]-media); } return suma/n; } public double desviacionCuadratica(){ double suma=0; double media=valorMedio(); for(int i=0; i<n; i++){ suma+=(x[i]-media)*(x[i]-media); } return Math.sqrt(suma/n); } public String toString(){ String texto=""; for(int i=0; i<n; i++){ texto+="\t"+x[i]; } texto+="\n"; return texto; } } |
La medida de la altura de los 10 alumnos de una clase ha sido la siguiente:
1.65, 1.82, 1.72, 1.75, 1.73, 1.85, 1.90, 1.74, 1.76, 1.77.
Hallar el valor medio, la desviación media y la desviación cuadrática media.
Creamos un array denominado datos, con los datos del problema
double[] datos={1.65, 1.82, 1.72, 1.75, 1.73, 1.85, 1.90, 1.74, 1.76, 1.77};
Creamos un objeto es de la clase Estadistica pasándole el array datos a su constructor.
Estadistica es=new Estadistica(datos);
Desde el objeto es llamamos a las funciones miembro públicas para hallar e imprimir el valor medio, la desviación media y la desviación cuadrática media.
System.out.println("media: "+es.valorMedio()); System.out.println("desviación media: "+es.desviacionMedia()); System.out.println("desviación cuadrática: "+es.desviacionCuadratica());
Si además queremos saber qué datos guarda el objeto es, escribimos
System.out.println("datos guardados: "+es);
Implícitamente, se llama a la función miembro toString.