/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 0.8.5 ] */ /* [wxMaxima: comment start ] wxMaxima 0.8.1 http://wxmaxima.sourceforge.net Maxima 5.19.2 http://maxima.sourceforge.net Using Lisp GNU Common Lisp (GCL) GCL 2.6.8 (aka GCL) Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] OCW - Universidad de Murcia - Matemáticas - J. Asensio, A. Avilés, S. Sánchez-Pedreño [wxMaxima: comment end ] */ /* [wxMaxima: title start ] Práctica 10 Estadística I Matemáticas OCW UNIVERSIDAD DE MURCIA [wxMaxima: title end ] */ /* [wxMaxima: comment start ] La mayor parte de las funciones de Maxima que vamos a utilizar no forman parte del núcleo básico de Maxima. Por ello debemos cargar, antes de nada, las librerías adicionales que contienen dichas funciones. Esto se realiza ejecutando la siguiente celda: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ load(descriptive); load(draw); load(lsquares); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] La librería descriptive contiene funciones para la estadística descriptiva. draw es una librería que contiene extensiones para el dibujo de gráficas. Y lsquares contiene la utilidad del cálculo de curvas de regresión por el método de mínimos cuadrados. [wxMaxima: comment end ] */ /* [wxMaxima: section start ] Cómo introducir los datos de una distribución [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Antes de comenzar, asegúrate que te has bajado de SUMA los archivos: edades.data Automoviles.data [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Si los datos corresponde a una sola variable estadística deben ser introducidos como una lista. Por ejemplo, las edades de los niños de una unidad infantil son: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ edades:[1,2,2,3,1,2,3,4,1,2,3,4,1,2,3,2,1,1,4,1]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Si la distribución es binomial se debe introducir como una matriz de dos columnas. Cada columna contiene (por filas) los datos de una de variable. Así, por ejemplo, para introducir el número de coches vendidos del modelo A y B, utilizamos la primera columna para la variable A y la segunda para B, y hacemos: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ coches:matrix([0, 2],[1, 3],[2, 1],[2, 1],[2, 1],[2, 2],[2, 2], [2, 2],[2, 2],[2, 2],[3, 1],[3, 1],[3, 1],[3, 1],[3, 1], [3, 1],[3, 1],[3, 1],[3, 2],[3, 2],[3, 2],[3, 2],[4, 0],[4, 1], [4, 1]); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Existen formas más cómodas de introducir los datos, haciéndolo previamente en un archivo de texto, y pidiendo a Maxima que lea dicho archivo, indicándole en cada caso qué va a leer si una lista o una matriz: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ edades:read_list(file_search("c:/Salvador/Bioquimica/edades.data")); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ coches:read_matrix(file_search("C:/Salvador/Bioquimica/Automoviles.data")); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Observe que el archivo debe indicar el camino completo (path) en el disco, con las barras de directorio invertidas respecto a la forma actual, y todo entre dobles comillas. Abra los archivos edades.data y Automoviles.data, que son archivos de texto plano, para ver cómo han sido introducido los datos. Comprobará que no son necesarios corchetes ni comas. [wxMaxima: comment end ] */ /* [wxMaxima: section start ] Frecuencias, medidas de centralización y dispersión [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Para obtener la frecuencia absoluta en una muestra utilizamos la sentencia discrete_freq (list) cuyo único argumento es una lista. La sentencia proporciona dos listas: la primera contine los valores de la muestra ordenados, la segunda indica la frecuencia absoluta de cada valor. Por ejemplo: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ discrete_freq(edades); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Otro ejemplo: con la librería descriptive se incluye una lista con los cien primeros dígitos del número pi. Calculemos la frecuencia de cada uno de ellos (observe que en este caso no se indica el camino del archivo, porque está colocado en la carpeta que Maxima conoce): [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ digits:read_list(file_search("pidigits.data")); discrete_freq(digits); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Para datos no discretos, o cuyos valores son reales, podemos agruparlos en intervalos y obtener la frecuencia de cada intervalo. Para ello utilizamos la sentencia continuous_freq(lista, num) Si 'num' no se incluye se toma el valor diez: 'num' indica el número de intervalos en los que agrupar los datos [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ wind:read_list(file_search("wind.data")); continuous_freq(wind,5); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] A continuación disponemos de las siguientes funciones: mean(lista) , mean(matriz) - para calcular la media var(lista), var(matriz) - para calcular la varianza std(lista), std(matriz) - para calcular la desviación típica median(lista), median(matriz) - para calcular la mediana mini(lista), mini(matriz) - para calcular el valor mínimo maxi(lista), maxi(matriz) - para calcular el valor máximo range(lista), range(matriz) - para calcular el rango (valor máximo - valor mínimo) Cuando se aplican a una matriz (o distribución bidimensional, tridimensional, etc) los valores se calculan por columna, es decir, nos dan los valores de cada una de las variables cuyos datos figuran en la correspondiente columna. Calcule la media, la varianza, la desviación típica, la mediana, los valores mínimo, máximo y el rango de los datos de las variables edades y coches anteriores. [wxMaxima: comment end ] */ /* [wxMaxima: section start ] Distribuciones bidimensionales [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Para una matriz, la función cov(matriz) nos proporciona una matriz, llamada matriz de covarianzas. En el caso de que la matriz corresponda a los datos de una distribución bidimensional, la matriz 2x2 contiene, en la diagonal principal las varianzas de las dos variables, y en la otra diagonal la covarianza de las distribuciones, repetida (por simetría). Calcule la covarianza de la distribución bidimensional de los automóviles. Compruebe que la matriz dada contiene los valores de la varianza de cada variable calculados anteriormente. [wxMaxima: comment end ] */ /* [wxMaxima: section start ] Representaciones gráficas [wxMaxima: section end ] */ /* [wxMaxima: comment start ] Para diagramas de barras disponemos de la función: barsplot (list,opciones) barsplot (matriz de una columna,opciones) barsplot (matriz de una fila,opciones) Las opciones son una gran cantidad: ninguna es obligatoria. Más adelante veremos algunas posibilidades. Una de ellas es box_width=num donde num debe ser un número entre 0 y 1, indica el ancho de las barras Dibuje el diagrama de barras de la distribución edades anterior [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Para el ejemplo de los coches no podemos aplicar directamente esta función, pues está contenida en una matriz de dos columnas. Pero podemos utilizar las funciones col(matriz,num) submatrix(matriz,num1,num2,...) la primera de las cuales toma el valor de la columna de orden num en la matriz, y la segunda proporciona la matriz obtenida al eliminar las columnas num1, num2, ... Dibuje el diagrama de barras de los modelos A y B en la distribución bidimensional de los coches [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Para histogramas disponemos de la función: histogram(list,opciones) histogram (matriz de una columna,opciones) histogram(matriz de una fila,opciones) Como antes disponemos de una gran cantidad de opciones. Una opción específica es nclasses=num que nos da el número de intervalos en los que se clasificarán los datos, es decir, tiene el mismo significado que en la función continuous_freq. Su valor por defecto es 10 Dibuje el histograma de los modelos A y B de coches, con 5 y 4 intervalos respectivamente [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Para diagramas de sectores disponemos de la función: piechart(list,opciones) piechart(matriz de una columna,opciones) piechart(matriz de una fila,opciones) Dos opciones específicas son pie_center=(x,y) pie_radius=num cuyo significado es claro y cuyos valores por defecto son (0,0) y 1. Dibuje el diagrama de sectores de los modelos A y B de coches [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Para diagramas de dispersión disponemos de la función: scatterplot(list,opciones) scatterplot(matriz,opciones) Puede utilizarse la opción nclasses de histogram. Dibuje el diagrama de dispersión de la distribución bidimensional coches [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Dado que no es muy espectacular, probemos con los datos de las dos primeras columnas de wind.data, que es una matriz con cinco columnas: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ matrizwind:read_matrix(file_search("wind.data")); /* [wxMaxima: input end ] */ /* [wxMaxima: section start ] Ajuste (recta de regresión) por mínimos cuadrados [wxMaxima: section end ] */ /* [wxMaxima: comment start ] La función para ajustar una nube de puntos que proporciona maxima es muy versátil. Nos permite ajustar no sólo rectas, sino, en principio, cualquier tipo de ecuaciones. La sintaxis es complicada: lsquares_estimates (D, variables, ecuacion, parámetros) donde: D es la matriz de datos variables es una lista de variables que intervienen en la ecuación ecuación es el tipo de ecuación mediante la que queremos ajustar los datos parámetros son los parámetros a determinar que intervienen en la ecuación. Así, para la regresión lineal, escribiríamos: lsquares_estimates (matriz,[x,y],y=a*x+b, [a,b]); Ajuste por mínimos cuadrados una recta a las distribuciones de coches y a las dos primeras columnas de wind.data [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ lsquares_estimates(submatrix(matrizwind,3,4,5),[y,x],y=a*x+b,[a,b]); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] A continuación lo ideal sería poder dibujar en el mismo gráfico la nube de puntos y la recta de regresión. Sin embargo, la función scatterplot no nos permite dibujar además la recta. Entonces, debemos dibujar la nube de puntos con plot2d, pero antes hay que convertirla al formato adecuado: una lista. Para ello utilizamos makelist en la forma siguiente: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ matrizp:makelist([matrizwind[i,1],matrizwind[i,2]], i, 1, length(matrizwind)); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ a:1361811305/1498773651; b:17893225671/24979560850; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ plot2d([a*x+b,[discrete,matrizp]],[x,0,22],[style,lines,points]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ notas:read_matrix(file_search("C:/Salvador/Bioquimica/Exa1.txt")); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ lsquares_estimates(notas,[y,x],y=a*x+b,[a,b]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ listanotas:makelist([notas[i,1],notas[i,2]],i,1,25); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ a:249/290; b:1401/1450; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ wxplot2d([a*x+b,[discrete,listanotas]],[x,2,12],[style,line,points]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ notas2:read_matrix(file_search("C:/Salvador/Bioquimica/Exa2.txt")); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ lsquares_estimates(notas2,[y,x],y=a*x+b,[a,b]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ listanotas2:makelist([notas2[i,1],notas2[i,2]],i,1,25); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ a:1287/1454; b:534/727; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ wxplot2d([a*x+b,[discrete,listanotas2]],[x,2,12],[style,line,points]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ edad:[15,19,19,20,20,20,20,20,22,22,22,22,22,22,22,22,22,23,23,23, 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24, 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25, 25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,28,29,30,30, 33,33,33,33,34,34,36,36,36,37,38,39,43,44,50,50,52,53,53,55]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ wxhistogram(edad,nclasses=8); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ edades:[15,19,19,20,20,20,20,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,28,28,33,65]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ wxhistogram(edades,nclasses=10); /* [wxMaxima: input end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$