Estadística Con R y Matlab
Short Description
Descripción: LENGUAJE DE PROGRAMACIÓN R CON ACCESO DIRECTO A MATLAB Y SUS INICIOS...
Description
ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO FACULTAD DE CIENCIAS, ESCUELA DE FÍSICA Y MATEMÁTICA RIOBAMBA – ECUADOR 2015
PABLO FLORES MUÑOZ
1
ESTADÍSTICA DESCRIPTIVA MEDIANTE EL USO DE R Y MATLAB
Pablo Flores Muñoz Escuela Superior Politécnica de Chimborazo
2
I
ÍNDICE ÍNDICE ................................................................................... II AGRADECIMIENTO............................................................... IV PREFACIO ............................................................................. VI 1.
2.
3.
CAPÍTULO 1:
PRELIMINARES ESTADÍSTICOS ............. 1
1.1.
BREVE HISTORIA DE LA ESTADÍSTICA................................................. 2
1.2.
DEFINICIÓN Y CLASIFICACIÓN DE LA ESTADÍSTICA .............................. 3
1.3.
CONCEPTOS PRELIMINARES .............................................................. 4
CAPÍTULO 2:
FUNDAMENTOS DE R ............................. 8
2.1.
¿QUÉ ES R?..................................................................................... 8
2.2.
R CONSOLE ..................................................................................... 9
2.3.
RSTUDIO ....................................................................................... 11
2.4.
LOS COMANDOS EN R......................................................................14
2.4.1.
Argumento de los Comandos: ............................................................... 16
2.4.2.
Visualización de los valores de los comandos ...................................... 22
2.5.
LOS PAQUETES EN R ...................................................................... 24
2.6.
INGRESANDO INFORMACIÓN EN R ................................................... 28
2.6.1.
Variables .............................................................................................. 28
2.6.2.
Vectores ................................................................................................ 29
2.6.3.
Matrices................................................................................................ 32
2.6.4.
Operaciones Básicas con Matrices y/o vectores.................................... 37
2.6.5.
Ingresando una matriz de datos .......................................................... 39
2.6.6.
Importando una matriz de datos desde otro tipo de archivo ............... 43
2.6.7.
Matrices de Datos en R ......................................................................... 49
CAPÍTULO 3:
FUNDAMENTOS DE MATLAB ................ 51
3.1.
¿QUÉ ES MATLAB?........................................................................ 51
3.2.
EL ENTORNO DE MATLAB ............................................................. 52
3.3.
LOS COMANDOS EN MATLAB......................................................... 54
3.4.
INGRESANDO INFORMACIÓN EN MATLAB ....................................... 59
3.4.1.
Variables ...............................................................................................59
3.4.2.
Vectores ................................................................................................ 60
II
4.
3.4.3.
Operaciones Básicas con Vectores........................................................ 63
3.4.4.
Matrices.................................................................................................65
3.4.5.
Operaciones con matrices .....................................................................67
3.4.6.
Importando una matriz de datos desde otro tipo de archivo ................67
CAPÍTULO 4:
ANÁLISIS DE FRECUENCIAS Y
REPRESENTACIÓN GRÁFICA DE DATOS .............................. 75 4.1.
VARIABLES Y DATOS....................................................................... 75
4.1.1.
4.2.
Clasificación de los datos....................................................................... 75
ANÁLISIS UNIVARIADO DE FRECUENCIAS ......................................... 79
4.2.1.
Tablas de Frecuencias .......................................................................... 80
4.2.2.
Análisis de frecuencias para datos simples o sin agrupar .................... 81
4.2.3.
Gráficas para representar frecuencias de datos simples: .................... 83
4.2.4.
Análisis de Frecuencias para datos agrupados .................................... 94
4.2.5.
Gráficas para representar frecuencias de datos agrupados ............... 101
4.3.
ANÁLISIS BIVARIADO DE FRECUENCIAS .......................................... 109
4.3.1.
5.
Tablas de Contingencia ....................................................................... 109
CAPÍTULO 5: 5.1.
DESCRIPCIÓN NUMÉRICA DE DATOS 114
DESCRIPCIÓN NUMÉRICA DE DATOS UNIVARIADOS.......................... 114
5.1.1.
Medidas de Tendencia Central ............................................................ 114
5.1.2.
Medidas de Dispersión ........................................................................ 123
5.1.3.
Medidas de Posición ............................................................................ 133
5.2.
DESCRIPCIÓN NUMÉRICA DE DATOS BIVARIADOS ............................142
5.2.1.
Covarianza .......................................................................................... 143
5.2.2.
Correlación .......................................................................................... 146
III
AGRADECIMIENTO Colosenses 1:16
Es así que agradezco infinitamente al Dios de la Biblia, el cuál es el creador de todo el conocimiento que existe en la tierra, y él cual me ha permitido para su gloria realizar este aporte A mi amada esposa Anita y mi amado hijo Pablito, gracias por siempre creer en mí y construir juntos nuestra historia, nuestros sueños, triunfos y fracasos, en cada cosa que hacemos incluyendo este libro
IV
V
PREFACIO EL PROPÓSITO DE ESTE LIBRO El presente libro se convierte en un texto de ayuda para realizar un curso a nivel superior de Estadística Descriptiva, además sirve como un referente práctico para que el lector aprenda a manejar los software R y MATLAB, y de sus primeros pasos utilizando estos paquetes, lo cual se constituye en una base para que luego pueda realizar cálculos y gráficas en ramas más específicas o avanzadas dentro del análisis estadístico. No es la intención profundizar en aspectos estadísticos teóricos, ni tampoco en aspectos de programación avanzada mediante los software descritos, sino más bien enfocarnos en definir, calcular (mediante el software) e interpretar medidas y gráficos estadísticos que nos ayudan a realizar una descripción de un conjunto de datos. ¿POR QUÉ R Y MATLAB? A nivel de Ingeniería es de mucha utilidad el uso de estos paquetes en lo que al análisis de datos se refiere, ya que a diferencia de la gran mayoría de paquetes estadísticos que son muy limitados y solo permiten al usuario ingresar información de entrada bajo ciertos lineamientos y de la misma forma hacer cálculos específicos y restringidos, estos paquetes permiten que sea el usuario quien utilice o de ser necesario incluso cree las funciones que le permitirán realizar cálculos y gráficas, pudiendo ampliar la visión de su uso tanto como el usuario tenga la necesidad y/o capacidad de hacerlo. Los cálculos que la mayoría de paquetes realizan son limitados, siguen un formato único y no permiten que estos cálculos puedan unirse mediante algoritmos con otros, por lo que a nivel avanzado se hace imposible crear modelos para necesidades específicas. R y MATLAB se convierte en la solución para este problema, permitiendo que el usuario sea quien construya de acuerdo a sus necesidades los códigos que le servirán para realizar cálculos y gráficos de manera secuencial sin ninguna restricción sino la que el mismo realice
VI
VII
1. CAPÍTULO 1: PRELIMINARES ESTADÍSTICOS La estadística es una ciencia, nace de la necesidad que tiene el hombre de comprender el mundo que nos rodea, su diario vivir, los hechos, sucesos o procesos que marcan la historia y el desarrollo de la humanidad. La estadística está plenamente involucrada con el proceso de planificación y toma de decisiones en todos los ámbitos del quehacer cotidiano, sin ella no sabríamos de dónde venimos, ni hacia dónde vamos. Cuando una persona, familia, empresa, estado o cualquier otro tipo de organización no posee un registro acerca de las cosas que ha hecho, está haciendo y de las que pretende hacer, solo será como un ciego que no mira hacia dónde se encamina su quehacer diario, carecerá de un objetivo definido, caerá en activismo y no será capaz de ser un aporte en el área que se esté desarrollando. Solo imaginemos a un atleta profesional en cuyo entrenamiento no se registre constantemente sus marcas personales, su tiempo de dedicación, la cantidad de nutrientes que debe consumir en su dieta, etc… Si no se lo hace sin duda su entrenador no tendría idea del atleta que está formando, no sabría cuáles son los aspectos físicos o biológicos que debe mejorar en él, ni siquiera tendría idea si antes de la competencia tiene o no la posibilidad de ganar o perder frente a sus adversarios, ya que no tendría ninguna medida que le permita evaluar y mucho menos comparar el rendimiento de dicho atleta, su entrenamiento estaría vacío y caminaría con gran probabilidad hacia un fracaso en su carrera como deportista. O tal vez imaginemos a una nación sin estadísticas, un país donde no se registren los hechos que sucede en la vida de una población. Qué decisiones o políticas públicas acerca de educación sexual y planificación familiar para los habitantes se podrían establecer sino sabemos cuál es la tasa de natalidad, o el índice de embarazo adolescente. Cuál debería ser el presupuesto adecuado para salud sino se conoce indicadores estadísticos de morbilidad, o tasas de mortalidad en la población. Cómo asignar un presupuesto o establecer políticas públicas para la
1
educación sino conocemos indicadores estadísticos que nos muestren cuál es la tasa de analfabetismo, abandono escolar, demanda educativa, etc… Cómo podría una nación presupuestar en un futuro la justa distribución de su riqueza si no cuenta con estadísticas que le indiquen cuál será el tamaño futuro de su población. O tan solo imaginemos nuestra propia vida, qué pasaría si en el quehacer diario no tendríamos una noción o un registro del tiempo, recursos, o dinero que constantemente estamos utilizando ni de las cosas que estamos produciendo ya sea en nuestro trabajo, hogar o demás lugares que nos desempeñamos. No tendríamos ni sentido ni noción de las cosas que hacemos o dejamos de hacer. Sin duda se nos hace difícil encontrar alguna actividad dentro de cualquier entorno en la cual no esté presente algún tipo de información o registro. Cuando esta información es debidamente procesada se convierte en estadísticas útiles para el desarrollo y mejora continua. Es por eso que antes de empezar con la teoría estadística propiamente dicha, resulta interesante conocer brevemente algunos preliminares que nos ayudarán de cierta manera a entender mejor a la razón de ser de esta ciencia.
1.1. Breve Historia de la Estadística Es realmente difícil establecer con exactitud una fecha exacta donde pudo haber comenzado el hombre a utilizar estadísticas, ciertas piezas arqueológicas de distintos pueblos y tribus nos dan a entender que el hombre primitivo usaba estadísticas para llevar cuentas acerca del ganado, la caza o la cosecha. La biblia nos enseña en el antiguo testamento que cuando Dios liberó al pueblo de Israel de su esclavitud en Egipto, Moisés realizó un censo de población “El Señor le dijo a Moisés: Haz un censo de todos los primogénitos israelitas mayores de un mes, y registra sus nombres
>”.
Algunas civilizaciones antiguas
también se vieron en la necesidad de elaborar estadísticas, de algunas de ellas hablamos a continuación:
2
La cultura egipcia (3050 A.C.), donde continuamente, incluso antes de la construcción de las pirámides se analizaban datos acerca de la población, tal fue así que cuando los judíos fueron esclavos en Egipto, el faraón supo que el número de egipcios era inferior al número de judíos, y ordenó mandó a matar a todos los primogénitos varones recién nacidos de este pueblo.
La cultura Babilónica (3000 AC), donde se han encontrado restos de tablas de arcilla, que se evidenció servían para recopilar datos de la producción y el comercio que se realizaba
La cultura China, donde en los años 2200 A.C. el emperador Tao ordenó se censara todo el pueblo.
La cultura Romana, donde en los años 500 A.C. existía un funcionario del estado conocido con el nombre de “censor”, el cual controlaba el número de habitantes y la distribución de la población en el territorio
Por los años 1500 D.C. se registró en Inglaterra y Francia, los bautismos, fallecimientos y matrimonios de la población, tales hechos se publicaban semanalmente y continuó siendo una costumbre durante mucho tiempo
Durante los siglos XVII y XVIII, grandes matemáticos como Bernoulli, Lagrange, Laplace entre otros, desarrollaron la denominada teoría de la probabilidad, la cuál años más tarde sería el sustento de la mayoría de teorías estadísticas hasta ahora existentes y que dieron origen a las múltiples aplicaciones de esta ciencia.
1.2.Definición y Clasificación de la Estadística La palabra Estadística procede del vocablo “Estado”, ya que precisamente en sus orígenes era este ente el encargado de establecer registros e información de los principales hechos que acontecían en el estado y la dinámica de la población
3
Estadística.- Se puede definir a la estadística como la ciencia encargada de recolectar, analizar e interpretar la información, para aportar en el proceso de toma de decisiones de una forma más efectiva Además la estadística constituye una herramienta fundamental en la investigación científica, busca explicar las relaciones y las dependencias que existen entre fenómenos, ya sea que estos ocurran de manera aleatoria o condicional. A la estadística para su comprensión se la puede clasificar en dos grandes grupos que son: La estadística Descriptiva.- Que se encarga de describir (ya sea gráfica o numéricamente) la información obtenida, de tal manera que se la pueda resumir y observar con la mayor claridad y exactitud posible La Estadística Inferencial.- Que se encarga de realizar modelos que permitan inferir y/o predecir parámetros de una población, a partir de la información proporcionada por una muestra representativa. A la estadística inferencial para distinguirla de acuerdo al tipo de información que utiliza en la muestra se la puede clasificar en estadística paramétrica o no paramétrica Figura 1.1
Estadística
Descriptiva
Inferencial
Paramétrica
No Paramétrica
1.3.Conceptos Preliminares
Población.- Es el conjunto formado por N individuos, que son todos aquellos sobre los cuales se desea realizar el estudio, normalmente es
4
demasiado grande para poder estudiarlo en su totalidad, por lo que se extrae un subconjunto (muestra), para en base a ella realizar inferencias
Muestra.- Es un subconjunto de la población, formado por n individuos, a los cuales es posible acceder para realizar mediciones Figura 1.2
Población
N individuos
Muestra
n Individuos
Muestra Aleatoria.- Es un subconjunto representativo de la población, donde cada elemento de dicha población tiene la misma oportunidad de ser parte de esta muestra, y es confiable para realizar inferencias acerca de la población
Muestreo.- Son todas aquellas técnicas que nos permiten seleccionar una muestra representativa de la población en estudio
Parámetro.- Es un resumen de la información sobre los individuos de la población, por lo general un parámetro no se calcula, sino que se estima a partir de las mediciones realizadas en la muestra aleatoria
Estadístico.- O también llamado estimador, se lo localiza en la muestra aleatoria, es posible calcular sus valores y se utiliza para estimar algún parámetro de la población
5
Figura 1.3
Población
Parámetro θ
Muestra
Estadístico
Unidades de Análisis.- Son los objetos o sujetos de la población de los cuales nos interesa medir algunas características de tipo estadístico
Variable.- Es una característica observable en las unidades de análisis, que varía frecuentemente. Su clasificación se la puede apreciar en la siguiente figura: Figura 1.4
Variables
Cualitativas
Ordinales
Nominales
Cuantitativas
Discretas
Continuas
En el capítulo “Variables Aleatorias”, se trata a profundidad este tema.
Dato.- Son los valores particulares que toma cada variable al ser medida sobre los individuos, y se clasifican de acuerdo al tipo de variable de la cual fueron tomados
6
Experimento.- Es todo proceso a través del cual conseguimos un dato o información
Censo.- Es el proceso mediante el cual se recogen datos o información de interés sobre el total de una población.
Encuesta.- Es el proceso mediante el cual se recogen datos o información de interés sobre la muestra representativa que se eligió mediante el proceso de muestreo. Figura 1.5
Población
Muestra
Censo
Encuesta
7
2. CAPÍTULO 2: FUNDAMENTOS DE R
2.1.¿Qué es R? R es un lenguaje de programación, principalmente encaminado a desarrollar análisis estadístico de la información, sea esta cuantitativa o cualitativa, y su respectiva representación gráfica en los casos que sea posible. Fue iniciado en 1995 por Robert Gentleman y Ross Ihaka (de sus nombres deriva el nombre de “R”) del Statistics Department “University of Auckland” Se trata de un lenguaje de programación orientado a objetos, y es por ello la gran utilidad y potencia que tiene el uso de este programa, así mientras que en los lenguajes de programación tradicionales se construye cada uno de los pasos para la obtención de una ecuación, función, variable, etc…, y al final se muestran los resultados, el R guarda estos resultados como un “objeto” en la memoria activa del computador, para que después el usuario pueda manipular estos objetos en un script con operadores (aritméticos, lógicos, y comparativos) y funciones (que a su vez son objetos), de tal manera que se pueda crear un programa completo que pueda desarrollar algún modelo que resuelve necesidades específicas del usuario. De esta manera su aplicación también resulta más potente que los software estadísticos tradicionales donde únicamente se ingresa la información, y luego de un par de “clics” aparecen los resultados, sin tener más opciones de análisis de la información más que las que ya se encuentran establecidas en estos paquetes. La consola de trabajo del software R “R Console” tiene la siguiente apariencia
8
(Figura 2.1) Figura 2.1
2.2.
R Console
Es el lugar donde se desarrollará todo el trabajo “WorkSpace”, desde esta consola el usuario podrá escribir todas las entradas que sean de interés, y así mismo podrá visualizar todas las salidas que puedan producir dichas entradas. Sin duda al escribir en la consola de R podemos hacer uso de la variedad de objetos que posee este software. Con el afán de que el lector pueda visualizar muy ligeramente este proceso, haremos una operación muy sencilla que consiste en encontrar la media de un grupo de datos utilizando la función mean(). No es de interés aún saber cómo ingresar datos y obtener resultados, más bien los siguientes son tan solo ejemplos con el afán de visualizar la escritura en R Console: Al ingresar los datos [3 5 6 7 12 4 11 7] de la siguiente forma > x media hist(rpois(600,7))
Lo cual nos arrojará la siguiente gráfica (Gráfica 2.1):
10
Gráfica 2.1
100 0
50
Frequency
150
Histogram of rpois(600, 7)
0
5
10
15
20
rpois(600, 7)
En fin, podríamos ejecutar un sin número de objetos que nos ayudaría a resolver diferente necesidades. Sin embargo resulta interesante saber que existe una interfaz basada en el lenguaje R, en la cual podemos elaborar las mismas tareas realizadas en la consola, pero con la diferencia que el proceso se encuentra mejor organizado, es más amigable con el usuario, se puede observar todo el procedimiento con sus distintos resultados (numéricos y gráficos), se puede observar todo el historial de comandos ejecutados, etc… todo esto en diferentes ventanas dentro de una misma área de trabajo, o lo que es conocido dentro de este software como “R-Project”. Esta interfaz es conocida con el nombre RStudio, y la cual se constituye en el centro de interés para el soporte de cálculos y gráficos estadísticos desarrollados en el presente libro.
2.3.
RStudio
El RStudio no es un lenguaje de programación, sino más bien se lo puede considerar como una interfaz que está basada en el lenguaje R, del cual acabamos de hablar. Explicando un tanto mejor lo dicho, esto es similar a lo que ocurre con Microsoft Excel, y el lenguaje de programación C.
La mayoría de personas estamos
acostumbrados a aprovechar de todas las ventajas y facilidades (funciones,
11
gráficas, formatos, condicionantes, filtros etc…) que existe al momento de trabajar con la hoja de cálculo, sin embargo no hay que olvidar que todas estas bondades están programadas internamente en el lenguaje de programación “C”, por lo que en realidad el Excel no es un lenguaje donde podamos programar, sino más bien, este es considerado como una interfaz que se basa en “C”. Es similar lo que ocurre con el lenguaje de programación orientado a objetos “R”, y la interfaz gráfica basada en “R” que se denomina “RStudio”. El entorno del RStudio es el que se muestra a continuación en la Figura 2.4: Figura 2.4
Básicamente son cuatro ventanas las que se puede apreciar: (1) En la parte superior izquierda una ventana donde se ubican los scripts.- Es decir los guiones donde escribiremos el conjunto de instrucciones o comandos (códigos) necesarios para encontrar respuestas para resolver una necesidad estadística específica. Desde aquí el usuario luego de escribir, deberá seleccionar todo o parte del código en el que esté interesado y deberá mandarlo a correr1, para que de esta forma sus resultados se puedan visualizar en la ventana 3. Además podemos observar 1
Correr (Run) un comando significa ejecutarlo una vez que se lo ha escrito, para hacer esto debemos seleccionar la parte del script que queramos correr y aplastar el botón Run o a su vez (CTRL+R). Por cuestiones pedagógicas escribiremos el comando en la ventana 1, y visualizaremos su respuesta después de correrlo en la ventana 3
12
en esta ventana un conjunto de datos creados o exportados, si el usuario así se lo ordena al programa. (2) En la parte superior derecha donde entre otras cosas, podemos observar el historial “History” de todos los procesos, objetos, funciones, etc…que han sido utilizados y ejecutados ( Run (CTRL +R)), aun cuando estos hayan sido borrados o modificados desde el Script. Así también se puede observar desde “Enviroment” la lista de variables que han sido ejecutadas correctamente, y además podemos importar desde un directorio de nuestro computador una base de datos. (3) En la parte inferior izquierda tenemos la “R Console”, de la cual ya hemos hablado, pero que dentro de R Studio es conveniente que el uso esté dirigido únicamente para observar todos los resultados provenientes de los cálculos y de los objetos ejecutados desde el Script, esto debido a que de esta forma el trabajo será más organizado. (4) Finalmente, la parte inferior derecha, donde entre otras cosas nos ayuda a observar: los archivos “Files” dentro de nuestro computador desde los cuales estamos ejecutando y guardando nuestro trabajo, los gráficos “Plots” que hemos realizado desde el Script, los paquetes “Packages” que están instalados en R, los cuales al ser activados sirven para que se pueda hacer uso de los comandos que poseen dichos paquetes, que por lo general ayudan a procesar información para resolver un problema específico, y la ayuda “help”, la cual nos muestra información acerca de un objeto (comando o función) que se está utilizando, y cuyo funcionamiento no queda claro para el usuario. Así, para el ejemplo acerca de generar seiscientos números aleatorios que sigan una distribución de poissón con parámetro λ = 7 y visualizar en un histograma su distribución de probabilidad, la apariencia que tendría este pequeño ejercicio en RStudio sería:
13
Figura 2.5
Y claramente podemos observar como después de escribir los comandos para este pequeño ejercicio en la ventana 1, se puede visualizar en la ventana 3 los resultados, es decir los 600 números aleatorios, y en la ventana 4 la gráfica (histograma) En adelante se escribirá únicamente el o los comandos y códigos que deben ir en la ventana 1, y el lector deberá saber que sus resultados numéricos se muestran en las ventanas correspondientes Al momento de escribir un código podemos escribir luego del signo “#” cualquier comentario, y al momento de mandar a correr el programa dichos comentarios no serán tomados en cuenta, y no afectarán en el proceso de cálculo x shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.9845, p-value = 0.2935
Sin lugar a duda debemos suponer que estos valores son calculados a partir de ecuaciones y procedimientos matemáticos, los cuales para ser ejecutados dentro de R (o cualquier otro lenguaje de programación) deben ser previamente escritos como un algoritmo, este algoritmo es el que se mostrará al aplastar la tecla F2, luego de seleccionar el comando (sin incluir los paréntesis), y es el que se muestra a continuación:
15
Figura 2.6
Es importante recalcar que el código que se muestra es únicamente de lectura y el usuario no cuenta con los permisos para modificarlo. En la mayoría de ocasiones sucede que no conocemos cómo aprovechar en su totalidad algún tipo de comando que sea de nuestro interés, en estos casos conviene pedir ayuda al mismo programa, de tal forma que este nos pueda facilitar entre otras cosas una breve descripción del comando, ejemplos de cómo usarlo, descripción de los argumentos del comando, la forma de visualizar diferentes resultados específicos que puedan ser de provecho, e incluso algún tipo de manual en caso de existir. En particular analizaremos a continuación la forma de utilizar los argumentos, y la forma de visualizar resultados específicos que pueda proveer algún comando.
2.4.1. Argumento de los Comandos: Un argumento o parámetro, son los distintos valores que el usuario puede escribir en el comando (dentro de los paréntesis), y que constituyen la información de entrada o valores independientes, en función de los cuales se calculan valores específicos basados en una función de interés.
16
Por lo general suele suceder que no sabemos cómo ingresar en el comando toda la información que desearíamos para que este pueda entender precisamente lo que deseamos calcular, en este caso al seleccionar el comando y aplastar la tecla “F1”, en la ventana 4, dentro de la pestaña “help” aparecerá la ayuda que se necesita acerca de todos los argumentos (obligatorios y no obligatorios) que nos permite ingresar el comando. Para explicar el uso que se le debe dar a esta ayuda lo ilustraremos con el siguiente ejemplo: Supongamos que deseamos dibujar una función cuadrática “2x 2 – 1”, para lo cual utilizamos el comando “plot( )”, sin embargo, no conocemos cómo ingresar los datos de entrada, por lo que seleccionamos el comando sin los paréntesis y aplastamos la tecla F1 (otro modo de solicitar la ayuda es escribiendo el nombre del comando en la parte superior derecha de la pestaña help), y entonces se mostrará la siguiente información respecto a los argumentos:
17
Arguments the coordinates of points in the plot. Alternatively, a single plotting structure, function or any Robject with a plot method can be provided. y the y coordinates of points in the plot, optional if x is an appropriate structure. ... Arguments to be passed to methods, such as graphical parameters (see par). Many methods will accept the following arguments: type what type of plot should be drawn. Possible types are
"p" for points, "l" for lines, "b" for both, "c" for the lines part alone of "b", "o" for both ‘overplotted’, "h" for ‘histogram’ like (or ‘high-density’) vertical lines, "s" for stair steps, "S" for other steps, see ‘Details’ below, "n" for no plotting.
All other types give a warning or an error; using, e.g., type = "punkte" being equivalent to type = "p" for S compatibility. Note that some methods, e.g.plot.factor, do not accept this. main an overall title for the plot: see title. sub a sub title for the plot: see title. xlab a title for the x axis: see title. ylab a title for the y axis: see title. asp
Donde podemos observar que la ayuda sugiere que todos los argumentos posibles y/x aspect ratio, see plot.window. en la funciónthe son: “x”, “y”, “type”, “main”, “sub”, “xlab”, “ylab” y “asp”; sin embargo
el único obligatorio es el argumento “x”, el cual al estar solo es el rango de la función que toma valores en el eje de las y, por lo que bien se podría asignar un
18
vector “x” cualesquiera y graficarlo con este comando, en este caso generaremos un vector de una secuencia desde -10 hasta 10: > x x [1] 10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
Y al ejecutar el comando “plot(x)”, se genera el gráfico que se muestra en la figura 2.7 Figura 2.7
Sin embargo esta gráfica no es la que deseamos, es decir la gráfica de la función “2x2 – 1”, que se plantea en el presente ejercicio, pero la ayuda de los argumentos nos muestra que si al comando plot le aumentamos un argumento “y” con la función que queremos graficar, obtendremos el resultado deseado. En este sentido entonces escribimos > x y plot(x,y)
El cual me mostrará la gráfica que se muestra en la figura 2.8
19
Figura 2.8
Como se puede apreciar hemos conseguido la gráfica de parábola de la función cuadrática, que por defecto grafica los pares ordenados como puntos vacíos. Es interesante ahora observar que el siguiente argumento es “type”, el cual como dice en la ayuda, nos ayuda a definir con qué tipo de forma me interesa que sean graficados los pares ordenados formados, en este caso “p” para puntos, “l” para líneas, “b” para puntos y líneas (ambos), “c” para líneas entre cortadas, “o” para puntos y líneas pero sobrepuestas,… etc. En este ejemplo escribiremos el guion de tal forma que dibuje líneas entre cortadas, el cual nos dará como resultado el gráfico de la figura 2.9 > plot(x,y,type = “c”)
20
Figura 2.9
Finalmente la ayuda me indica que los argumentos:
“main”, servirá para poner un título a la gráfica
“sub”, para un subtitulo
“xlab”, para un título al eje de las “x”
“y lab”, para un título al eje de las “y”
Por ejemplo, a continuación graficamos la función en puntos y líneas sobrepuestas que como título tenga “Gráfica de una función cuadrática”, como subtítulo “2x^2 - 1”, como etiqueta en el eje de las x “eje x” y como etiqueta en el eje de las y “eje y”; y entonces observamos la gráfica de la figura 2.10 > plot(x,y, type = "o",main="Gráfica de una función cuadrática",sub="2x^2-1",xlab="eje x",ylab="eje y")
21
Figura 2.10
2.4.2.Visualización de los valores de los comandos Cuando ejecutamos un comando, éste puede darnos distintos resultados (o valores) que son de interés para realizar algún tipo de análisis, sin embargo hay ocasiones en que de toda la gama de resultados que nos podría ofrecer cierto comando, tal vez estemos interesados tan solo en 1 o 2. La información acerca de cuáles son todos los posibles resultados que un comando puede ofrecer, incluida las especificaciones de cada uno de ellos, se la puede visualizar en la ayuda “help (F1)”, dentro de la ventana 4, de la misma manera y en el mismo cuadro donde aparecen los argumentos del comando (idéntico a lo visto en la sección 1.4.1), bajo el subtítulo “Values”. Así entonces luego correr un cierto comando, éste por defecto arrojará todos los resultados posibles, pero si después del comando se escribe el símbolo de dólar “$”, y a continuación el nombre del valor que deseo que aparezca, al mandar a correr, se visualizará únicamente la respuesta con el valor que se escribió luego del símbolo $. Para aclarar lo dicho de una mejor manera a continuación se realiza un ejemplo: Existe un comando llamado “shapiro.test( )”, que sirve para realizar una prueba de hipótesis con el propósito de verificar si un grupo de datos proviene o no de una
22
distribución normal2 , donde el único argumento que necesita este comando es un vector que contenga los datos a ser probados, entonces cuando buscamos la ayuda acerca de este comando, se muestra la siguiente información respecto a los valores:
Value A list with class "htest" containing the following components:
statistic the value of the Shapiro-Wilk statistic. p.value
an approximate p-value for the test. This is said in Royston (1995) to be adequate forp.value < 0.1.
method
the character string "Shapiro-Wilk normality test".
data.name a character string giving the name(s) of the data. Si corremos este comando, sin tomar en cuenta ningún valor, sino únicamente el comando con su argumento, observamos los siguientes resultados: > a shapiro.test(a) Shapiro-Wilk normality test
data: a W = 0.9526, p-value = 0.6992
El nombre de la prueba (Shapiro-Wilk normality test), el vector del cual se hizo la prueba (a), el estadístico de prueba (W = 0.9526), y el valor P (p-value = 0.6992); es decir todos los que se muestra en los valores “value” del cuadro de ayuda. Sin embargo si queremos visualizar únicamente el estadístico de prueba escribimos:
2
No es de interés en el presente capítulo hablar o explicar a detalle esta prueba estadística, lo único que nos interesa es tratar de explicar el correcto uso en general de los comandos, a partir de este comando específico
23
> a shapiro.test(a) $ statistic W 0.9525893
Si queremos visualizar únicamente el valor p: > a shapiro.test(a)$ p.value [1] 0.6991811
O tal vez tan solo quisiéramos saber el nombre de la prueba: > a shapiro.test(a)$ method [1] "Shapiro-Wilk normality test"
2.5.
Los Paquetes en R
Un paquete o librería no es sino un conjunto de funciones o comandos desarrollados, que tienen en común que están perfeccionados para resolver problemas particulares, por lo que mediante su uso podemos obtener resultados para necesidades específicas, según sea el ambiente de trabajo o área en la cual nos estemos desenvolviendo. Así por ejemplo si alguien estuviera trabajando en una rama específica de la estadística como las gráficas en el control estadístico de calidad, la recomendación sería instalar y activar el paquete “qcc”, el cual ofrece comandos para realizar por ejemplo cartas de control, diagramas de Pareto, cálculo de límites de control, etc… y otros comandos que servirán específicamente para esta especialidad, así dentro de esta librería encontramos el comando pareto.chart(), el cuál será utilizado para dibujar diagramas de Pareto. Dentro del computador los paquetes se descargan en una carpeta llamada “library”, para visualizar el directorio de esta carpeta debemos ejecutar el comando “.libPaths()” desde un script (ventana superior izquierda), e inmediatamente se mostrará dicho directorio en la RConsole, tal como muestra la figura 2.11
24
Figura 2.11
Y de esta forma podemos saber que los paquetes instalados en el PC de nuestro computador
para
R,
los
podemos
encontrar
en
el
directorio
"C:/ProgramFiles/R/R-3.1.2/library" No es lo mismo instalar que activar un paquete.- Cuando instalamos R por primera vez, se instalan por defecto un conjunto de paquetes tales como boot, class, cluster, etc… sin embargo el usuario de R puede instalar otros paquetes que son aportes de investigadores para ciertas áreas, principalmente relacionadas al análisis de datos. Para instalar un paquete, simplemente tenemos que entrar a la opción “Install”, que se encuentra en la ventana 3 del RStudio, y escribir el nombre del paquete en el cuadro de diálogo que aparece (Figura 2.12), a continuación clic en “Install” del cuadro de diálogo, y el paquete quedará automáticamente instalado y se guardará en la carpeta “library” de su computador
25
Figura 2.12
Entonces, desde la pestaña “packages” de la ventana 4 del RStudio podemos observar al paquete “car” el cual ya se encuentra en la lista. El usuario podrá hacer uso de los distintos comandos con los que cuenta este paquete solo si lo activa. La manera de activarlo es muy sencillo, solo tiene que seleccionar el paquete y poner visto √ en el cuadro a su izquierda (Figura 2.13) Figura 2.13
Si el usuario no activase el paquete, cuando corra los comandos que este posee, R le dará el aviso que no ha podido encontrar dicho comando.
26
Es importante tener en cuenta que una vez que usted activa un comando y lo utiliza, y luego de cerrar su sesión de RStudio regresa después de un tiempo para intentar utilizarlo, usted debe volverlo a activar. Algunos pocos ejemplos de paquetes existentes en R y que son de gran utilidad son: Rcmdr o también conocido como R Comander, que sirve para realizar algunos gráficos y cálculos estadísticos sin necesidad de escribir en un script ningún comando o función, sino que más bien tan solo ingresando una matriz de datos, lo único que debemos hacer es seleccionar el cálculo que queremos que se realice e inmediatamente los resultados aparecerán. ggplot2, que es un paquete que contiene comandos que nos ayudará a realizar gráficas complejas con varias capas para que sea más fácil de interpretar y mejore la estética y didáctica de la presentación rgl, que nos ayuda a realizar gráficos interactivos y figuras geométricas en 3D qcc, que es un paquete que nos brinda comandos para realizar gráficos para el control estadístico de la calidad, como diagramas de Pareto cartas de control, de atributos… etc SQLdf, que nos permite cargar bases de datos pero además realizar consultas foreing, que nos permitirá importar desde otros paquetes estadísticos una base de datos que se encuentre ya realizada aspect, que nos facilita comandos para realizar análisis multivariante de la información En fin, hasta la actualidad existen 6097 paquetes disponibles, para cada uno de los cuales existe un manual de referencia en formato .pdf, y un grupo de investigadores los cuales año tras año siguen realizando sus aportes (paquetes), con el fin de enriquecer esta librería. Para cada uno de estos paquetes se podría elaborar un libro tan solo para ver la relación entre las diversas
técnicas
estadísticas existentes, y el soporte para cálculos y gráficas que tiene cada librería con respecto a las técnicas, de hecho existen ya algunos libros basados en los
27
paquetes existentes. Es interesante hacer notar que cada uno de estos paquetes son diseñados para resolver problemas que en su gran mayoría tienen que ver con el análisis de la información, por lo que se podría decir que este software es netamente estadístico. La lista de todos los paquetes, así como la explicación respectiva acerca de su funcionamiento se puede encontrar en la siguiente dirección http://cran.rproject.org/web/packages/index.html Para obtener ayuda acerca del paquete que queremos utilizar, basta con hacer clic sobre el nombre de dicho paquete e inmediatamente en la pestaña “help” aparecerá toda la ayuda disponible
2.6.
Ingresando Información en R
2.6.1. Variables Para asignar una variable, a cualquier objeto, utilizaremos el operador de asignación “->”, o en sentido inverso “ 2 -> x
U otra opción sería: > x x x
28
Y así para hacer por ejemplo una suma entre 2 variables x e y, o cualquier operación matemática posible podríamos asignar: > x y suma suma
Cada una de las variables creadas se guardará en la pestaña “Enviroment” de la ventana 2. Así como el historial de los procesos que se corran se guardarán en la pestaña “History” de la misma ventana.
2.6.2.Vectores Se trata de la estructura de datos más sencilla, puesto que es una matriz de dimensión “1 x p”, si lo quisiéramos ver como un vector fila, o una matriz “p x 1”, si se tratara de un vector columna. Existen varias formas en R de crear un vector, las más comunes son: Con la función “c( )”, que en realidad se usa para concatenar objetos pero que es muy útil al momento de proporcionar un vector. Así por ejemplo, podríamos crear un vector que contenga los números “3 5 6 7 8 3 4”, mediante > x x[5] [1] 8
Así mismo, en otra variable podríamos asignar un vector, pero ahora con elementos no numéricos, como se muestra a continuación:
29
> y y [1] "Pablo" "Anita" "Rosita" "Paco" "Carmen" "Josué" "David"
Y de igual forma para poder acceder a un elemento de un vector, por ejemplo el 2º, escribimos: > y[2] [1] "Anita"
Creando un vector que sea una secuencia de números bajo un orden establecido, esto lo podemos lograr a través del comando seq( ). Por ejemplo podríamos interesarnos en generar una secuencia de números que empiecen desde el 1 y terminen en 9, en saltos de 1 en 1 (1 2 3 4 5 6 7 8 9), mediante: > seq(1,9) [1] 1 2 3 4 5 6 7 8 9
Otros ejemplos de sucesiones que nos podrían interesar son: -
Generación de una secuencia de números impares empezando en 7 y terminando en 21: > seq(7,21,by=2) [1] 7 9 11 13 15 17 19 21
-
Generación de una secuencia de números que empiecen en 5 y terminen en 1, en saltos de 0.5: > seq(5,1,by=-0.5) [1] 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0
-
Números pares que empiecen en 10 y terminen en menos 10 > seq(10,-10,by= -2) [1] 10 8 6 4 2 0 -2 – 4 -6 -8 -10
30
En todos estos casos, note que no hemos asignado ninguna variable a los vectores, esto hará que los comandos se ejecuten automáticamente sin necesidad de mandarlos a correr, esto podría parecer más práctico, pero cuando se escribe un código grande es recomendable asignar variables a todos los vectores que estemos creando. Una desventaja por ejemplo es que no podemos encontrar un elemento de un vector si lo necesitamos, en cambio sí para crear la última secuencia se le hubiese asignado una variable, sería fácil por ejemplo encontrar su sexto elemento que es “-2” > x x [1] 10 8 6 4 2 0 -2 -4 -6 -8 -10 > x[7] [1] -2
Pueda que en este caso no resulte significativo encontrar o filtrar términos que a simple vista los podríamos hallar, sin embargo existe ocasiones donde se trabajará con miles de datos y será importante este tipo de instrucciones Con la función numeric( ), que crea un vector de ceros, tantas veces como se le indique al argumento de este comando. Por ejemplo si quisiéramos crear un vector con 5 ceros, escribimos: > numeric(5) [1] 0 0 0 0 0
Con la función rep( ), que crea un vector con un mismo número, tantas veces como se lo indique en su argumento. Por ejemplo si quisiéramos crear un vector que repita el número siete 12 veces, escribimos: > rep(7,12) [1] 7 7 7 7 7 7 7 7 7 7 7 7
Estas funciones que se han mostrado para crear vectores, están en su forma más simple, es decir poniendo el argumento básico, sin embargo al pedir ayuda sobre
31
cada función podemos observar los diferentes argumentos que nos es posible introducir en cada una de ellas, así como las distintas opciones de valores que nos es posible visualizar, tal como se indicó en el apartado 1.4.
2.6.3.Matrices Una matriz es un arreglo bidimensional de nxp elementos dentro de un conjunto ordenado, donde n representa el número de filas y p el número de columnas. Existen varias formas de crear matrices en R, sin embargo la más común es utilizando la función “matrix( )”. Los argumentos que contiene esta función son: “data”, “nrow”, “ncol”, “byrow” y “dimnames”, la forma de utilizar estos argumentos para crear matrices se explica a continuación: data en este argumento se colocarán todos los elementos que queremos que sean parte de la matriz, para hacerlo podemos utilizar cualquiera de las formas que hemos aprendido para crear un vector. Cuando utilizamos únicamente el argumento “data”, por defecto la matriz se crea con una sola columna y el número de filas igual al número de datos ingresados. > p p [,1] [1,] 2 [2,] 7 [3,] 8 [4,] 4 [5,] 7 [6,] 1 [7,] 6 [8,] 8 [9,] 1 [10,] 5
nrow Del grupo de datos ingresados, podemos notar que el número de filas es el número de elementos que se ingresa, sin embargo si solo deseamos que por ejemplo el número de filas sean 2, y que los demás datos
32
se encuentren repartidos por columnas, el argumento nrow, nos ayudará a definir lo dicho: > p p [,1] [,2] [,3] [,4] [,5] [1,] 2 8 7 6 1 [2,] 7 4 1 8 5
Para este ejemplo por defecto se crean 5 columnas, para que de esta forma se completen todos los datos que ingresamos, y de esta manera se crea una matriz 2 x 5. ncol Como podemos observar cuando definimos un número de filas, el número de columnas que se forman por defecto son todas las necesarias para que se puedan visualizar el número faltante de elementos ingresados, sin embargo si quisiéramos restringir el número de columnas para que sean por ejemplo solo 3, y de esta forma se ingresen solo los primeros números correspondientes, entonces utilizamos el argumento “ncol” > p p [,1] [,2] [,3] [1,] 2 8 7 [2,] 7 4 1
Sin embargo nótese que existe un mensaje de advertencia escrito con rojo, esto no quiere decir que hayamos utilizado mal el comando, solo nos advierte que el número de datos ingresados que para nuestro caso son 10, no es un múltiplo o submúltiplo del número de columnas indicadas, por tal motivo para nuestro ejemplo en particular existen elementos que ingresamos pero que al momento de formar la matriz no son tomados en
33
cuenta. El número de columnas perfectas para que se tome en cuenta todos los elementos ingresados en nuestro ejemplo serían 5. Si ingresáramos por ejemplo 6 columnas, nótese que los elementos se agotarían, entonces lo que por defecto hace R, es volver a tomar los primeros valores hasta que la matriz sea completada. Obviamente este mensaje de advertencia nuevamente aparecerá de color rojo > p p [,1] [,2] [,3] [,4] [,5] [,6] [1,] 2 8 7 6 1 2 [2,] 7 4 1 8 5 7
byrow Note que siempre que usted crea una matriz, por defecto los datos ingresados se ordenan por columnas. Cuando al argumento byrow se le asigna un valor lógico verdadero, es decir byrow = TRUE, estamos diciendo que los elementos se ingresen ordenadamente en la matriz por filas. > p p [,1] [,2] [,3] [,4] [,5] [1,] 2 7 8 4 7 [2,] 1 6 8 1 5
Si quisiéramos que los datos se ingresen ordenadamente por columnas, lo único que hacemos es asignar un valor lógico falso al argumento byrow, es decir byrow = FALSE
34
> p p [,1] [,2] [,3] [,4] [,5] [1,] 2 8 7 6 1 [2,] 7 4 1 8 5
dimnames Por defecto el nombre de las filas y columnas son únicamente los números enteros ordenados que corresponden, sin embargo cuando queremos dar un nombre específico como por ejemplo fila 1, fila2,… o col1, col2,…. Utilizamos el agumento dimnames concatenando como una lista a través del comando list( ) > p p col1 col2 col3 col4 col5 fila1 2 8 7 6 1 fila2 7 4 1 8 5
Dimensión de una matriz.- Para conocer la dimensión de una matriz ingresada, lo hacemos con el comando dim( ), el cual nos da como resultado un vector fila con 2 elementos, el primero de ellos indica el número de filas y el 2º el número de columnas: >p col1 col2 col3 col4 col5 fila1 2 8 7 6 1 fila2 7 4 1 8 5 > dim(p) [1] 2 5
A través de este comando podemos convertir un vector en matriz: El procedimiento es ingresar todos los datos que deseo que estén en la matriz como un vector, a continuación en el comando dim(x) asigno el número de filas y columnas que se desea obtener mediante el comando de concatenación c( ):
35
> x dim(x)x [,1] [,2] [,3] [1,] 3 7 4 [2,] 5 3 8
Para filtrar un elemento de una matriz tan solo hay que escribir el nombre de la matriz seguido de corchetes, dentro de los cuales escribimos el par ordenado que queremos localizar, y de esta forma el resultado nos arrojará el valor que se encuentra en la coordenada ingresada. Por ejemplo para nuestra matriz x anterior el par ordenado (2,3), está ocupado por el elemento 8: >x [,1] [,2] [,3] [1,] 3 7 4 [2,] 5 3 8 > x[2,3] [1] 8
Si lo que deseamos es filtrar toda una fila, lo que haremos es escribir dentro del corchete el número de la fila que queremos filtrar en la posición correspondiente a filas y dejamos en blanco la posición correspondiente a columnas. Por ejemplo si en la matriz x queremos filtrar la 2º fila escribimos > x[2,] [1] 5 3 8
Análogamente, si lo que queremos es filtrar toda una columna, escribimos dentro del corchete el número de la columna que queremos filtrar en la posición correspondiente a columnas y dejamos en blanco la posición correspondiente a filas. Por ejemplo si en la matriz x queremos filtrar la 1º columna escribimos: > x[ ,1] [1] 3 5
36
Para filtrar por ejemplo la 1º y 3º columna a la vez, escribimos: > x[ ,c(1,3)] [,1] [,2] [1,] 3 4 [2,] 5 8
2.6.4.
Operaciones Básicas con Matrices y/o vectores
En realidad un vector no es sino una matriz de dimensiones 1 x p, e inclusive un solo número se lo considera como una matriz de dimensión 1 x 1. Por tal motivo las operaciones que a continuación se detallan se consideran todas como operaciones con matrices, suponiéndose que son válidas para el caso más específico como son los vectores o números Operaciones con una sola matriz: Dentro de una misma matriz nos podría interesar, que entre sus elementos se realicen operaciones básicas, como por ejemplo la suma, el producto, la media, la varianza, la raíz cuadrada, el seno, coseno, o tangente de cada uno de sus elementos, etc… Los comandos que nos ayudan a realizar estas operaciones básicas son: sum(x) Calcula la suma de todos los elementos de la matriz x prod(x) Calcula el producto de todos los elementos de la matriz x max(x) Calcula el máximo valor de entre todos los elementos de la matriz x min(x) Calcula el máximo valor de entre todos los elementos de la matriz x which.max(x) Devuelve la posición del máximo valor de la matriz x which.min(x) Devuelve la posición del mínimo valor de la matriz x range(x) Calcula el rango, es decir el valor máximo y el valor mínimo length(x) Calcula el número de elementos que contiene la matriz x mean(x) Calcula la media de todos los valores de la matriz x median(x) Calcula la media de todos los valores de la matriz x
37
var(x) Calcula la varianza de todos los valores de la matriz round(x,n) Devuelve los valores de la matriz x, redondeados cada uno en n cifras decimales rev(x) Invierte el orden de los elementos de la matriz x sort(x) Ordena los elementos de la matriz x de manera ascendente rev(sort(x)) Ordena los elementos de la matriz x de manera descendente cumsum(x) Calcula la suma acumulada de los elementos de la matriz x cumprod(x) Calcula el producto acumulado de los elementos de la matriz x t(x) Devuelve la transpuesta de la matriz x diag(x) Devuelve la diagonal principal de la matriz x solve(x) Calcula la inversa de la matriz x eigen(x) Calcula los autovalores y autovectores de la matriz x sen(x) Calcula el seno de cada uno de los elementos de la matriz x cos(x) Calcula el coseno de cada uno de los elementos de la matriz x sin(x) Calcula el seno de cada uno de los elementos de la matriz x (se puede calcular también el coseno y tangente con cos( )y tan( ) respectivamente) asin(x) Calcula el arcoseno de cada uno de los elementos de la matriz x (se puede calcular también el arcocoseno y arcotangente con acos( )y atan( ) respectivamente) sqrt(x) Calcula la raíz cuadrada de cada uno de los elementos de la matriz x Operaciones con 2 matrices: Cuando se desea hacer operaciones básicas entre dos o en ocasiones más de dos matrices, los operadores lógicos y algunos comandos que nos ayudan son: x + y Calcula la suma de cada par de elementos de las matrices x e y respectivamente, que ocupan la misma posición en ambas matrices x - y Calcula la resta de cada par de elementos de las matrices x e y respectivamente, que ocupan la misma posición en ambas matrices
38
x * y Calcula el producto de cada par de elementos de las matrices x e y respectivamente, que ocupan la misma posición en ambas matrices x/y Calcula el cociente de cada par de elementos de las matrices x e y respectivamente, que ocupan la misma posición en ambas matrices x$*$y Calcula el producto matricial entre las matrices x e y
2.6.5. Ingresando una matriz de datos La forma más común que existe en R para ingresar una matriz de datos, donde las filas representan a los individuos, mientras que las columnas son las variables que se miden sobre cada uno de estos individuos es con la función data.frame( ). Por ejemplo si quisiéramos ingresar la información que se encuentra en la tabla 1.1, referente al peso (Kg), talla (cm) y sexo de 10 niños que acaban de nacer en un hospital de la ciudad, los pasos a seguir son los siguientes: Tabla 2.1 Información sobre recién nacidos
Ingresar cada una de las variables (x, y, z,…) como si fueran un vector. Se debe tener muy en cuenta que como todas las variables van a ser medidas sobre un mismo número de individuos, el número de datos que ingresemos en cada variable debe ser el mismo Escribir la función data.frame(x, y, z,…), en cuyo argumento se debe escribir el nombre asignado a cada una de las variables de interés. Es de
39
gran utilidad asignar algún nombre a la matriz que se formará a través de data.frame( ), en nuestro caso se llamará “datos” > peso talla sexo datos datos
peso 1 3.6 2 3.2 3 2.8 4 3.6 5 2.7 6 2.8 7 2.7 8 3.0 9 3.1 10 3.4
talla 46.5 44.1 48.1 46.4 41.1 41.8 41.0 42.3 42.5 43.1
sexo hombre hombre mujer hombre mujer mujer mujer mujer hombre hombre
Si por ejemplo quisiéramos ingresar una o más variables adicionales (por ejemplo tipo de parto) en la misma base de datos, volvemos a ingresar dichas variables como un vector y luego utilizando el mismo comando data.frame( ), colocamos en su argumento el nombre asignado a la base de datos anterior más la o las variables nuevas.
> parto datos datos peso 1 3.6 2 3.2 3 2.8 4 3.6 5 2.7 6 2.8 7 2.7 8 3.0 9 3.1 10 3.4
talla 46.5 44.1 48.1 46.4 41.1 41.8 41.0 42.3 42.5 43.1
sexo hombre hombre mujer hombre mujer mujer mujer mujer hombre hombre
parto normal normal normal cesárea cesárea normal normal cesárea cesárea cesárea
40
Si queremos observar la matriz de datos, en una forma más ordenada como la tenemos en la tabla 1.1, tan solo debemos escribir el comando View( ), en cuyo argumento se debe escribir el nombre que se le asignó a la matriz de datos creada Si queremos filtrar una variable en particular de la matriz de datos debemos escribir el nombre que asignamos a la matriz de datos, seguido del símbolo $, y a continuación el nombre de la variable que deseo filtrar, y adicional a esto podremos visualizar los niveles de esta variable. Por ejemplo si queremos filtrar la variable sexo con sus dos niveles (hombre y mujer); > datos$sexo [1] hombre hombre mujer hombre mujer mujer mujer mujer hombre hombre Levels: hombre mujer
Si queremos filtrar la matriz, de tal forma que me muestre la observación solo de hombres, procedemos de la siguiente forma: > datos[datos$sexo=="hombre",]
1 2 4 9 10
peso talla sexo parto 3.6 46.5 hombre normal 3.2 44.1 hombre normal 3.6 46.4 hombre cesárea 3.1 42.5 hombre cesárea 3.4 43.1 hombre cesárea
Lo que estoy dando, es una instrucción que indica que se filtre todas aquellas filas donde la variable sexo sea hombre en todas las columnas Tablas de frecuencias Para conocer el número de veces (frecuencia), con la que se repite una información, utilizamos el comando table( ), en cuyo argumento se escribe el nombre de la base de datos, seguido del símbolo “$”, y el nombre de la variable que deseo se calcule la frecuencia. Si quisiera por ejemplo saber con qué frecuencia ocurren tipos de parto de la matriz de datos que le denominamos “datos”:
41
> table(datos$parto) cesárea normal 5 5
Lo cual nos indica que de los 10 partos que hubo, 5 fueron por cesárea, y 5 por parto normal. Además podríamos realizar una tabla de frecuencias cruzadas entre dos variables, tan solo aumentando un segundo argumento que sería el nombre de la segunda variable de interés. Por ejemplo para conocer el tipo de parto que se produjo según si el recién nacido fue hombre o mujer. > table(datos$parto,datos$sexo)
cesárea normal
hombre mujer 3 2 2 3
Cuando queremos editar una matriz de datos lo podemos realizar directamente a través del comando edit( ), y al momento de cerrar la matriz de datos que se muestra en la figura 2.14, automáticamente la información editada se guardará > edit(datos)
42
Figura 2.14
2.6.6.
Importando una matriz de datos desde otro
tipo de archivo Se puede importar una matriz de datos desde prácticamente todos los formatos de datos como Excel (xlsx o xls), SPSS, MINITAB, ASCII, SQL, etc… Lo único que hay que tomar muy en cuenta al momento de importar datos, es que estos se encuentren almacenados en la ubicación donde se está guardando el workspace. Para conocer la ubicación se digita el comando getwd( ) > getwd() [1] "D:/Documents"
Por lo tanto siempre que quiera importar un documento, en el formato que sea, debo guardar este archivo en la carpeta que está indicada. Si quisiéramos cambiar de ubicación para guardar archivos debemos utilizar el comando setwd( ), en cuyo argumento se debe escribir el directorio en el que deseo guardar los archivos. Por ejemplo:
43
> setwd(C:/Usuarios/Pablo Flores/Mis documentos)
Aunque como ya mencionamos se puede importar información desde cualquier tipo de archivo, a continuación analizaremos como hacerlo desde los dos más comunes que son documentos de texto .txt, documentos de Excel .xlsx, y de SPSS .sav Importando Desde Un Archivo De Texto .txt Para importar desde esta forma de archivo podemos utilizar el comando “read.table( )”, el cual posee muchos argumentos, los cuales solucionan los distintos problemas que se podrían presentar el momento de importar los datos. A continuación se explicará los argumentos más importantes de este comando: read.table(file, header = , sep=””, dec = “”,…) file.- aquí se escribe el nombre del archivo que se desea importar header.- se escribe un valor lógico verdadero o falso, escribiremos TRUE cuando en el archivo de datos la primera columna corresponda al nombre de las variables, caso contrario se escribe FALSE sep.- se debe especificar cuál es el separados de una variable a otra, que por lo general suele ser un espacio” ”, pero también podría ser un punto”.”, una coma”,”, etc… dec.- Es el carácter que se usa en el archivo que se desea importar para separar los decimales que puede ser “.” “,” etc… row.names.- Sirve para dar nombre a las filas ingresadas como un vector col.names.- Sirve para dar nombre a las columnas ingresadas como un vector Por ejemplo en el directorio “C:/Usuarios/Pablo Flores/Mis documentos” de mi computadora se encuentra una matriz de datos en un archivo de texto, que contiene las variables cantón edad, sexo y número de habitantes medidas sobre 260 individuos, y se encuentran sin rótulos en las columnas; el archivo se denomina “Datos_Poblacion.txt”, entonces para importar esta matriz prosigo
44
a Directorio Directorio [1] "C:/Program Files/R/R-3.1.2/library/R.matlab/mat-files"
Asignamos a otra variable cualquiera el nombre del archivo de MATLAB que guardamos en el directorio antes descrito, esto lo hacemos mediante el comando file.path( ), en cuyo primer y segundo argumento obligatorios escribimos el directorio, y el nombre del archivo que queremos abrir con la extensión .mat respectivamente
46
> Nombre Nombre [1] "C:/Program Files/R/R-3.1.2/library/R.matlab/mat-files/Nombre_Archivo.mat"
Finalmente, en otra variable cualquiera leemos la matriz de datos de MATLAB, mediante el comando “matRead( )”, cuyo argumento es el nombre de la variable anterior, donde se guardó el nombre del archivo que se quiere importar (para nuestro caso “Nombre”): > data data
Ejemplo 2.1: Se crea en MATLAB un archivo con el nombre “ejemplo.mat”, el cual tiene tres matrices con los nombres X, Y, Z: 11 1 2 21 𝑌 = 31 𝑍=0 1 41 3 5 51 Importe este archivo desde MATLAB a R, en una variable denominada datos, y a 1 3 5 𝑋=4 6 7 8 10 11
continuación visualice las tres matrices en mención Solución: El código para realizar esta operación es el siguiente
47
> library(R.matlab) ## Activamos la librería R.matlab > directorio nombre datos datos ##Imprimimos los datos importados $X [,1] [,2] [,3] [1,] 1 3 5 [2,] 4 6 7 [3,] 8 10 11 $Y [,1] [1,] 11 [2,] 21 [3,] 31 [4,] 41 [5,] 51 $Z
[,1] [,2] [1,] 1 2 [2,] 0 1 [3,] 3 5 attr(,"header") attr(,"header")$description [1] "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed May 13 09:27:48 2015 " attr(,"header")$version [1] "5" attr(,"header")$endian [1] "little"
Como podemos observar en la variable datos se muestran las tres matrices importadas desde MATLAB. Finalmente si queremos visualizar una por una, solo tenemos que filtrarlas:
48
> X X [,1] [,2] [,3] [1,] 1 3 5 [2,] 4 6 7 [3,] 8 10 11 > Y Y [,1] [1,] 11 [2,] 21 [3,] 31 [4,] 41 [5,] 51
> Z Z [,1] [,2] [1,] 1 2 [2,] 0 1 [3,] 3 5
2.6.7. Matrices de Datos en R R por defecto tiene matrices de datos, las cuales están formadas por variables cuantitativas y/o cualitativas, y que pueden ser de ayuda para practicar diversas técnicas con ellas. Para saber cuáles son las matrices de datos existentes, procedemos a escribir el comando data( ), el cual desplegará una lista de todas las matrices existentes en la memoria dentro de una pestaña llamada “R Data Sets”: >data( )
Data sets in package ‘datasets’: AirPassengers 1949-1960 BJsales BJsales.lead (BJsales) BOD CO2 Plants
Monthly Airline Passenger Numbers Sales Data with Leading Indicator Sales Data with Leading Indicator Biochemical Oxygen Demand Carbon Dioxide Uptake in Grass
49
ChickWeight different diets DNase EuStockMarkets European Stock
Weight versus age of chicks on Elisa assay of DNase Daily Closing Prices of Major Indices, 1991-1998
Use ‘data(package = .packages(all.available = TRUE))’ to list the data sets in all *available* packages. En realidad son muchos más las bases de datos existentes, tan solo se muestral una pequeña parte de la lista
Para visualizar alguna matriz de datos basta con escribir el nombre de dicha matriz y mandarla a correr, inmediatamente aparecerán los datos que forman parte de la misma. Por ejemplo existe una matriz de datos llamada “chickwts”, la cual consta de 2 variables (peso y tipo de alimentación) medidas sobre 71 pollos. Para visualizar esta matriz de datos únicamente escribimos
chickwts, e
inmediatamente se despliega la siguiente matriz: Tabla 2.3
En realidad son 71 individuos pero por cuestión de espacio solo se muestran los 1a primeros
50
3. CAPÍTULO 3: FUNDAMENTOS DE MATLAB 3.1.¿Qué es MATLAB? MATLAB, proviene de las siglas “Matrix Laboratory”, y se lo puede catalogar como un programa interactivo, el cual posee múltiples aplicaciones para desarrollar algoritmos matemáticos los cuales dan solución principalmente a problemas de ingeniería. Al igual que R, nosotros podemos obtener una gran ventaja del software MATLAB en lo que análisis de datos se refiere, puesto que dentro de su parte programable también funciona con objetos que ya están definidos, y los cuales pueden ser manipulados o concatenados mediante operadores (aritméticos, lógicos, y/o comparativos), lo que nos ayudará a crear un programa completo que resuelva necesidades específicas. Por tanto a MATLAB, también lo veremos como un lenguaje de programación orientado a objetos, sin embargo cabe aclarar que el objetivo de este libro no es programar en el software, sino más bien utilizar los objetos que existen por defecto para que sean un soporte al momento de realizar un análisis estadístico (numérico y/o gráfico) de datos. MATLAB funciona interactuando directamente con el usuario a través de comandos, los más básicos para el manejo cotidiano del software son: clear Borrará la lista de variables con las que se haya estado trabajando sin que el usuario pueda dejar de visualizarlos clc Limpiará por completo la pantalla exit Saldrá del programa format long Mostrará los números en formato largo (15 decimales) format short Mostrará los números en formato corto (4 decimales), este formato utiliza el software por defecto format rat Muestra los números como fraciones format bank Muestra los números como cantidades de dinero con 22 decimales format short e Muestra los números en notación científica
51
who Muestra las variables que se están utilizando pwd Muestra el directorio del computador donde se está almacenando todo el trabajo realizado date Muestra la fecha clock Muestra la hora
3.2.
El entorno de MATLAB
El entorno de MATLAB, tiene la apariencia que se muestra en la figura 2.1, en el cual se muestran tres ventanas que son las principales “Commnad Window”, “Workspace” y “Command History”. En realidad existen otras ventanas que son muy importantes y de una gran utilidad, sin embargo no se hablará de ellas ya que lo único que nos interesa en este software es conocer y utilizar correctamente los comandos necesarios para los diversos análisis de datos que se abordará en los capítulos siguientes, para lo cual es necesario únicamente utilizar las ventanas que se mencionó. Figura 3.1
52
(1) La ventana “Comand Window”, que es la ventana donde el usuario puede interactuar con el programa, es decir se escriben los comandos y además se muestran los diferentes resultados, a excepción de los gráficos, puesto que estos aparecen en una ventana individual, en la cual se los puede editar. Es importante conocer que al escribir una instrucción en esta ventana, basta con aplastar la tecla “Enter”, para que dicha instrucción se ejecute o corra, sin embargo si quisiéramos que la instrucción se ejecute internamente pero no se muestre en la pantalla, antes de aplastar “Enter” debemos escribir la simbología punto y coma ( ; ) seguido de la instrucción. Por ejemplo tal vez si generamos un vector con mil o más números para luego sacar su media, resultará fastidioso que todos esos números se muestren, ya que lo que verdaderamente nos interesa es su valor promedio, y por ello tapamos el vector con el símbolo “;” y no hacemos lo mismo con el comando que mostrará la media >> x = 0:0.5:500; >> mean(x) ans = 250
(2) En la ventana “Workspace”, se guardarán todas las variables que se introduzcan, así como los diferentes resultados (3) En la ventana “Comand History”, se guardarán todos los comandos que se hayan utilizado, incluso especificados según la fecha de utilización La ventana 1 “Command Window”, es la más importante de todas, y es la que se utilizará en el presente texto, puesto que desde esta ventana podremos introducir la información que tengamos disponible, visualizar los resultados deseados, obtener ayuda acerca del funcionamiento de algún objeto, etc.
53
Cuando queremos hacer algún comentario acerca de lo que estamos haciendo, se utiliza el símbolo de porcentaje “%”, y a continuación se escribe dicho comentario con color verde, caso contrario el software producirá un error ya que lo interpretará como un objeto y no como un comentario >> x = 0:0.5:500; % al poner “;” no se visualiza el resultado >> mean(x) % Calcula la media del vector x ans = 250 % Respuesta de la operación
Es importante recalcar que aunque no lo haremos en el presente texto, dentro de MATLAB, podemos realizar programación para desarrollar modelos, funciones o incluso crear objetos que nos ayuden a resolver ciertas necesidades, esto se lo puede hacer en la ventana de “Scripts”. El uso de esta ventana es una herramienta potente de este software, puesto que al enlazar los objetos existentes o creados por el usuario, construimos modelos, y para ejecutarlos basta llamarlos desde el Comand Window, y como ya habíamos dicho los resultados se mostrarán en esta misma ventana.
3.3.
Los Comandos en MATLAB
El software MATLAB, posee comandos que son útiles para resolver muchos problemas que se pueden suscitar en el campo de la ingeniería, principalmente problemas matemáticos, de simulación y por supuesto dentro de ellos problemas estadísticos, y aunque este no es un software estadístico, posee muchos objetos que nos ayudan a realizar cálculos en este tópico. Para visualizar los distintos tópicos o campos en los que el software tiene comandos especializados, simplemente escribimos la palabra help en la ventana de comandos y después de ejecutarla (únicamente ENTER), se despliega en la misma pantalla todos los tópicos en los que MATLAB posee comandos. Son más de 400 tópicos o áreas en los que el software puede contribuir, por cuestiones de espacio a continuación solo se muestran un poco de ellos.
54
>> help HELP topics: sldo\sldoguis sloptim\sloptim sloptim\sloptguis sloptim\sloptobsolete slestim\slestguis slestim\slestim slestim\slestmex slestim\slestutil sldo\sldodemos sldodemos\optim sldodemos\estim sldo\examples sldv\sldv sldv\sldvdemos slvnv\slvnvdemos slvnv\rmidemos slvnv\simcovdemos iodata\iomap simulink\upgradeadvisor
stats\stats
- (No table of contents file) - (No table of contents file) - (No table of contents file) - (No table of contents file) - (No table of contents file) - (No table of contents file) - Simulink Design Optimization Estimation S-Function MEX-files. - (No table of contents file) - Simulink Design Optimization Demos. - (No table of contents file) - (No table of contents file) - (No table of contents file) - Simulink Design Verifier - (No table of contents file) - (No table of contents file) - (No table of contents file) - (No table of contents file) - (No table of contents file) - (No table of contents file)
- Statistics Toolbox
stats\classreg - (No table of contents file) stats\statsdemos - Statistics Toolbox --- Demos stm\stm - Simulation and Test Manager symbolic\symbolic - Symbolic Math Toolbox symbolic\symbolicdemos - (No table of contents file) systemtest\systemtest - SystemTest systemtest\systemtestdemos - SystemTest demonstrations and examples. intelhost\tfl - (No table of contents file) foundation\utils - (No table of contents file)
Sin lugar a duda los comandos que utilizaremos con mayor frecuencia en este texto son los que pertenecen al tópico “stats”. Para conocer cuáles son los comandos dentro de este o cualquier otro tópico, debemos ejecutar el comando help seguido del nombre del tópico, para nuestro caso por ejemplo al interesarnos conocer los comandos existentes en el tópico “stats” debemos escribir el comando “help stats” y se desplegará la lista de comandos existentes en distintos campos de la estadística
55
>> help stats Statistics Toolbox Version 8.2 (R2013a) 13-Feb-2013 Distributions. Parameter estimation. betafit binofit dfittool evfit expfit fitdist gamfit gevfit gmdistribution gpfit lognfit makedist mle mlecov nbinfit normfit paretotails poissfit raylfit unifit wblfit
- Beta parameter estimation. - Binomial parameter estimation. - Distribution fitting tool. - Extreme value parameter estimation. - Exponential parameter estimation. - Distribution fitting. - Gamma parameter estimation. - Generalized extreme value parameter estimation. - Gaussian mixture model estimation. - Generalized Pareto parameter estimation. - Lognormal parameter estimation. - Make probability distribution. - Maximum likelihood estimation (MLE). - Asymptotic covariance matrix of MLE. - Negative binomial parameter estimation. - Normal parameter estimation. - Empirical cdf with generalized Pareto tails. - Poisson parameter estimation. - Rayleigh parameter estimation. - Uniform parameter estimation. - Weibull parameter estimation.
Probability density functions (pdf). betapdf - Beta density. binopdf - Binomial density. chi2pdf - Chi square density. evpdf - Extreme value density. exppdf - Exponential density. fpdf - F density. gampdf - Gamma density. geopdf - Geometric density. gevpdf - Generalized extreme value density. gppdf - Generalized Pareto density. hygepdf - Hypergeometric density. lognpdf - Lognormal density. mnpdf - Multinomial probability density function. mvnpdf - Multivariate normal density. mvtpdf - Multivariate t density. nbinpdf - Negative binomial density. ncfpdf - Noncentral F density. nctpdf - Noncentral t density. ncx2pdf - Noncentral Chi-square density. normpdf - Normal (Gaussian) density. pdf - Density function for a specified distribution. poisspdf - Poisson density. raylpdf - Rayleigh density. tpdf - T density. 56 unidpdf - Discrete uniform density. unifpdf - Uniform density. wblpdf - Weibull density.
Por cuestiones de espacio solo se muestran los comandos existentes en el campo de estimación de parámetros, y funciones de densidad de probabilidad, sin embargo el software posee un sin número de comandos para otros campos de la estadística tales como: Distribuciones acumuladas de probabilidad Valores críticos de las distribuciones de probabilidad Generación de números aleatorios Estadísticos (en general) Estadísticos Descriptivos Análisis de Varianza Regresión Lineal Regresión no lineal Gráficas de regresión Diseño de experimentos Procesos de control estadístico de calidad Análisis de Clúster Técnicas de reducción de la dimensión Gráficos estadísticos Métodos Multivariados Árboles de decisión Pruebas de hipótesis Funciones no paramétricas Procesos de Markov Etc… Note que hasta ahora no conocemos como funciona un comando en particular, es decir no conocemos cuáles son los argumentos necesarios ni los resultados que este producirá. Para conocer específicamente el comando solo tenemos que ejecutar help, seguido del comando, e inmediatamente se podrá visualizar la ayuda disponible para dicho objeto, y en la gran mayoría de casos inclusive un documento de ayuda donde no solo explica la forma de usar el comando, sino que
57
además también se puede apreciar las definiciones matemáticas estadísticas de la función. En MATLAB para separar los argumentos de un comando utilizamos el símbolo de coma “,”. Por ejemplo, dentro del campo de las funciones de distribución de probabilidad3, encontramos el comando “normpdf”, el cual nos ayuda a estudiar la distribución de probabilidad de una variable aleatoria normal o también llamad Gaussiana. Para saber cómo funciona este comando entonces ejecutaremos “help normpdf” >> help normpdf normpdf Normal probability density function (pdf). Y = normpdf(X,MU,SIGMA) returns the pdf of the normal distribution with mean MU and standard deviation SIGMA, evaluated at the values in X. The size of Y is the common size of the input arguments. A scalar input functions as a constant matrix of the same size as the other inputs. Default values for MU and SIGMA are 0 and 1 respectively. See also normcdf, normfit, norminv, normlike, normrnd, normstat.
Reference page in Help browser doc normpdf
Como podemos apreciar la ayuda nos dice que este comando calculará la función de densidad de probabilidad de un punto en una distribución normal con media MU y desviación estándar SIGMA, para lo cual los argumentos necesarios son: el valor o valores de los puntos que se desea calcular sus respectivas probabilidades, el valor de MU y el de SIGMA, pero que cuando no se ingrese los valores de MU y SIGMA, por defecto el software ingresará 0 y 1 respectivamente en estos argumentos, además nos muestra un documento donde se explica la función normal “doc normpdf”, así como una lista de otros comandos referentes a la función de probabilidad normal.
3
Este tema se lo aborda con mayor amplitud en …….
58
Supongamos entonces que queremos conocer la densidad de probabilidad que tiene el punto 63, en una variable que sigue una distribución normal con media MU = 54 y desviación estándar SIGMA = 16 >> normpdf(63,54,16) ans =
0.0213
3.4.
Ingresando Información en MATLAB
3.4.1. Variables Para asignar algún objeto a una variable, los hacemos mediante el símbolo de igualdad, y a continuación con un ENTER, se guardará el objeto en la variable asignada y además se mostrará en la misma pantalla. Por ejemplo si queremos asignar el número 7 a la variable “a” >> a = 7 a= 7
Para ingresar un objeto no numérico como por ejemplo el nombre de una persona debemos escribirlos dentro de los caracteres de comillas simples ‘ ’. >> b = ‘Pablo’ b=
Pablo
Al ejecutar objetos en las variables asignadas, estos automáticamente se guardan dentro de la memoria del computador, de tal forma que si en adelante se desea ejecutar alguna operación entre ellos simplemente se los vuelve a llamar y enlazarlos mediante el operador correspondiente. Por ejemplo realizamos una operación muy sencilla que consiste en asignar a 2 variables (“x” e “y”) 2 números diferentes (3 y 4) y luego almacenar su suma (7) en una nueva variable R:
59
>> x = 3 x= 3 >> y = 4 y= 4 >> R = x + y R= 7
Note sin embargo que lo que verdaderamente nos interesa visualizar es el resultado final de la suma, y no es tan importante observar los sumandos, ya que esto parece repetitivo e incluso resulta incómodo. La forma para que no se visualicen estos números pero que si se guarden en la memoria interna para luego realizar la operación es escribiendo el símbolo de punto y coma “;” después de escribir la variable >> x = 3; >> y = 4; >> R = x + y R= 7
Note que se muestran los valores únicamente de la variable R, que es la que nos interesa visualizar, y ya no se muestran los valores de los sumandos, pero si se guardan dentro de la memoria.
3.4.2.Vectores Existen diversas formas de ingresar un vector en MATLAB, pero las más comunes son las que se presentan a continuación: Generando un vector cuyos elementos son una secuencia numérica aritmética. Para esto tan solo asignamos a una variable tres números separados por el símbolo de dos puntos “:”, el primero es el número con el que empieza la secuencia; el segundo es el número que va a indicar el patrón que se va a ir sumando o restando progresivamente, y el tercero es el número con el cual se termina la secuencia. Por ejemplo supongamos
60
que vamos genera un vector cuyos componentes son la secuencia de números que empiezan en 20 y terminan en -20, pero van decreciendo de 5 en 5. >> x = 20:-5:-20 x=
20 15 10
5
0 -5 -10 -15 -20
Cuando no existe el número intermedio, por defecto el software genera la serie con saltos de uno en uno entre los dos límites que se declaren, así por ejemplo si quisiéramos una serie de números del -5 al 5, en saltos de uno, no será necesario declarar este salto, sino tan solo los límites de la serie: >> x = -5:5
x= -5 -4 -3 -2 -1
0
1
2
3
4
5
Creando directamente el vector, esto es escribiendo los elementos de dicho vector dentro de corchetes, separados por un espacio o por una coma (cualquiera de las dos opciones es válida). >> x = [7,3,5,4,6,1]
x= 7
3
5
4
6
1
6
1
>> x = [7 3 5 4 6 1] x= 7
3
5
4
Para insertar uno o más elementos adicionales al vector debemos volver a declarar el nombre del vector y colocar entre corchetes nuevamente el
61
vector seguido del o los elementos que quisiéramos agregar, por ejemplo si al vector x anterior queremos añadir los elementos 2 y 8, escribimos: >> x = [x,2,8]
x= 7
3
5
4
6
1
2
8
Si lo que queremos es encontrar un elemento del vector, que está ocupando cierta posición específica, lo que haremos es escribir el nombre de un vector seguido de paréntesis dentro de los cuales escribiremos el índice de la posición, por ejemplo en nuestro vector si quisiéramos encontrar cuál es el elemento que ocupa la tercera posición: >> x(3)
ans = 5
Si lo que quisiéramos no es visualizar el tercer elemento sino eliminarlo escribimos: >> x(3) = [ ] x=
7
3
4
6
1
2
8
Para visualizar el vector como columna, únicamente separamos los elementos con ; (punto y coma)
62
>> x = [7;3;5;4;6;1] x= 7 3 5 4 6 1
Para ingresar en vector de caracteres, lo hacemos poniendo cada caracter entre comillas simples, y en lugar de encerrar la información entre corchetes lo hacemos entre llaves. Por ejemplo ingresemos un vector de nombres: >> n = {'Pablo', 'Isaac', 'Anita', 'Javier'} n= 'Pablo' 'Isaac' 'Anita' 'Javier'
3.4.3.Operaciones Básicas con Vectores Lo que mostraremos a continuación es una lista de comandos, mediante los cuales se pueden realizar operaciones entre los elementos que contiene un vector y entre vectores length(x) Devuelve el número de datos del vector x max(x) Devuelve el máximo valor existente en el vector x min(x) Devuelve el mínimo valor existente en el vector x [t,p] = max(x) Devuelve el máximo valor existente y su posición [t,p] = min(x) Devuelve el mínimo valor existente y su posición ismember(valor,x) Determina si el valor escrito pertenece al vector x, el resultado será 1 si la respuesta es verdadera o 0 si es falsa sum(x) Calcula la suma de los elementos del vector x cumsum(x) Calcula la suma acumulada de los elementos del vector x prod(x) Calcula el producto de los elementos del vector x
63
cumprod(x) Calcula el producto acumulado de los elementos del vector x sqrt(x) Calcula la raíz cuadrada de cada uno de los elementos del vector x sin(x) Calcula el seno de cada uno de los elementos del vector x cos(x) Calcula el coseno de cada uno de los elementos del vector x tan(x) Calcula la tangente de cada uno de los elementos del vector x mean(x) Calcula la media de los elementos del vector x median(x) Calcula la mediana de los elementos del vector x var(x) Calcula la varianza de los elementos del vector x std(x) Calcula la desviación estándar de los elementos del vector x round(x) Redondea los elementos del vector x al entero más próximo roundn(x,-n) Redondea los elementos del vector x a tantas cifras decimales como se indica en n sort(x) Ordena los elementos del vector x en forma ascendente dsort(x) Ordena los elementos del vector x en forma descendente x’ Calcula la transpuesta de un vector k*x Multiplica cada uno de los elementos del vector x por una constante k x.^n Calcula la n – ésima potencia de cada uno de los elemento del vector x Es muy importante tener en cuenta el uso del punto en este tipo de operaciones, ya que si no se lo pusiera el software entendería que se quiere sacar la n – ésima potencia de la matriz, la cual es una operación que no existe x + y Suma los elementos del vector x con sus correspondientes del vector y, siempre que estos tengan la misma dimensión x – y Resta los elementos del vector y de sus correspondientes del vector x, siempre y cuando estos tengan la misma dimensión
64
x. * y Multiplica los elementos del vector x, con los correspondientes elementos del vector y, siempre y cuando estos tengan la misma dimensión x./y Divide los elementos del vector x para sus correspondientes elementos del vector y
3.4.4.
Matrices
En realidad todo la información que se ingresa en MATLAB, el software lo interpreta como una matriz, de hecho cuando ingresamos un vector en realidad estamos ingresando una matriz de dimensión “1 x p”, o “p x 1” según sea el caso, e inclusive si ingresamos un solo número o carácter, lo que estamos haciendo es ingresando una matriz de dimensión “1 x 1” Las formas más comunes para ingresar matrices se presentan a continuación: Directamente dentro de corchetes, separando el número de filas mediante el símbolo punto y coma, y el número de elementos dentro de cada fila con el símbolo de coma >> X = [2,3,4;7,3,1] X=
2 7
3 3
4 1
Utilizando ciertos comandos para formar matrices especiales: Con el comando “ones( )”, en cuyo argumento se escriben el número de filas seguido del número de columnas, y que produce una matriz de unos con tantas filas y columnas como se hayan indicado >> X = ones(2,3) X= 1 1
1 1
1 1
65
Con el comando “zeros( )” en cuyo argumento se escriben el número de filas seguido del número de columnas, y que produce una matriz de unos con tantas filas y columnas como se hayan indicado >> X = zeros(2,3) X=
0 0
0 0
0 0
Con el comando “eye( )” el cual crea una matriz cuadrada identidad cuya dimensión igual a la que se indica en su argumento >> X = eye(3) X= 1 0 0
0 1 0
0 0 1
Con el comando “magic( )”, el cual crea una matriz cuadrada cuya dimensión se la indica en el argumento del comando, y cuyos elementos están formados por los números que empiezan desde el 1 hasta el cuadrado del argumento ingresado distribuidos de forma aleatoria >> X = magic(4) X=
16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
Con el comando “rand( )”, en cuyo argumento se debe escribir el número de filas seguido por el número de columnas, y forma una matriz que tiene como elementos números aleatorios
66
X = rand(3,5) X= 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.6324 0.5469 0.1576 0.4854 0.1270 0.0975 0.9575 0.9706 0.8003
3.4.5. Operaciones con matrices Los comandos que se analizaron para realizar operaciones con vectores sirven de la misma forma para el caso de las matrices, sin embargo existen unos pocos comandos más que veremos a continuación, los cuales por su naturaleza sirven solo para el caso de matrices: size(X) Muestra la dimensión (filas y columnas) de una matriz X trace(X) Calcula la traza de la matriz X det(X) Calcula el determinante de la matriz X inv(X) Calcula la matriz inversa de X diag(X) Calcula el vector con la diagonal de la matriz X tril(X) calcula la matriz triangular inferior de X triu(X) calcula la matriz triangular superior de X Cuando se desee editar una matriz, la manera más sencilla de hacerlo es dando doble click sobre el nombre de dicha matriz, la cual aparece en la ventana Workspace, e inmediatamente aparecerá una especie de hoja electrónica a través de la cual se puede editar la información
3.4.6.
Importando una matriz de datos desde otro
tipo de archivo Importando desde un archivo de texto .txt o de Excel .xlsx Los tipos de archivos que son más comunes para importar a MATLAB son los archivos de texto .txt, y las hojas electrónicas de Excel .xlsx. Existen comandos que sirven para realizar esta tarea, sin embargo es mucho más sencillo utilizar la opción de importar texto que se encuentra en la barra de tareas del software.
67
Figura 3.2
A partir de esta opción podemos importar textos tanto con formato .txt como con formato .xlsx. Por ejemplo vamos a importar los datos de la tabla 1.1 referentes a los 10 niños a los cuales se les midió, su peso, talla, sexo y tipo de parto que se registraron al nacer. El primer paso será seleccionar el documento desde el directorio en el que se encuentra dentro de su computador. A continuación aparecerá un cuadro de diálogo donde se muestra además la matriz de datos a importarse Figura 3.3
Al dar click sobre el botón verde los datos se importarán al workspace del software variable por variable
68
Figura 3.4
Si usted desea observar una variable en especial tan solo debe escribir el nombre de dicha variable en el comand window, y aparecerá el vector columna con los datos de la variable en mención: >> Sexo Sexo = 'hombre' 'hombre' 'mujer' 'hombre' 'mujer' 'mujer' 'mujer' 'mujer' 'hombre' 'hombre'
Si desea observar toda la matriz de datos, simplemente escribimos una matriz cuyos elementos son los nombres de las variables que se encuentran en el Workspace:
69
>> X = [Nio,Peso,Talla] X= 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000
3.6000 3.2000 2.8000 3.6000 2.7000 2.8000 2.7000 3.0000 3.1000 3.4000
46.5000 44.1000 48.1000 46.4000 41.1000 41.8000 41.0000 42.3000 42.5000 43.1000
El defecto al ocupar esta opción es que solo se puede mostrar en una misma matriz variables del mismo tipo, es decir no se podría mostrar las variables cuantitativas y cualitativas a la vez Además usted tiene la siguiente opcion para importar datos desde excel: Desde Excel podemos importar los datos utilizando el comando “xlsread( )”, cuyo argumento es el nombre del archivo, pero siempre debemos cuidar que dicho archivo se encuentre en la carpeta del directorio en el cual está trabajando el software. Para saber cuál es el directorio, este se lo puede observar bajo la barra de herramientas en la parte superior izquierda o a su vez mediante el comando pwd >> pwd ans = C:\Program Files\MATLAB\R2013a\bin
Al visualizar los datos usted notará que solo se ha importado las variables de tipo cuantitativas Para importar una matriz de datos desde R a MATLAB, se recomienda copiar dicha matriz a un archivo de testo o de Excel y a continuación el procedimiento que ya se indicó
70
Importando desde un archivo de R En realidad no existe forma de importar directamente desde MATLAB un archivo o una base de datos creado en R a este software, sin embargo desde R se puede exportar datos al software MATLAB, con lo cual al final haremos lo mismo. El requisito necesario es tener activado el paquete “R.matlab”, ya que aprovecharemos el comando “writeMat( )” que es parte de este paquete. El procedimiento a seguir se detalla a continuación: En R, creamos una variable con los datos que deseamos exportar datos datos filename writeMat(filename, datos=datos) > filename # Imprimimos el directorio creado [1] "C:\\Users\\Pablo\\AppData\\Local\\Temp\\RtmpwpmriB\\file11401e826214 .mat"
A continuación pegamos este directorio desde cualquier buscador de carpetas en Windows, sin olvidar borrar la línea oblicua:
72
Automáticamente se abrirá el siguiente cuadro de diálogo:
Al aplastar “Finish”, desde MATLAB, es necesario tan solo mandar a llamar con el nombre a nuestra matriz (en nuestro caso el nombre es “datos”): >> datos datos = Time: [6x1 double] demand: [6x1 double]
Como puede notar aparecen las dos variables que son parte de nuestra matriz de datos exportada. Si queremos visualizar alguna de ellas, por ejemplo demand: >> datos.demand
ans = 8.3000 10.3000 19.0000 16.0000 15.6000 19.8000
O si queremos visualizar la matriz de datos completa:
73
>> datos = [datos.Time,datos.demand] datos = 1.0000 2.0000 3.0000 4.0000 5.0000 7.0000
8.3000 10.3000 19.0000 16.0000 15.6000 19.8000
74
4. CAPÍTULO 4: ANÁLISIS
DE
FRECUENCIAS
Y
REPRESENTACIÓN GRÁFICA DE DATOS 4.1. Variables y Datos Recordemos que la estadística descriptiva se encarga de describir (ya sea gráfica o numéricamente) los datos obtenidos, de tal forma que se puedan resumir y observar con la mayor claridad y exactitud posible. Por tanto la materia prima, o la razón de ser de la estadística descriptiva son los datos, sin ellos sería imposible realizar cualquier tipo de estudio estadístico, es entonces esencial conocer más acerca de ellos: Se puede definir a un dato como la información recolectada o medida, acerca de una propiedad que tiene un sujeto u objeto, por medio de algún plan de muestreo. Por ejemplo nos podríamos interesar en conocer el peso, la estatura, el sexo y la nacionalidad (propiedades) de un grupo de 30 estudiantes de una Universidad (sujetos); en este caso los sujetos son considerados las unidades de análisis sobre los cuales vamos a medir las propiedades ya descritas, y por medio de aquello recopilar la información. En el ejemplo dado, las propiedades (peso, estatura, sexo y nacionalidad) en realidad son las variables de interés en el estudio estadístico y los datos vienen a ser los distintos valores que pueden tomar estas variables, es así que los datos se pueden clasificar de acuerdo al tipo de variable de la que fueron tomados:
4.1.1. Clasificación de los datos Los datos, de acuerdo a la variable estadística de la cual provienen pueden ser de tipo cuantitativo o cualitativo Datos de tipo cuantitativo.-
Son valores numéricos medidos sobre las
unidades de análisis, por ejemplo el peso, la estatura, la edad, el caudal, temperatura, etc… Los datos cuantitativos pueden ser de tipo discreto o continuo
75
Datos de tipo discretos.- Son valores numéricos que pueden contarse en el campo de los números enteros. Por ejemplo la edad en años puede ser 0, 1, 2 , 3, 10, 50, 60, etc…
Datos de tipo continuo.- Son aquellos cuyos valores se encuentran dentro de una escala continua o de un intervalo. Por ejemplo la estatura medida en centímetros, el peso medido en gramos, etc…
Además, a los datos cuantitativos se los puede clasificar de acuerdo al nivel de medición que presenten, en este sentido entonces pueden ser de intervalo o de razón:
Se denominan datos de intervalo cuando dentro de la escala en que se están recogiendo los datos, el número cero no representa la ausencia de la propiedad que se está midiendo. Por ejemplo si se está midiendo la temperatura de una ciudad en grados Fahrenheit, cero grados Fahrenheit (0ºF), no representa la ausencia de temperatura, sino más bien es un valor de referencia para saber cuan frio o caliente se encuentra la ciudad
Se denominan datos de razón cuando dentro de la escala en que se están recogiendo los datos, el número cero si representa la ausencia de la propiedad que se está midiendo. Por ejemplo, si estamos midiendo la distancia que existe entre dos puntos determinados en centímetros, cero centímetros (0 cm), representa la ausencia de distancia entre estos dos puntos y en este caso lo que está ocurriendo es que los puntos se encuentran en la misma posición. Otro ejemplo podría ser los datos que se recogen del gasto diario en dólares que una persona hace en su vida cotidiana, $0 representa que en ese día la persona no gastó nada, es decir representa la ausencia de gastos
Datos de tipo cualitativo.- Son valores que no representan una cantidad sino más bien una cualidad o un atributo de las unidades de análisis, por ejemplo la información recolectada en las variables sexo, nacionalidad, etc… Estos datos se pueden clasificar de acuerdo a sus categorías en nominales u ordinales:
76
Los datos nominales son aquellos donde las categorías posibles de las variables son nombres o etiquetas usados para diferenciar un individuo de otro, no poseen ningún tipo de jerarquía ni ordenación. Por ejemplo los datos respecto al color de ojos de un grupo de estudiantes universitarios, pueden tener categorías como “negros”, “café”, “verdes”, “celestes”; note que las categorías no representan un orden alguno sino tan solo un nombre, una identificación.
Los datos ordinales son aquellos cuyas categorías posibles representan un orden de jerarquía. Por ejemplo los datos respecto a las calificaciones obtenidas en las categorías de “Sobresaliente”, “Bueno”, “Regular” y “Pésimo” muestran que aquellos estudiantes pertenecientes a la categoría “Sobresaliente”, son los más destacados de la clase, mientras que los que pertenecen a la categoría “Pésimo”, son aquellos con el menor rendimiento académico
Es importante tener en cuenta que aunque en algunos casos se pueden asignar números a los datos de una variable cualitativa (Por ejemplo en “sexo” se puede asignar el número 0 para mujeres y el número 1 para hombres), esto no pasa de ser una codificación, y no tiene ningún sentido o significado realizar algún tipo de operación con estos números, por ejemplo al sacar la media me dará un número comprendido entre 0 y 1 que carecerá de significado. Contrario a esto en las variables de tipo cuantitativo (Por ejemplo estatura), es posible realizar operaciones como por ejemplo encontrar una media aritmética. Reconociendo el tipo de datos con ayuda del software Tomemos como ejemplo la pequeña base de datos de la tabla 2.1 que tiene 3 variables (peso, talla y sexo), medido sobre 10 individuos. Recordemos que a esta base de datos la habíamos llamado “Datos4”, por lo que este será el nombre con la que la ingresaremos. Como nos damos cuenta los datos resultan de las 4
La manera en cómo se crea esta base de datos la analizamos ya en el capítulo 2
77
observaciones y mediciones que se hacen a estos 10 individuos en las distintas 3 variables. Si por ejemplo queremos saber qué tipo de datos son los que se encuentran en la variable “peso”, el comando “mode( )”, del software R nos ayuda: > datos peso talla 1 3.6 46.5 2 3.2 44.1 3 2.8 48.1 4 3.6 46.4 5 2.7 41.1 6 2.8 41.8 7 2.7 41.0 8 3.0 42.3 9 3.1 42.5 10 3.4 43.1
sexo hombre hombre mujer hombre mujer mujer mujer mujer hombre hombre
y fa fa x 1 2 3 4 6 8 7 10 3 10 1 1 > fr fr x 1 2 3 4 6 8 0.21875 0.31250 0.09375 0.31250 0.03125 0.03125 > faa faa 1 2 3 4 6 8 7 17 20 30 31 32 > fra fra 1 2 3 4 6 8 0.21875 0.53125 0.62500 0.93750 0.96875 1.00000
Podemos entonces observar que en los 32 automóviles existen 1, 2, 3, 4, 6 y hasta 8 carburadores, y que por ejemplo existen 7 autos con un carburador, 10 con 2 carburadores, etc… Además para cada uno de los datos se puede observar las frecuencias relativas. Ambas frecuencias se puede comprobar cumplen con las propiedades descritas al inicio, así la suma de todas las frecuencias absolutas es igual al número de datos que tiene la variable (32), y la suma de las frecuencias relativas es igual a 1. MATLAB posee el comando tabulate( ), con el cual podemos determinar la frecuencia absoluta y relativa de un conjunto de datos, y el comando cumsum( ), el cual nos ayudará a calcular las frecuencias absolutas y relativas acumuladas:
82
>> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2]; >> f = tabulate(x) Value Count Percent 1 7 21.88% 2 10 31.25% 3 3 9.38% 4 10 31.25% 5 0 0.00% 6 1 3.13% 7 0 0.00% 8 1 3.13% >> cumsum(f) ans = 1.0000 7.0000 3.0000 17.0000 6.0000 20.0000 10.0000 30.0000 15.0000 30.0000 21.0000 31.0000 28.0000 31.0000 36.0000 32.0000
21.8750 53.1250 62.5000 93.7500 93.7500 96.8750 96.8750 100.0000
4.2.3.Gráficas para representar frecuencias de datos simples: Las gráficas más comunes que se utilizan para describir las frecuencias de datos son: Gráfico de pastel y Gráfica de Barras. A continuación vamos a mostrar los comandos respectivos tanto en R como en MATLAB para realizar estos gráficos tomando como base los datos y los resultados del Ejemplo 4.1 Gráfica De Pastel Se trata de un gráfico circular subdividido en tantas partes como el número de datos distintos o categorías de la variable existan, donde cada subdivisión representa la frecuencia absoluta o relativa que tienen estas categorías, dando al final la suma de todo el pastel el número total de datos o el 100% de las subdivisiones según corresponda En R utilizamos el comando pie( )
83
> x fa pie(fa, main = "Gráfica de pastel de las frecuencias absolutas fa", labels = c("1 carb.","2 carb.","3 carb.","4 carb.","6 carb.","8 carb."))
Gráfica 4.1. Salida En R De Un Diagrama De Pastel
Además podemos realizar el gráfico de pastel 3D mediante el comando pie3D( ), para lo cual debemos previamente instalar y activar el paquete “plotrix” > library("plotrix") > pie3D(fa, main = "Gráfica de pastel de las frecuencias", labels = c("1 carb.","2 carb.","3 carb.","4 carb.","6 carb.","8 carb."))
Gráfica 4.2 Salida En R De Un Diagrama De Pastel en 3D
84
En MATLAB el comando también es pie( ). Note que en este software dado que el resultado de tabulate( ) es una matriz, antes de utilizar el comando debemos filtrar la 2º columna y a continuación dibujar el diagrama de pastel >> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2]; >> f = tabulate(x); >> fa = f(1:8,2)'
fa = 7 10
3 10
0
1
0
1
>> pie (fa)
85
Gráfica 4.3 Salida En MATLAB De Un Diagrama De Pastel Gráfica de pastel de frecuencias 3% 3%
data1 2 carb 3 carb 4 carb 6 carb 8 carb
22%
31%
31% 9%
Si el gráfico lo queremos hacer en 3D utilizamos la misma dinámica con el comando pie3( ) >> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2]; >> f = tabulate(x); >> fa = f(1:8,2)'
fa = 7 10
3 10
0
1
0
1
>> pie3(fa)
86
Gráfica 4.4 Salida En MATLAB De Un Diagrama De Pastel en 3D
Gráfica de Pastel en 3D de las frecuencias
3%
3% 1 2 3 4 6 8
31%
22%
carb carb carb carb carb carb
9%
31%
Es importante recalcar que la edición (título, etiquetas, etc...) de los gráficos en MATLAB, se lo puede realizar desde la ventana de gráficos en forma manual con todas las opciones que ahí se proporcionan. Gráfica De Barras Es una gráfica donde en el eje de las “x”, se ubican cada una de las distintas categorías, o distintos datos que tiene una variable; para cada una de estas categorías se levanta una barra sobre el eje de las “y”, tan alta como su respectiva frecuencia absoluta o relativa: En R el comando para graficar un diagrama de barras es barplot( ), cuyo argumento principal es el vector con los datos. El siguiente comando grafica un diagrama de barras incluyendo el título, aunque es importante recordar que hay muchos más argumentos que se pueden modificar como las etiquetas para los ejes, el color de las barras, el ancho de las barras, el espacio entre barra y barra, etc…
87
x x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2];
>> f = tabulate(x); >> fa = f(1:8,2)'; >> bar(fa)
88
Gráfica 4.6 Salida en MATLAB de un diagrama de barras
10 9 8 7 6 5 4 3 2 1 0
1
2
3
4
5
6
7
8
Ejemplo 4.2. En la base de datos de R existe una matriz de datos llamada , de las siglas “Chicken Weights by Feed Type”, donde se miden dos variables: “Weight” que es una variable numérica que nos proporciona el peso de 71 pollos; y “feed” que es una variable categórica que proporciona el tipo de alimento suministrado a estos animales. Después de filtrar la variable “feed”, halle una tabla de frecuencia para resumir esta información, grafique la frecuencia absoluta en un diagrama de barras y la frecuencia relativa en un diagrama de pastel Solución: En R:
89
> datos datos > x y z t s d m names(m) names(m) names(m) names(m)m Frec_abs Frec_abs_acum Frec_rel Frec_rel_acum casein 12 12 0.1690141 0.1690141 horsebean 10 22 0.1408451 0.3098592 linseed 12 34 0.1690141 0.4788732 meatmeal 11 45 0.1549296 0.6338028 soybean 14 59 0.1971831 0.8309859 sunflower 12 71 0.1690141 1.0000000 > library(plotrix) > barplot(x) > pie3D(t,radius = 2,main="Gráfica de pastel para las frecuencias relativas")
Todos los comandos utilizados en este código han sido ya analizados, a excepción de names( ), que lo que hace es arrojar los nombres de las variables que se encuentran en un data.frame, para lo cual solo necesita como argumento el nombre del data.frame. De la misma forma, el comando gsub( ) puede resultar nuevo para el lector, éste se encarga de cambiar los nombres a las columnas de un data.frame, para lo cual los argumentos principales son el antiguo nombre, el nuevo nombre, y el comando names( ), cuyo argumento debe ser el nombre de la matriz de datos que se desea cambiar sus rótulos en las columnas
90
Gráfica 4.7 Gráfica de Barras en R para las frecuencias absolutas del ejercicio 4.2
Gráfica 4.8 Gráfica de Pastel en R para las frecuencias relativas del ejercicio 4.2
En MATLAB: Lo que haremos en primer lugar es copiar la matriz de datos “chickwts” a un documento de testo, para a partir de esto importar dicha matriz al software, tal
91
como ya se lo indicó en el capítulo 3. A continuación el código nos ayudará a determinar el resultado para el ejemplo 4.2. >> tabulate(feed) Value Count horsebean 10 linseed 12 soybean 14 sunflower 12 meatmeal 11 casein 12
%Calcula la frecuencia relativa y acumulada Percent 14.08% 16.90% 19.72% 16.90% 15.49% 16.90%
>> x = tabulate(feed); % Asignamos la tabulación a una matriz >> f.abs = [x{:,2}]; %Filtramos la 2º columna que en nuestro caso es la frecuencia absoluta >> frec_abs_acm = cumsum(f.abs)’ % Esto nos permite calcular la frecuencia absoluta acumulada frec_abs_acm =
10 22 36 48 59 71 >> f.rel = [x{:,3}]; %Filtramos la 3º columna que en nuestro caso es la frecuencia relativa >> frec_rel_ac = cumsum(f.rel)' % Esto nos permite calcular la frecuencia relativa acumulada frec_rel_ac =
14.0845 30.9859 50.7042 67.6056 83.0986 100.0000 >> bar(f.abs)
92
Gráfica 4.9: Gráfica de Barras en MATLAB para las frecuencias absolutas del ejercicio 4.2 Gráfica de barras de las frecuencias relativas 14 12 10 8 6 4 2 0
horsebean
linseed
soybean
sunflower
meatmeal
casein
Gráfica 4.10 Gráfica de Pastel en MATLAB para las frecuencias relativas del ejercicio 4.2
Gráfica de pastel de las frecuencias relativas
horsebean linseed soybean sunflower meatmeal casein
17% 15% 14%
17% 17%
20%
Diagrama de tallo y hojas Este diagrama muestra los datos de una forma ordenada ascendente, donde en los llamados “tallos”, se colocan los principales dígitos o cifras del dato, y en las
93
“hojas” los restantes. Este gráfico sirve cuando por lo menos se cuenta con dos dígitos por dato, por ejemplo si tenemos el dato 47, el tallo sería el dígito 4 y la hoja el dígito 7; o si por ejemplo tenemos el dato 325, el tallo sería 32 y la hoja 5. Ejemplo 4.3. En R existe una base de datos llamada “attitude”, en donde se encuentra la variable “rating”, la cual tiene los siguientes datos: 43, 63, 71, 61, 81, 43, 58, 71, 72, 67, 64, 67, 69, 68, 77, 81, 74, 65, 65, 50, 50, 64, 53, 40, 63, 66, 78, 48, 85, 82. Dibuje un Diagrama de Tallo y Hojas para resumir esta información. Solución En R tenemos el comando “stem( )”, el cual nos ayuda a graficar este diagrama, cuyos argumentos más importantes son x en donde se debe indicar los datos de los cuales deseo realizar el diagrama; y scale que debe indicar cuantos dígitos deseamos tenga el tallo del diagrama, que para nuestro caso es 1 > stem(x = attitude$rating,scale = 1) The decimal point is 1 digit(s) to the right of the | 4 | 033 4|8 5 | 003 5|8 6 | 13344 6 | 5567789 7 | 1124 7 | 78 8 | 112 8|5
4.2.4.
Análisis de Frecuencias para datos agrupados
Cuando una variable posee una gran cantidad de datos, y además las categorías o distintos datos son muchos, es conveniente agrupar esta información por intervalos y determinar la frecuencia o repitencia de datos que existe dentro de dicho intervalo. Se suele utilizar con mayor frecuencia este análisis en variables de tipo cuantitativas continuas.
94
La tabla de frecuencias cuando agrupamos los datos es la misma que se presentó en la sección 4.2.1 con la única diferencia que en la primera columna no se coloca los datos simples sino los datos agrupados. La forma de crear los intervalos se detalla a continuación: a) Determinar el valor máximo y mínimo de los datos y calcular el rango o amplitud total, que es el valor máximo encontrado en la base de datos menos el valor mínimo 𝑅 = 𝑥𝑚𝑎𝑥 − 𝑥𝑚𝑖𝑛 b) Determinar el número de intervalos que se desea obtener.- El número de intervalos suele ser determinado a menudo por conveniencia del analista, sin embargo se recomienda que no sea menor que 5 ni mayor que 12. Si el analista no tiene claro el número de intervalos a generar puede aplicar la regla de Sturges: , donde n es el número de datos. c) Calcular el ancho del intervalo que se obtiene dividiendo el rango para el número de intervalos 𝑎=
𝑅 𝑛𝑖
Ejemplo 4.4. En R existe una base de datos llamada “BJSales”, la cual posee 150 datos acerca de la venta en dólares que ha hecho una tienda en ciertos periodos no especificados. Los datos son los que se muestran a continuación:
95
200.1 199.5 199.4 198.9 199.0 200.2 198.6 200.0 200.3 201.2 201.6 201.5 201.5 203.5 204.9 207.1 210.5 210.5 209.8 208.8 209.5 213.2 213.7 215.1 218.7 219.8 220.5 223.8 222.8 223.8 221.7 222.3 220.8 219.4 220.1 220.6 218.9 217.8 217.7 215.0 215.3 215.9 216.7 216.7 217.7 218.7 222.9 224.9 222.2 220.7 220.0 218.7 217.0 215.9 215.8 214.1 212.3 213.9 214.6 213.6 212.1 211.4 213.1 212.9 213.3 211.5 212.3 213.0 211.0 210.7 210.1 211.4 210.0 209.7 208.8 208.8 208.8 210.6 211.9 212.8 212.5 214.8 215.3 217.5 218.8 220.7 222.2 226.7 228.4 233.2 235.7 237.1 240.6 243.8 245.3 246.0 246.3 247.7 247.6 247.8 249.4 249.0 249.9 250.5 251.5 249.0 247.6 248.8 250.4 250.7 253.0 253.7 255.0 256.2 256.0 257.4 260.4 260.0 261.3 260.4 261.6 260.8 259.8 259.0 258.9 257.4 257.7 257.9 257.4 257.3 257.6 258.9 257.8 257.7 257.2 257.5 256.8 257.5 257.0 257.6 257.3 257.5 259.6 261.1 262.9 263.3 262.8 261.8 262.2 262.7 Con base a esta información genere una tabla de frecuencias para resumir la información: Solución: Como podemos observar existen muchos datos, los cuales en su gran mayoría se repiten una sola vez, por lo que hacer un análisis de frecuencia para cada uno de ellos no resumiría la información, es así que procedemos a agrupar los datos creando los intervalos de acuerdo a los pasos ya mencionados: a) Calculamos el rango: xmax = 198.6 xmin = 263.3 R = 198.6 -263.3 = 64.7 b) Determinamos el número de intervalos ni = 1+3.32*log(150) ni = 8.22 ≈ 8 Lo cual me sugiere que lo conveniente es construir 8 intervalos de clase. Hay que tener muy en cuenta que esta solo es una recomendación y que el
96
analista puede decidir tener el número de intervalos que más le pareciera conveniente c) Calculamos el ancho del intervalo: 𝑎=
64.7 8
𝑎 = 7.9 ≈ 8 Lo que me sugiere que el ancho de intervalo es 8 Los intervalos que se forman son por tanto deben ser 8 con un ancho de 8, y estos son: 198.6 – 206.6 206.7 – 214.7 214.8 – 222.8 222.9 – 230.9 231.0 – 239.0 239.1 – 247.1 247.2 – 255.2 255.3 – 263.3 Con los cuales puedo crear la tabla de frecuencias para datos agrupados: Frecuencia Frecuencia Frecuencia absoluta Frecuencia Relativa absoluta acumulada Relativa acumulada Datos (fa) (faa) (Fr) (Fra) 198.6 – 206.6 15 15 0,100 0,100 206.7 – 214.7 34 49 0,227 0,327 214.8 – 222.8 34 83 0,227 0,553 222.9 – 230.9 6 89 0,040 0,593 231.0 – 239.0 3 92 0,020 0,613 239.1 – 247.1 5 97 0,033 0,647 247.2 – 255.2 16 113 0,107 0,753 255.3 – 263.3 37 150 0,247 1,000 TOTAL 150 1,000
97
Haciendo el ejercicio en R: Para obtener resultados acerca de la frecuencia relativa para datos agrupados utilizaremos el comando “hist( )”, el cual realmente sirve para crear un histograma, pero internamente lo que hace es agrupar los datos y crear intervalos de tal forma que sirvan para hacer el gráfico. El comando posee un argumento denominado , el cual admite valores lógicos, y al poner en este argumento falso, aparecerán resultados de la frecuencia relativa de estos datos, específicamente bajo el valor . > datos fa fa $breaks [1] 190 200 210 220 230 240 250 260 270
$counts [1] 6 18 48 17 3 14 32 12 $density [1] 0.004000000 0.012000000 0.032000000 0.011333333 0.002000000 [6] 0.009333333 0.021333333 0.008000000
$mids [1] 195 205 215 225 235 245 255 265 $xname [1] "datos" $equidist [1] TRUE attr(,"class") [1] "histogram"
El valor es un vector que indica los límites de los intervalos creados por defecto en el software, en este caso lo que hace es un cálculo interno para crear estos intervalos. Como se puede apreciar los 8 intervalos que por defectos se crearon son:
98
“190 – 200”, “200 - 210”, “210 - 220”, “220 - 230”, “230 - 240”, “240 250”, “250 - 260” y “260 - 270”. Bajo el valor podemos notar que las frecuencias relativas en cada uno de estos intervalos son 6, 18, 48, 17, 3, 14, 32, y 12 respectivamente; las cuales no son las mismas que calculamos manualmente en un inicio, esto lógicamente se debe a que los intervalos creados por el software no son los mismos que nosotros habíamos planteado en un comienzo. Sin embargo bajo el argumento podemos ingresar un vector con los intervalos que deseemos, por ejemplo con el intervalo que originalmente lo hicimos en nuestro ejemplo, y además como solo nos interesa determinar las frecuencias escribimos: > datos a a [1] 198.6 206.6 214.7 222.8 230.9 239.0 247.1 255.2 263.3 > fa fa [1] 15 34 34 6 3 5 16 37
Con lo cual tal como podemos apreciar tenemos las mismas frecuencias en los intervalos que planteamos desde un comienzo. Finalmente un código que serviría para encontrar toda la tabla de frecuencia viene dado por:
99
> datos a Intervalos
View more...
Comments