análisis exploratorio de datos con ry minitab

Anuncio
ANÁLISIS EXPLORATORIO DE DATOS
CON R Y MINITAB
Paloma Maín Yaque1
Departamento de Estadística e I.O.
Facultad de Ciencias Matemáticas
Universidad Complutense de Madrid
1 ISBN:
978-84-692-6255-9
2
Índice general
I
Herramientas computacionales
9
1. INTRODUCCIÓN A R
1.1. Primeros pasos . . . . . . . . . . . . . . .
1.1.1. Zona de trabajo (W orkspace) . . .
1.1.2. Ayudas . . . . . . . . . . . . . . .
1.1.3. Scripts . . . . . . . . . . . . . . . .
1.1.4. Paquetes R . . . . . . . . . . . . .
1.1.5. Lenguaje R . . . . . . . . . . . . .
1.2. Vectores . . . . . . . . . . . . . . . . . . .
1.2.1. Vectores numéricos . . . . . . . . .
1.2.2. Operaciones aritméticas . . . . . .
1.2.3. Vectores lógicos . . . . . . . . . . .
1.2.4. Valores ausentes (“missing values”)
1.3. Matrices y arrays . . . . . . . . . . . . . .
1.3.1. Operaciones con matrices . . . . .
1.4. Bases de datos . . . . . . . . . . . . . . . .
1.4.1. Listas . . . . . . . . . . . . . . . .
1.4.2. Data frames . . . . . . . . . . . . .
1.5. Distribuciones de probabilidad . . . . . . .
1.6. Programación . . . . . . . . . . . . . . . .
1.6.1. Estructuras de control . . . . . . .
1.6.2. Funciones . . . . . . . . . . . . . .
11
11
11
12
13
14
15
18
18
19
21
21
22
24
28
28
29
32
33
34
35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2. INTRODUCCIÓN A MINITAB
2.1. Ventanas Iniciales . . . . . . . . . . . . . . . . . . . .
2.1.1. Ventana de la sesión (Session Window) . . . .
2.1.2. Ventana de datos (Worksheet) . . . . . . . . .
2.1.3. Ventana de Información General del Proyecto
Manager) . . . . . . . . . . . . . . . . . . . .
2.1.4. Ventana de Gráficos (Graphs) . . . . . . . . .
2.2. Procedimientos . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
37
. . . . . . 38
. . . . . . 38
. . . . . . 38
(Project
. . . . . . 40
. . . . . . 41
. . . . . . 43
3. PRÁCTICAS
45
3.1. Importar bases de datos . . . . . . . . . . . . . . . . . . . . . . 45
3.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
ÍNDICE GENERAL
3
II
Análisis de datos
49
4. INTRODUCCIÓN
51
4.1. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2. Cuestiones Generales . . . . . . . . . . . . . . . . . . . . . . . . 51
5. DESCRIPCIÓN DE DATOS UNIVARIANTES
5.1. Métodos cuantitativos . . . . . . . . . . . . . . .
5.1.1. Medidas de tendencia central . . . . . . .
5.1.2. Medidas de posición . . . . . . . . . . . .
5.1.3. Medidas de dispersión . . . . . . . . . . .
5.1.4. Medidas de asimetría y curtosis . . . . . .
5.1.5. Datos 1 . . . . . . . . . . . . . . . . . . .
5.1.6. Ejercicios . . . . . . . . . . . . . . . . . .
5.2. Métodos gráficos . . . . . . . . . . . . . . . . . .
5.2.1. Variables cualitativas . . . . . . . . . . . .
5.2.2. Variables cuantitativas . . . . . . . . . . .
5.2.3. Ejercicios . . . . . . . . . . . . . . . . . .
5.2.4. Manipulación de gráficos con R. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
53
53
53
53
54
55
57
60
65
65
65
66
79
6. DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.1. Métodos cuantitativos . . . . . . . . . . . . . . . . . . .
6.1.1. Matriz de datos . . . . . . . . . . . . . . . . . . .
6.1.2. Población (Modelo) . . . . . . . . . . . . . . . . .
6.1.3. Estadísticos . . . . . . . . . . . . . . . . . . . . .
6.1.4. Combinaciones lineales de variables . . . . . . . .
6.1.5. Medidas de variabilidad alrededor de X̄ . . . . . .
6.1.6. Coeficientes de asimetría y curtosis multivariantes
6.1.7. Manipulación de matrices con MINITAB . . . . .
6.1.8. Ejercicios con R . . . . . . . . . . . . . . . . . . .
6.1.9. Estudio de la variabilidad . . . . . . . . . . . . .
6.1.10. Comparación de asimetría y curtosis . . . . . . .
6.2. Métodos gráficos . . . . . . . . . . . . . . . . . . . . . .
6.2.1. Gráficos para dos variables . . . . . . . . . . . . .
6.2.2. Gráficos para tres variables . . . . . . . . . . . .
6.2.3. Operaciones con los gráficos anteriores . . . . . .
6.2.4. Perfiles Multivariantes . . . . . . . . . . . . . . .
6.2.5. Gráficos condicionados (Coplots) . . . . . . . . .
6.2.6. Ejercicios con MINITAB . . . . . . . . . . . . . .
6.2.7. Ejercicios con R . . . . . . . . . . . . . . . . . . .
6.3. Dependencia entre pares de variables cuantitativas . . . .
6.3.1. Métodos gráficos . . . . . . . . . . . . . . . . . .
6.3.2. Medidas cuantitativas . . . . . . . . . . . . . . .
6.3.3. Regresión lineal simple . . . . . . . . . . . . . . .
6.3.4. Regresión con R . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
83
83
83
83
84
86
87
87
88
91
97
100
101
101
101
102
102
102
103
106
111
111
112
113
116
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ÍNDICE GENERAL
6.3.5. Regresión con MINITAB . . . . . . . . . .
6.3.6. Ejemplo 3 . . . . . . . . . . . . . . . . . .
6.3.7. Ejemplo 4 . . . . . . . . . . . . . . . . . .
6.3.8. Ejemplo 5 . . . . . . . . . . . . . . . . . .
6.3.9. Regresión no paramétrica . . . . . . . . .
6.4. Dependencia entre pares de variables cualitativas
6.4.1. Contraste de dependencia . . . . . . . . .
6.4.2. Paradoja de Simpson . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
119
120
123
125
128
133
134
134
7. ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
7.1. Normalidad univariante . . . . . . . . . . . . . . . . . .
7.1.1. Gráficos de probabilidad (QQ-plots) . . . . . . .
7.1.2. Contrastes de bondad de ajuste . . . . . . . . .
7.2. Normalidad Bivariante . . . . . . . . . . . . . . . . . .
7.2.1. Procedimientos . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
137
. 137
. 137
. 141
. 144
. 144
8. TRANSFORMACIÓN DE VARIABLES
8.1. Transformaciones lineales . . . . . . . . .
8.1.1. Datos univariantes . . . . . . . .
8.1.2. Datos bivariantes . . . . . . . . .
8.2. Tranformaciones hacia la normalidad . .
8.2.1. Logit . . . . . . . . . . . . . . . .
8.2.2. Probit . . . . . . . . . . . . . . .
8.2.3. Box-Cox . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
147
147
147
147
148
148
148
148
9. DATOS ATÍPICOS Y AUSENTES
9.1. Tratamiento de datos atípicos . . . . .
9.1.1. Métodos de detección . . . . . .
9.1.2. Procedimientos de acomodación
9.2. Tratamiento de datos ausentes . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
153
153
155
156
158
ÍNDICE GENERAL
.
.
.
.
5
6
ÍNDICE GENERAL
PREFACIO
Este documento contiene el material recopilado durante varios cursos en
los que la profesora Paloma Maín ha impartido la asignatura de Análisis Exploratorio de Datos de la Licenciatura en Ciencias Matemáticas, en la Facultad
de Matemáticas de la Universidad Complutense de Madrid. En estos años la
asignatura ha ido evolucionando como lo está haciendo la práctica del análisis
de datos con la incorporación de nuevas técnicas que exigen el manejo de software estadístico para describir bases de datos de gran tamaño. En esta línea, lo
que realmente se pretende es la introducción de una forma actual de entender
esta primera etapa del análisis estadístico de datos. Efectivamente es un tema
que ha tenido un enorme desarrollo y es difícil recoger todos los aspectos en
una asignatura cuatrimestral de tres horas semanales o en cursos básicos, pero
de alguna manera hemos pretendido que los alumnos se encontrasen cómodos
a la hora de describir y efectuar un primer análisis de una base de datos relativamente compleja así como de afrontar el estudio y aplicación de las nuevas
técnicas que se les puedan presentar.
Por tanto se incluirá un breve introducción a las dos herramientas utilizadas MINITAB y R, que en nuestra opinión pueden ser representativos del
software estadístico en uso. Por un lado MINITAB como software comercial en
un entorno Windows, con la utilización de “persianas” y R como software libre
con la utilización de comandos estructurados en funciones. En la descripción
de los temas se utilizarán ambos para resolver los problemas correspondientes
incluyéndose las pantallas de ordenador con las soluciones.
El esquema general del contenido puede resumirse en dos bloques iniciales
que estudian las columnas de las bases de datos por separado, mediante las técnicas de análisis univariante y las columnas en su conjunto mediante el análisis
multivariante. Para estos dos análisis se utilizarán básicamente dos tipos de
procedimientos: gráficos y cuantitativos. Quizá sea en los métodos gráficos en
los que se ha experimentado el máximo avance motivado, en gran medida, por
el gran aumento de la capacidad gráfica en los ordenadores personales. De todas
formas no se puede olvidar la descripción y estudio de las medidas cuantitativas tan relevantes para los procesos posteriores de inferencia. En el apartado
dedicado a la descripción de datos multivariantes se tratará también una breve
introducción a los métodos de regresión para estudiar una forma de tratar la
cuestión de la dependencia entre las columnas de una base de datos.
Dado que en la aplicación de las técnicas anteriores es necesario efectuar ciertas hipótesis de normalidad en las observaciones, se incluirán ciertos
procedimientos que permiten evaluar si dichas hipótesis pueden considerarse
aceptables sobre las observaciones o si se debe realizar algún tipo de transformación sobre ellas y así poder aplicar las técnicas descritas .
En este punto y una vez estudiadas bases de datos correspondientes a probÍNDICE GENERAL
7
lemas reales se analizarán de forma particular ciertos tipos de datos que han
sido descartados en un primer análisis. Estos serán los datos atípicos, por estar
claramente alejados del bloque general de las observaciones y los datos ausentes
al no aparecer ningún registro en las celdas correspondientes. Cabe señalar que
no se pretenderá más que hacer una breve introducción, dada la gran amplitud
que han alcanzado dichos temas componiendo sendas monografías.
Para concluir, queremos dar un agradecido recuerdo a todos nuestros alumnos de estos cursos pasados por su entusiasmo juvenil que ha sido el estímulo
más importante para avanzar en nuestro trabajo. Con sus indicaciones se han
enmendado errores y perfilado más claramente muchos conceptos y ejercicios.
Espero que a los alumnos de los cursos futuros este trabajo les sirva para
completar su formación y les resulte agradable afrontar la materia que se les
propone.
8
ÍNDICE GENERAL
Parte I
Herramientas computacionales
9
1. INTRODUCCIÓN A R
El R puede ser considerado una implementación del lenguaje S, desarrollado
en Bell Laboratories y que forma la base del producto comercial S −P LU S. Los
primeros pasos de R se deben a Robert Gentleman y Ross Ihaka del Statistics
Department de la University de Auckland, aunque las sucesivas versiones son
controladas y desarrolladas por el R Development Core Team del que forman
parte muchos colaboradores en todo el mundo. Realmente el objetivo actualmente es la formación de equipos de colaboradores dedicados a la utilización de
R para distintas aplicaciones como el grupo de redes bayesianas gR, de visualización de datos multivariantes ggobi. y muchos más que aportan los diferentes
paquetes que pueden cargarse gratuitamente desde la página origen de todo
este proyecto de software libre www.r-project.org.
Hay una lista de correo para usuarios en español r-help-es, donde consultar
y comentar incidencias en el uso de R.
En resumen se podría considerar que los paquetes R proporcionan una
forma de manejar conjuntos de funciones o datos y sus documentación.
1.1. Primeros pasos
- R es un lenguaje y un entorno para efectuar cálculos estadísticos y análisis gráficos, de distribución libre que puede cargarse en www.r-project.org. Al
igual que la versión comercial S-Plus, está basado en el lenguaje S. Es completamente programable, siendo posible automatizar los procedimientos repetitivos
mediante scripts del usuario, también es fácil escribir las funciones que se
necesiten así como nuevos paquetes.
1.1.1. Zona de trabajo (W orkspace)
- El W orkspace en R contiene los datos y procedimientos de un determinado
trabajo o proyecto, así que después de arrancar con el fichero RGui.exe, es conveniente seleccionar un nuevo directorio de trabajo en la persiana F ile/Change
Directory, ya que por defecto se posiciona en el directorio en el que se ha instalado R, solapando los sucesivos trabajos. Al cerrar R se preguntará si se quiere
“Save workspace image”, diciendo yes se crearán dos ficheros en el directorio
de trabajo: .Rhistory con los comandos y sentencias generadas en la sesión
y .RData con los objetos almacenados pero si se le quiere dar un nombre es
INTRODUCCIÓN A R
11
preferible guardarlo con ese nombre antes de cerrar en la persiana F ile/Save
W orkspace y contestar no cuando aparece “Save workspace image”. La próxima vez con doble-click sobre ese fichero .RData arrancará R en dicho espacio de
trabajo cerrando con el procedimiento anterior. Se puede ver en que directorio
se trabaja tecleando getwd().
- Al arrancar R aparece la ventana de la RConsole de trabajo donde se
irán introduciendo los sucesivos comandos que se pueden guardar en un fichero
.Rhistory. Si se obtienen gráficos aparecerán en otra ventana RGraphics que
pueden copiarse o guardarse en diferentes formatos así como imprimirse.
- R trabaja con “objetos”, la mayoría de los cuales son funciones. Tecleando
objects() (o ls())se obtiene la lista de los que se tienen almacenados. Estos
objetos se guardan en el W orkspace que es un fichero .RData, y que por
defecto se guarda en el directorio de trabajo en el que está instalado R.
- En R, como en la mayoría de los paquetes basados en UNIX, se consideran
nombres diferentes los escritos con mayúsculas o minúsculas, así A y a representarán distintos símbolos. En general se pueden utilizar todos los símbolos
alfanuméricos, aunque un nombre nunca podrá comenzar por un número.
- Los comandos en R pueden ser: expresiones como plot(x, y) que serán
evaluadas impresas y su valor perdido, o asignaciones utilizando < − o =
como x < −27 que también serán evaluadas y su valor transmitido a una
variable, pero no automáticamente impreso. Los comandos estarán separados
por ; o por una nueva línea, pudiendo agrupar comandos elementales entre { y
}. Si un comando no está completo, el R devolverá el símbolo + hasta que se
complete.
- Los comentarios en R se pueden poner casi en cualquier sitio, con tal de
comenzar con # todo hasta el final de la línea es un comentario.
- Para cerrar la sesión de R se tiene que escribir q() apareciendo la pregunta
de si guardar o no “workspace”. Si se contesta yes se guardará en .RData y
R.History del directorio de trabajo.
1.1.2. Ayudas
R tiene una serie de documentos html (que arrancan con el navegador) para
ayuda y manuales a los que se accede con help.start(). Si se conoce el nombre de la función, por ejemplo nombre se introduce help (nombre) y en una
ventana aparte aparecerá toda la información sobre su definición y características. Si no se conoce el nombre exacto de la función es preferible preguntar
help.search (“nombre”) y aparecerán los ficheros de ayuda con algún elemento
que sea nombre. Se puede utilizar también ?help o ?help.search para obtener
más información de estas ayudas. Para no tener que teclear lo mismo varias veces, con las teclas de movimiento, ↑ o ↓ se obtienen las sentencias introducidas
con anterioridad.
Otra forma de obtener ayuda sobre nuestra función nombre es mediante
12
INTRODUCCIÓN A R
ejemplos de ayuda tecleando example(nombre). Como prueba escríbase example (plot).
En la mayoría de las funciones que se describirán, se deberá recurrir a help( )
para obtener información completa de las mismas.
1.1.3. Scripts
Son ficheros que contienen listas de comandos según se escriben en la consola, pudiendo incluir comentarios (líneas comenzando por #) que explican
lo que se pretende hacer. Son muy útiles para repetir en sucesivas ocasiones,
ciertos procedimientos que hemos tecleado en un determinado momento y para
almacenar los comandos utilizados en las diferentes sesiones
Ejemplo: Para crear y hacer funcionar un script que genere dos muestras de tamaño 50 de una distribución N (2, 3) calculando su coeficiente de
correlación.
1. Arrancar R
2. En la persiana F ile seleccionar New Script, si se quiere utilizar
un script almacenado seleccionar Open Script.
3. Escribir en el script las siguientes líneas
x < −rnorm(50, 2, 3)
y < −rnorm(50, 2, 3)
plot(x, y)
print(cor.test (x, y))
4. Seleccionar todas las líneas y presionar el botón derecho del ratón
y aparecerá una ventana de diálogo en la que se selecciona “Run
line or selection”, así se ejecutarán todas las sentencias del script.
Si no se selecciona nada, se ejecuta la sentencia al final de la cual
está colocado el cursor. También se puede seleccionar un bloque de
sentencias que son las que se ejecutarán.
5. Como salida aparecerá en una ventana RGraphics, una nube de
puntos correspondiendo a las 50 observaciones pedidas y en en la
ventana RConsole el valor del coeficiente de correlación muestral
así como el correspondiente p-valor del contraste y los extremos del
intervalo de confianza a nivel 0,95.
6 Para guardar y cerrar el script, cuando se está en la ventana del
mismo abrir la persiana F ile y seleccionar Save guardándolo con
la extensión .R y Close script para cerrarlo
PRIMEROS PASOS
13
1.1.4. Paquetes R
Los paquetes proporcionan las facilidades para manejar conjuntos de funciones o datos y la documentación correspondiente. Son destacables los siguientes aspectos:
- Se cargan y descargan ocupando memoria sólo cuando son utilizados.
- Se instalan y actualizan fácilmente. Un único comando, ejecutable dentro
o fuera de R, coloca en su sitio las funciones datos y documentación.
- Se adapta a los usuarios o administradores pudiendo tener además una o
más librerías privadas de paquetes.
- Se pueden validar ya que R posee comandos para verificar que la documentación existe, para eliminar errores comunes y para comprobar que los
ejemplos funcionan realmente.
Estructura de los paquetes R
La estructura básica suele contener
- un fichero descriptivo del paquete, autor y condiciones de la licencia en
formato texto
- un fichero índice con las lista de funciones y datos, que puede generarse
automáticamente
- un subdirectorio man/ de ficheros de documentación
- un subdirectorio R/ de ficheros de códigos R
- un subdirectorio data/ de conjuntos de datos
- un subdirectorio src/ de fuentes C, Fortran o C++
de forma menos frecuente también contiene
- tests/ para contrastes de validación
- exec/ para otros ejecutables, por ejemplo en Java
- inst/ para otro material
- un “script” de configuración para comprobar otro software que se necesite
o para manejar diferencias entre sistemas.
Formatos de bases de datos
El comando data() carga datos de los paquetes que se tienen cargados
- Ficheros de texto rectangulares con separador coma o espacio en
blanco
- Código fuente S producido por la función dump() de R o S − P lus
- Ficheros R binarios que produce la función save()
El tipo de fichero se elige automáticamente según la extensión.
Carga opcional de paquetes
- En el Help menú se pueden encontrar los Manuales donde se describen las
funciones que se cargan con los paquetes básicos que se instalan al arrancar el R.
14
INTRODUCCIÓN A R
Hay otros paquetes suplementarios que no son más que grupos de funciones que
se han escrito y hecho públicas por los creadores a través de la familia CRAN
de sitios en Internet (vía http://cran.r-project.org). En el menú P ackages se
pueden manejar estos otros paquetes, siendo algunos de los más utilizados el
mva y MASS. También algunos se pueden cargar mediante library(mva) y
library(MASS) y con library() se pueden ver los paquetes disponibles para
cargar directamente sin tener que acceder al sitio de R. Para saber cuáles se
tienen cargados hay que teclear search().
Dentro del menú P ackages se tienen las opciones de instalación o actualización de nuevos paquetes ya sea directamente del sitio CRAN o desde un
fichero .zip que también se puede obtener en ese mismo sitio. Una vez instalado
en nuestro directorio R podrá ser cargado con Load P ackage para trabajar con
él en nuestra sesión.
Cabe señalar, aunque no sea de interés para la mayoría de los usuarios, que
es posible acceder a los códigos fuente de los paquetes de R. No se distribuye de
forma automática sino que hay que ir al sitio CRAN y acceder a la opción R
Sources para cargarla en nuestro sistema. A partir de ahí se puede visualizar el
código de cualquier cálculo por ejemplo cor.test del paquete statst (para saber
en qué paquete se encuentra hay que teclear ?cor.test y aparece en la primera
línea de la ventana de Help), dentro del directorio R donde se guardó el código
fuente, mediante el camino src\library\stats\R\cor.test.R.
1.1.5. Lenguaje R
Como se dijo al principio es un dialecto del lenguaje S, con una estructura
común a muchos lenguajes tipo C, pero con unas características especiales que
lo hacen especialmente versátil para el manejo de elementos estadísticos en concreto para operaciones con matrices y vectores. Fue diseñado en los 80 y desde
entonces ha tenido un enorme desarrollo dentro de la comunidad estadística por
sus posibilidades para la modelización estadística y la visualización mediante
gráficos. Los comandos elementales en R consisten en expresiones de cálculo
y asignaciones que pueden separarse por punto y coma ; o por línea nueva y
agruparse en una expresión compuesta mediante llaves { }. Si un comando se
escribe incompleto por error, R suele devolver + hasta que se completa.
Ejemplo: Falta el paréntesis final
> (media.x < −mean(x)
+
+
+)
[1]2,206341
Como se vio al utilizar los scripts, es posible utilizar comandos almacenados en un fichero externo mediante el procedimiento indicado en dicho
apartado o mediante el comando source. Análogamente es posible almacenar
PRIMEROS PASOS
15
todas las salidas de R en un fichero externo, por ejemplo result1.lis mediante sink(“ubicación del fichero result1.lis”), que se podrá leer con cualquier
procesador de textos. Para ver las salidas en la consola de nuevo se tecleará el
˙
comando sink().
Cálculo
Si se plantea un cálculo en la línea de comandos, R efectuará el mismo,
apareciendo el resultado en la consola.
Ejemplo: Para calcular exp(2) + 5
> exp(2) + 5
obteniéndose
[1]12,38906
Los cálculos se efectuarán en la forma habitual, pudiendo utilizar los paréntesis para alterar el orden de los cálculos.
Ejemplo:
>7−5∗4+3
[1] −10
o bien
> (7 − 5) ∗ 4 + 3
[1] 11
Los espacios se pueden utilizar libremente sin alterar el significado de las
operaciones.
Asignación
Como se ha visto en el primer ejemplo, una forma de crear nuevos objetos
es mediante el operador de asignación < − es decir los símbolos menor que y
menos, tecleados uno a continuación del otro.
Ejemplo: Para crear el objeto x como una muestra de tamaño 50 de una
distribución N (2, 3)
> x < −rnorm(50, 2, 3)
Si a continuación se teclea
>x
se obtendrá la descripción explícita de las 50 observaciones generadas en
ese momento
[1] 1.9695542 2.0773641 3.9620694 -0.5074673 6.0494055 3.5239660
[7] 4.0615103 -0.2137977 -3.0360154 7.9673968 0.5715117 -0.4865489
[13] -0.7256490 -1.5236052 2.9982977 4.6363986 1.3246436 -0.1932609
[19] 0.4410943 10.4654333 1.2003788 3.0297676 -3.1974437 1.4925627
[25] 4.3648033 3.7473657 1.5032604 6.9660583 1.9510645 7.4039741
[31] 4.3971533 0.9633926 6.8757369 3.7359458 -1.3833869 1.2585773
[37] 1.7376304 -2.5316654 6.1148239 3.0794651 4.5315920 0.7024664
[43] 1.5024827 -1.5534974 -0.7111865 3.2873565 0.4772716 0.9519583
[49] 6.1283580 -1.0715138
16
INTRODUCCIÓN A R
y siempre que se utilice x en cualquier expresión, se estará considerando
toda la muestra, así por ejemplo
> media.x < −mean(x)
permite calcular la media aritmética de las 50 observaciones y guardarla
como objeto media.x
> media.x
[1] 2,206341
Para conseguir que se cree el objeto y se visualice se debe escribir entre
paréntesis
> (media.x < −mean(x))
[1] 2,206341
Para borrar objetos de la zona de trabajo se utilizará el comando rm(.)
Ejemplo: Para borrar media.x
> rm(media.x)
Si se teclea
> objects( )
se observará la desaparición de media.x.
Dado que en la denominación de algunos objetos es frecuente la utilización
de valores como x, y, . . ., es recomendable abrir directorios de trabajo distintos al efectuar diferentes tareas en R porque las sucesivas creaciones de estos
objetos anularán los anteriores.
Tipos de objetos: vectores (numéricos, de caracteres, de índices), matrices
o más generalmente arrays, factores, listas (vectores cuyos elementos no
tienen por qué ser del mismo tipo), data frames (generalización de las matrices
ya que puede haber columnas de diferente tipo, aunque en cada columna del
mismo tipo), funciones. De un objeto se puede conocer, por ejemplo, su tipo
mode( ), su longitud length( ) y su estructura str( ).
Ejemplo:
> mode(x)
[1]“numeric”
> length(x)
[1]50
> mode(mean)
[1]“function”
Mediante la función attributes( ) se pueden obtener las características de
un objeto.
Ejemplo: Los datos “Nile” son una serie temporal del flujo del río Nilo.
> Nile
T imeSeries :
Start = 1871
End = 1970
F requency = 1
[1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935 1110 994
1020
PRIMEROS PASOS
17
[16] 960 1180 799 958 1140 1100 1210 1150 1250 1260 1220 1030 1100 774
840
[31] 874 694 940 833 701 916 692 1020 1050 969 831 726 456 824 702
[46] 1120 1100 832 764 821 768 845 864 862 698 845 744 796 1040 759
[61] 781 865 845 944 984 897 822 1010 771 676 649 846 812 742 801
[76] 1040 860 874 848 890 744 749 838 1050 918 986 797 923 975 815
[91] 1020 906 901 1170 912 746 919 718 714 740
> attributes(Nile)
$tsp
[1]1871 1970 1
$class
[1]“ts”
Se puede comparar con la función str( )
> str(Nile)
T ime − Series[1 : 100]f rom1871to1970 : 1120 1160 963 1210 1160 1160 813
1230 1370 1140...
Con attr(objeto, nombre) se puede seleccionar un atributo específico.
Ejemplo: Para crear una matriz 2 ×2 de unos
> num < −c(1, 1, 1, 1)
> num
[1]1 1 1 1
> attr(num,“dim”) < −c(2, 2)
> num
[, 1][, 2]
[1, ]1 1
[2, ]1 1
1.2. Vectores
Uno de las facilidades de R es la manipulación de bases de datos. Dentro de
estas estructuras el elemento más simple es la colección ordenada de números,
el vector numérico, al que se dedicará este capítulo.
1.2.1. Vectores numéricos
Para crear vectores se suele utilizar la función c(.), introduciendo los valores
numéricos que definen el vector.
18
INTRODUCCIÓN A R
⎛
⎜
⎜
Ejemplo: Para crear el vector v = ⎜
⎜
⎝
> v < −c(1, 2, 3, 4, 5)
>v
[1] 1 2 3 4 5
1
2
3
4
5
⎞
⎟
⎟
⎟
⎟
⎠
También se puede utilizar la función assign(.).
Ejemplo:
> assign(“v”, c(1, 2, 3, 4, 5))
>v
[1] 1 2 3 4 5.
Una vez que el vector v existe como objeto, puede utilizarse para construir
otros vectores y para efectuar operaciones sobre todos sus elementos.
Ejemplo:
> exp(v)
[1]2,718282 7,389056 20,085537 54,598150 148,413159
> w < −c(2 ∗ v, 0, 0, v)
>w
[1] 2 4 6 8 1 0 0 0 1 2 3 4 5
1.2.2. Operaciones aritméticas
Como se ha visto anteriormente, las operaciones con vectores se efectúan
elemento a elemento. Si alguno de los vectores es más corto, se alarga hasta
conseguir la longitud del vector más largo.
Ejemplo:
> d < −c(1, 2, 3)
>d
[1] 1 2 3
> e < −c(d, 0, 0, 0, 2 ∗ d)
>e
[1] 1 2 3 0 0 0 2 4 6
> w < −d + e
>w
[1] 2 4 6 1 2 3 3 6 9
Si en lugar del vector anterior, e, introducimos el siguiente, de longitud
menor,
> e < −c(d, 0, 0, 2 ∗ d)
>e
[1]1 2 3 0 0 2 4 6
VECTORES
19
aparecerá el siguiente mensaje
> w < −d + e
W arning message :
longer object length
is not a multiple of shorter object length in : d + e.
Las operaciones básicas se realizarán con los símbolos habituales: +, −, ∗, /,
y ˆ para elevar a una potencia. También se pueden utilizar las funciones:
log, exp, sin, cos, tan, sqrt, max, min, así como diff (range()), length, sum, prod
que calculan la diferencia entre el valor max y min, el número de elementos,
su suma y su producto, respectivamente.
Ejemplo:
>w
[1] 2 4 6 1 2 3 3 6 9
> range(w)
[1]19
> diff(range(w))
[1]8
> sum(w)
[1]36
> prod(w)
[1] 46656
> wˆ2
[1] 4 16 36 1 4 9 9 36 81
También se pueden efectuar las operaciones estadísticas más frecuentes:
mean y var, siendo
var (x) = sum((x − mean (x))ˆ2)/ (length (x) − 1)
es decir la varianza muestral si x es una muestra unidimensional. Para el
caso en el que x es una matriz de datos n × p, el objeto var (x) pasará a ser la
matriz de covarianzas muestral de dimensión p × p.
Otra operación interesante es la ordenación de un vector mediante la función
sort( ), si se quiere efectuar una permutación se utilizará order( ) o sort.list(
).
Hay ocasiones en las que se necesita construir vectores con una determinada
sucesión de valores numéricos, por ejemplo de 1 a 10; ésto puede conseguirse
mediante la operación 1 : 10 asignando el resultado a un objeto, pero es más
versátil utilizar la función seq ( ) porque admite varias posibilidades. Por otra
parte está la función rep( ) para repetir un determinado objeto de diferentes
formas.
Ejemplo:
> (f < −seq(1, 10))
[1] 1 2 3 4 5 6 7 8 9 10
> (f < −seq(2, length = 4))
[1] 2 3 4 5
20
INTRODUCCIÓN A R
> (f < −seq(2, length = 4, by = 0,5))
[1] 2,0 2,5 3,0 3,5
> rep(1 : 3, 2)
[1] 1 2 3 1 2 3
> rep(1 : 3, 2, each = 2)
[1] 1 1 2 2 3 3 1 1 2 2 3 3
1.2.3. Vectores lógicos
Son vectores generados por condiciones que pueden darse o no, por lo que
sus elementos posibles son T RU E(cierto), F ALSE(falso) y NA(no disponible).
Es preferible no simplificar estos valores a T, F porque si se utilizan como
objetos pueden ser alterados.
Ejemplo:
>f
[1] 2,0 2,5 3,0 3,5
> logi1 < −f >= 3
> (logi1 < −f >= 3)
[1] F ALSE F ALSE T RU E T RU E
Los operadores utilizados son los habituales,<, >, <=, >=, ==(igualdad
exacta), ! =(desigualdad), &(intersección de expresiones), |(AltGr-1, para la
unión) y !(negación).
1.2.4. Valores ausentes (“missing values”)
Hay situaciones en las que un valor está no disponible porque es un resultado
imposible o se ha perdido, son los valores ausentes de estadística y en estos casos
aparece como valor NA. Cualquier operación con ellos seguirá siendo NA, no
disponible, sin embargo con la función is.na( ) se puede construir un nuevo
vector donde aparece T RU E si y sólo si el elemento correspondiente es NA.
Si el resultado imposible surge de un cálculo, el símbolo que aparece es
NaN(not a number), siendo otra categoría de valores ausentes que se cambia
también con is.na( ), pero si sólo se quieren cambiar los de esta categoría se
debe teclear is.nan( ).
Ejemplo:
>l
[1] NA 0,7071068 0,0000000 NaN 1,0000000 0,7071068 0,0000000
> is.na(l)
[1] T RUE F ALSE F ALSE T RU E F ALSE F ALSE F ALSE
> is.nan(l)
[1] F ALSE F ALSE F ALSE T RU E F ALSE F ALSE F ALSE
VECTORES
21
1.3. Matrices y arrays
Se puede definir un “array” como una colección de observaciones con subíndices, siendo las matrices casos particulares, en concreto “arrays” bidimensionales ya que sus elementos constan de dos subíndices. R es especialmente
adecuado para crear y manejar este tipo de objetos.
Tienen como atributo la dimensión, que puede asignarse o describirse mediante dim( ). Así un vector numérico puede utilizarse como un “array” si se
le asigna una dimensión.
Ejemplo:
>w
[1] 2 4 6 8 10 0 0 1 2 3 4 5
> dim(w) < −c(2, 6)
>w
[, 1] [, 2] [, 3] [, 4] [, 5] [, 6]
[1, ] 2 6 10 0 2 4
[2, ] 4 8 0 1 3
5
> dim(w) < −c(6, 2)
>w
[, 1] [, 2]
[1, ] 2 0
[2, ] 4 1
[3, ] 6 2
[4, ] 8 3
[5, ] 10 4
[6, ] 0 5
> dim(w) < −c(2, 3, 2)
>w
,,1
[, 1] [, 2] [, 3]
[1, ] 2 6 10
[2, ] 4 8 0
,,2
[, 1] [, 2] [, 3]
[1, ] 0 2 4
[2, ] 1 3 5
Como se puede observar en el ejemplo anterior, la forma de colocar los datos
es rellenando por columnas los sucesivos bloques. A los elementos colocados en
cada posición se les puede denominar con el nombre del “array” seguido de su
posición entre [ ] separando los subíndices que describen dicha posición entre
comas.
Ejemplo: Si se considera la última descripción del objeto w en el ejemplo
anterior, para obtener la segunda fila de la segunda columna del primer bloque
22
INTRODUCCIÓN A R
> w[2, 2, 1]
[1] 8
También se pueden extraer columnas, filas y en general cualquier subconjunto describiendo sus posiciones entre [ ].
Ejemplo: Con el w anterior se puede obtener la segunda columna del
primer bloque
> w[, 2, 1]
[1] 6 8
y las segundas columnas de los dos bloques
> w[, 2, ]
[, 1] [, 2]
[1, ] 6 2
[2, ] 8 3
Otra forma de construir “arrays” a partir de vectores, es mediante la función
array( ), especificando el nombre del vector y la dimensión del nuevo objeto.
Para construir matrices se utilizará la función matrix( ).
Ejemplo: Teniendo en cuenta que x es x < −rnorm(50, 2, 3) del primer
ejercicio, se puede convertir en un array formado por dos bloques de cinco filas
y cinco columnas
> (arx < −array(x, c(5, 5, 2)))
,,1
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -3.2106300 0.3877666 7.5592096 -0.3403993 1.2039125
[2,] -0.7870847 8.7728136 1.0124324 2.7640037 -0.7761628
[3,] 0.4241971 0.4688422 0.2401416 3.4419892 -1.9599388
[4,] 0.2159416 1.0030262 -1.3389534 3.0205676 -4.2068276
[5,] 4.1927219 -6.1559740 4.4434380 1.6881193 -1.1155851
,,2
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -5.247075 2.850224 3.6138058 -0.04179251 1.423822
[2,] 1.189775 -2.359040 6.5736714 0.67692024 1.260775
[3,] 4.042855 -1.425400 -4.1827371 7.05517180 3.344217
[4,] 3.106876 6.196905 -1.2356566 -2.54117124 1.363164
[5,] 4.199660 -1.659834 0.2650083 0.97560422 4.381154
Si el vector no tiene elementos suficientes para rellenar los huecos del array,
con la función anterior se completa con los primeros valores del vector. También
se pueden efectuar distintas operaciones con los “arrays” como permutar, el
producto exterior...que se describirán a continuación en el caso particular y
claramente más frecuente de las matrices.
MATRICES Y ARRAYS
23
1.3.1. Operaciones con matrices
Como se dijo anteriormente, una matriz es un array con dos subíndices.
Entre las funciones que describen y manejan una matriz están nrow( ) y ncol()
para obtener el número de filas y columnas respectivamente, mientras que t( )
es la función que traspone la matriz. Otra función interesante es diag( ) que
si se aplica a una matriz devuelve el vector formado con los elementos de la
diagonal principal, si se aplica a un vector lo que se obtiene es una matriz
diagonal con los valores del vector y por último sobre un escalar construye la
matriz identidad de la dimensión dada por el escalar.
Ejemplo: Sea la matriz mat1 la obtenida con el primer bloque del array
arx obtenido en el ejemplo anterior.
> (mat1 < −arx[, , 1])
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -3.2106300 0.3877666 7.5592096 -0.3403993 1.2039125
[2,] -0.7870847 8.7728136 1.0124324 2.7640037 -0.7761628
[3,] 0.4241971 0.4688422 0.2401416 3.4419892 -1.9599388
[4,] 0.2159416 1.0030262 -1.3389534 3.0205676 -4.2068276
[5,] 4.1927219 -6.1559740 4.4434380 1.6881193 -1.1155851
> ncol(mat1)
[1] 5
> nrow(mat1)
[1] 5
> (tmat1 < −t(mat1))
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -3.2106300 -0.7870847 0.4241971 0.2159416 4.192722
[2,] 0.3877666 8.7728136 0.4688422 1.0030262 -6.155974
[3,] 7.5592096 1.0124324 0.2401416 -1.3389534 4.443438
[4,] -0.3403993 2.7640037 3.4419892 3.0205676 1.688119
[5,] 1.2039125 -0.7761628 -1.9599388 -4.2068276 -1.115585
> (dmat1 < −diag(mat1))
[1] -3.2106300 8.7728136 0.2401416 3.0205676 -1.1155851
> diag(dmat1)
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -3.21063 0.000000 0.0000000 0.000000 0.000000
[2,] 0.00000 8.772814 0.0000000 0.000000 0.000000
[3,] 0.00000 0.000000 0.2401416 0.000000 0.000000
[4,] 0.00000 0.000000 0.0000000 3.020568 0.000000
[5,] 0.00000 0.000000 0.0000000 0.000000 -1.115585
> diag(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 0 1 0 0 0
[3,] 0 0 1 0 0
24
INTRODUCCIÓN A R
[4,]
[5,]
0 0 0 1 0
0 0 0 0 1
Producto de matrices
El operador para aplicar esta operación entre matrices es %∗ %, utilizándose
∗ para el producto elemento por elemento de matrices del mismo tamaño. No
obstante la función crossprod(mat1, mat2) es equivalente a mat1 % ∗ %mat2
pero el proceso es más rápido.
Para obtener la inversa de una matriz cuadrada no singular se puede utilizar
la solución de una ecuación lineal, por ejemplo de q = Q % ∗ %x, ya que
x = Q−1 % ∗ %q, mediante la función solve(Q, q), pudiendo calcular dicha
matriz inversa mediante solve(Q). Para obtener el determinante de Q se utiliza
det(Q).
Ejemplo: Se calcula la inversa de la matriz mat1 definida en ejemplos
anteriores con el vector x1 de unos
> x1 < −rep(1, 5)
> b1 < −mat1 % ∗ %x1
> solve(mat1, b1)
[, 1]
[1, ]1
[2, ]1
[3, ]1
[4, ]1
[5, ]1
> solve(mat1)
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -0.12877872 0.15323841 -0.2164438 -0.01502533 0.19133400
[2,] -0.02089566 0.13530681 -0.1513859 0.03348884 0.02299115
[3,] 0.08597911 0.05810572 -0.1229635 0.04817971 0.08670692
[4,] -0.01601109 -0.04914441 0.5782148 -0.24706520 -0.06726225
[5,] -0.05045421 -0.01365353 0.4070992 -0.42322674 -0.06058936
Autovalores y autovectores
Aplicando la función eigen( ) a una matriz simétrica, se obtienen los correspondientes vector de autovalores y matriz
⎛ de autovectores.
⎞
10 0 2
Ejemplo: Se define la matriz mat2 = ⎝ 0 10 4 ⎠ y se determinan sus
2 4 2
autovalores y autovectores
> d1 < −c(10, 0, 2, 0, 10, 4, 2, 4, 2)
> (mat2 < −matrix(d1, ncol = 3, nrow = 3))
[,1] [,2] [,3]
[1,] 10 0 2
MATRICES Y ARRAYS
25
[2,] 0 10 4
[3,] 2 4 2
> eigen(mat2)
$values
[1] 1.200000e+01 1.000000e+01 1.776357e-15
$vectors
[,1]
[,2]
[,3]
[1,] -0.4082483 8.944272e-01 0.1825742
[2,] -0.8164966 -4.472136e-01 0.3651484
[3,] -0.4082483 5.551115e-17 -0.9128709
Si se utiliza eigen( )$values o bien eigen( )$vectors solamente aparecerán
los autovalores o bien los autovectores que también pueden almacenarse como
objetos.
Otra función aplicable a matrices muy útil es svd(Q) (“singular value descomposition”), mediante la que se obtienen las matrices U , D y V tales que
Q = U % ∗ % D % ∗ % t(V ), donde las columnas de U y de V son ortogonales
y D es una matriz diagonal.
Ejemplo:
> d3 < −c(1, 2, 5, 3, 7, 9, 2, 7, 1)
> mat3 < −matrix(d3, c(3, 3))
> mat3
[,1] [,2] [,3]
[1,] 1 3 2
[2,] 2 7 7
[3,] 5 9 1
> svd(mat3)
$d
[1] 14.0785096 4.9778584 0.1284231
$u
[,1]
[,2]
[,3]
[1,] -0.2628271 -0.1087879 -0.9586903
[2,] -0.6746563 -0.6896073 0.2632121
[3,] -0.6897541 0.7159658 0.1078531
$v
[,1]
[,2]
[,3]
[1,] -0.3594777 0.4202262 0.8331781
[2,] -0.8323937 0.2591632 -0.4898522
[3,] -0.4217778 -0.8696231 0.2566303
Construcción de matrices particionadas
Las funciones cbind( ) y rbind( ) permiten obtener una matriz a base de
agregar matrices por columnas y filas respectivamente.
Ejemplo.
26
INTRODUCCIÓN A R
> cbind(mat3, mat3)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 3 2 1 3 2
[2,] 2 7 7 2 7 7
[3,] 5 9 1 5 9 1
> rbind(mat3, mat3)
[,1] [,2] [,3]
[1,] 1 3 2
[2,] 2 7 7
[3,] 5 9 1
[4,] 1 3 2
[5,] 2 7 7
[6,] 5 9 1
Hay que señalar la diferencia con la función c( ) que encadena objetos
eliminando su dimensión.
Ejemplo:
> c(mat3, mat3)
[1] 1 2 5 3 7 9 2 7 1 1 2 5 3 7 9 2 7 1
Tablas de contingencia
A partir de la función table( ) se pueden obtener tablas de frecuencia asociadas a factores de igual longitud. En el ejemplo siguiente se utiliza la función
sample( ) que permite extraer muestras de un conjunto de observaciones y el
cruce de dos factores para construir una tabla de doble entrada.
Ejemplo:
> table(c(mat3, mat3))
123579
442242
> (v4 < −c(mat3, mat3))
[1] 1 2 5 3 7 9 2 7 1 1 2 5 3 7 9 2 7 1
> (mat4 < −sample(v4, 18))
[1] 1 1 7 1 2 7 5 3 7 9 2 3 1 9 5 2 7 2
> table(v4, mat4)
mat4
v4 1 2 3 5 7 9
1110011
2110110
3100001
5010010
7011110
9101000
Para describir un factor mediante la agrupación en clases, se utilizan las funciones factor( ) y cut( ) como se indica en el siguiente ejemplo que trabaja con
MATRICES Y ARRAYS
27
las columnas 4a y 5a de los datos airquality y que representan T emperatura,
153 valores entre 56 y 97 y Meses, incluyendo solamente del 5 al 9. Si se hubiera descrito T empf solo con cut( ) y las 11 clases que se han pedido de forma
aproximada en lugar de las 9 que efectivamente le corresponden, habrían salido
dos filas de ceros en la tabla final.
> T emp < −airquality[, 4]
> T empf < −factor(cut(T emp, breaks = 55 + 5 ∗ (0 : 11)))
> Month < −airquality[, 5]
> table(T empf, Month)
Month
T empf 5 6 7 8 9
(55,60] 8 0 0 0 0
(60,65] 7 1 0 0 2
(65,70] 9 1 0 0 5
(70,75] 4 5 2 2 6
(75,80] 2 13 1 9 8
(80,85] 1 5 18 6 4
(85,90] 0 3 7 9 1
(90,95] 0 2 3 3 4
(95,100] 0 0 0 2 0
1.4. Bases de datos
En este apartado se pueden incluir los objetos list( ), como colección ordenada, a su vez, de objetos y data.frame( ) quizá la estructura de datos más
utilizada y que consiste en una colección de variables de la misma longitud que
pueden ser de tipo diferente.
1.4.1. Listas
Con la función length( ) aplicada al nombre de la lista, se obtiene el número
de objetos de que consta, utilizando [[ ]] para describir dichas componentes y
seguidas del número de orden entre [ ] que ocupa cada elemento del objeto para
describirlos.
Ejemplo:
> (lmat2 < −list(mat1, mat2))
[[1]]
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -3.2106300 0.3877666 7.5592096 -0.3403993 1.2039125
[2,] -0.7870847 8.7728136 1.0124324 2.7640037 -0.7761628
28
INTRODUCCIÓN A R
[3,] 0.4241971 0.4688422 0.2401416 3.4419892 -1.9599388
[4,] 0.2159416 1.0030262 -1.3389534 3.0205676 -4.2068276
[5,] 4.1927219 -6.1559740 4.4434380 1.6881193 -1.1155851
[[2]]
[,1] [,2] [,3]
[1,] 10 0 2
[2,] 0 10 4
[3,] 2 4 2
> lmat2[[2]][5]
[1]10
> lmat2[[1]][7]
[1] 8,772814
Las listas o elementos de las mismas se pueden enlazar para conseguir nuevas
listas.
Ejemplo:
> lmat2[[3]] < −lmat2[[2]][5]
> lmat2
[[1]]
[,1]
[,2]
[,3]
[,4]
[,5]
[1,] -3.2106300 0.3877666 7.5592096 -0.3403993 1.2039125
[2,] -0.7870847 8.7728136 1.0124324 2.7640037 -0.7761628
[3,] 0.4241971 0.4688422 0.2401416 3.4419892 -1.9599388
[4,] 0.2159416 1.0030262 -1.3389534 3.0205676 -4.2068276
[5,] 4.1927219 -6.1559740 4.4434380 1.6881193 -1.1155851
[[2]]
[,1] [,2] [,3]
[1,] 10 0 2
[2,] 0 10 4
[3,] 2 4 2
[[3]]
[1] 10
1.4.2. Data frames
La forma de construir data frames, siempre que los elementos tengan la
misma dimensión, es mediante data.f rame( ) y as.data.frame( ).
Para conseguir que las variables del data frame sean objetos se utilizan las
funciones attach( ) y detach( )
Ejemplo.
> mat2
[,1] [,2] [,3]
[1,] 10 0 2
[2,] 0 10 4
BASES DE DATOS
29
[3,] 2 4 2
> (df mat2 < −data.f rame(mat2))
X1 X2 X3
1 10 0 2
2 0 10 4
3242
> X1
Error: Object “X1” not found
> attach(df mat2)
> X1
[1] 10 0 2
> detach(df mat2)
> X1
Error: Object “X1” not found
Importación de bases de datos
La mayoría de las veces, las observaciones se encontrarán almacenadas en
ficheros externos que se tienen que incorporar mediante las funciones read.table(
), que pasa los datos a un data.f rame y scan( ) que los pasa a un vector.
Para poder leer datos con read.table( ) éstos deben de tener en la primera
línea el nombre de cada variable y en las sucesivas filas una etiqueta y los valores
de las variables. Con read.table( ) se pueden leer los ficheros directamente si
se encuentran en el mismo directorio en el que se arranca R y dando los datos
de ubicación del fichero en su caso.
Ejemplo: Se copia la siguiente base de datos en un fichero de texto, cork.txt
(mediante copy y paste en Wordpad, por ejemplo) y se coloca en el mismo
directorio desde el que se arranca R
ABCD
1 72 66 76 77
2 60 53 66 63
3 56 57 64 58
4 41 29 36 38
> (df cork < −read.table(“cork.txt”)
ABCD
1 72 66 76 77
2 60 53 66 63
3 56 57 64 58
4 41 29 36 38
Si se copia en un disquete habrá que introducir
> (df cork < −read.table(“a : /cork.txt”))
Para leer una base de datos que se encuentra en una dirección de internet
> (ejURL < −read.table(“http : //www.mat.ucm.es/˜palomam/aed/ejURL.dat”)
V1 V2 V3 V4 V5 V6 V7
1 1 210 201 -9 130 125 -5
30
INTRODUCCIÓN A R
2 2 169 165 -4 122 121 -1
3 3 187 166 -21 124 121 -3
4 4 160 157 -3 104 106 2
5 5 167 147 -20 112 101 -11
6 6 176 145 -31 101 85 -16
7 7 185 168 -17 121 98 -23
8 8 206 180 -26 124 105 -19
9 9 173 147 -26 115 103 -12
10 10 146 136 -10 102 98 -4
11 11 174 151 -23 98 90 -8
12 12 201 168 -33 119 98 -21
13 13 198 179 -19 106 110 4
14 14 148 129 -19 107 103 -4
15 15 154 131 -23 100 82 -18
Si se utiliza la función scan( )
> (sejURL < −scan(“http : //www.mat.ucm.es/˜palomam/aed/ejU RL.dat”))
Read 105 items
[1] 1 210 201 -9 130 125 -5 2 169 165 -4 122 121 -1 3 187 166 -21
[19] 124 121 -3 4 160 157 -3 104 106 2 5 167 147 -20 112 101 -11 6
[37] 176 145 -31 101 85 -16 7 185 168 -17 121 98 -23 8 206 180 -26 124
[55] 105 -19 9 173 147 -26 115 103 -12 10 146 136 -10 102 98 -4 11 174
[73] 151 -23 98 90 -8 12 201 168 -33 119 98 -21 13 198 179 -19 106 110
[91] 4 14 148 129 -19 107 103 -4 15 154 131 -23 100 82 -18
Para leer el fichero cork.txt con scan( ) hay que quitar el nombre de las
variables. Por ejemplo guardamos en scork.txt solo los valores
1 72 66 76 77
2 60 53 66 63
3 56 57 64 58
4 41 29 36 38
> (scork < −scan(“scork.txt”))
Read 20 items
[1] 1 72 66 76 77 2 60 53 66 63 3 56 57 64 58 4 41 29 36 38
Se puede utilizar a continuación la función edit( ) sobre la base de datos
que se ha leído, para manejarla con comodidad en una ventana auxiliar.
Ejemplo:
> edfcork < −edit(dfcork)
Importación de bases de datos de otros sistemas estadísticos
Es recomendable cargar el paquete f oreign aunque en algunas ocasiones
se podrán traer utilizando read.table( ), no obstante se podrá utilizar menos
memoria con las siguientes funciones.
Para traer ficheros de MINITAB con extensión .mtp (Minitab Portable
Worksheet) se tiene read.mtp( ) que lo trae en forma de lista. Para leer ficheros
en formato SAS Transport (XPORT) y pasarlos a una lista de data frames, se
BASES DE DATOS
31
Figura 1.4.1
tiene read.xport( ) y análogamente read.spss( ) para ficheros exportados por
SPSS, read.S( ) para muchos objetos de S-PLUS y read.dta( ) para ficheros
de STATA.
1.5. Distribuciones de probabilidad
Con R es posible determinar algunas características de las distribuciones
de probabilidad más utilizadas. teniendo que dar en cada caso los parámetros
correspondientes. En concreto según la letra que se coloque delante del nombre
de la distribución de probabilidad se podrá obtener la densidad si se coloca d,
la CDF (función de distribución) si p, la función cuantílica si q y para simular
una muestra habrá que poner r.
Ejemplo: La distribución Normal se denomina norm, teniendo que especificar los parámetros media y desviación típica así que para obtener la función
de densidad, y de distribución en z = 1,96 para una N(0, 1)
> dnorm(1,96, 0, 1)
[1]0,05844094
> pnorm(1,96, 0, 1)
[1]0,9750021
> qnorm(0,975, 0, 1)
[1]1,959964
> qnorm(0,9750021, 0, 1)
[1]1,96
Ejemplo: Para obtener una muestra de tamaño 100 de una N(3, 2) y otra
32
INTRODUCCIÓN A R
independientemente de una t − Student, a la que se denomina t, con 1 grado
de libertad, y representar ambos histogramas para comparar la diferencia en las
colas. Para representar ambos histogramas se utilizará la función par( ) que
establece parámetros en los gráficos y de la que se utiliza mf row = c(2, 1) para
particionar la ventana del gráfico en dos filas y una columna.
> par(mfrow = c(2, 1))
> mt1 < −rt(100, 1)
> mt1c < −mt1 ∗ 2 + 3
> hist(mt1c)
> norm < −rnorm(100, 1)
> normc < −norm ∗ 2 + 3
> hist(normc)
1.6. Programación
Los comandos en R, pueden ser agrupados entre “llaves” { } dando como valor el resultado final con la última expresión. A su vez puede integrarse
dentro de una expresión más amplia y así sucesivamente. Dentro de estas expresiones puede haber ciertos comandos de control de la ejecución permitiendo
condicionar la ejecución de un bloque o ejecutar repetidamente otro.
PROGRAMACIÓN
33
1.6.1. Estructuras de control
Ejecución condicionada
Responde al comando if / else de la forma habitual. Hay una (expresión_1)
que debe evaluarse, si es CIERT A entonces se evalúa la expresión_2, de lo
contrario se evalúa la expresión_3, el valor final de la expresión global es el de
la seleccionada finalmente. La sintaxis correspondiente al caso anterior sería
> if (expresión_1)
expresión_2
else
expresión_3
También pueden enlazarse sucesivas condiciones
> if (expresión_1)
expresión_2
else if (expresión_3)
expresión_4
else if (expresión_5)
expresión_6
else
expresión_8
evaluándose, en orden, las sucesivas expresiones impares hasta que una es
CIERT A, valorándose la correspondiente expresión par de dicho caso. No hay
límites para los else if permitidos.
Ejemplo: Donde se van alterando los valores de una muestra de números
aleatorios según sea el valor de su suma.
> u < −runif (20)
>u
[1] 0.8274505 0.7492379 0.9971830 0.6657915 0.2522081 0.2581410
0.6137507
[8] 0.1366209 0.8652314 0.6629930 0.6904928 0.8157469 0.7545211
0.9928052
[15] 0.8426746 0.8316724 0.3762088 0.3373698 0.1013896 0.8551755
> s < −sum(u)
> if (s < 5) u < −1 + u else if (s < 10) u < − − u
>u
[1] 0.8274505 0.7492379 0.9971830 0.6657915 0.2522081 0.2581410
0.6137507
[8] 0.1366209 0.8652314 0.6629930 0.6904928 0.8157469 0.7545211
0.9928052
[15] 0.8426746 0.8316724 0.3762088 0.3373698 0.1013896 0.8551755
34
INTRODUCCIÓN A R
>s
[1] 12.62666
>if (s < 5) u < −1 + u else if (s < 10) u < − − u else if (s < 15)
u < −2 ∗ u
>u
[1] 1.6549009 1.4984758 1.9943660 1.3315830 0.5044162 0.5162821
1.2275015
[8] 0.2732418 1.7304629 1.3259860 1.3809856 1.6314938 1.5090422
1.9856104
[15] 1.6853491 1.6633447 0.7524176 0.6747396 0.2027791 1.7103510
Ejecución repetida
Mediante las órdenes f or, while and repeat se puede conseguir la valoración
repetida de ciertas expresiones. Por ejemplo para for sería
> for (nombre en expresión_1) {expresión_2}
donde el nombre es el contador de las repeticiones y en la expresión_2 se
incluyen las acciones a realizar, en función de la variable nombre.
Ejemplo: A partir de una matriz 20 × 10 de observaciones aleatorias e
independientes N(0, 1) se obtienen las medias muestrales de las columnas, representándolas con un gráfico de tallo y hojas
z < −matrix(rnorm(200), 20, 10)
mean.samp < −NULL
f or(i in 1 : 10){
mean.samp[i] < −mean(z[, i])
}
stem(mean.samp)
1.6.2. Funciones
En lenguaje R las funciones se pueden incorporar como objetos a los procedimientos o almacenar para su uso posterior. La forma general es
nombre < −function(argumento_1, argumento_2, . . .)expresión
donde la expresión se escribe en lenguaje R y utiliza los argumentos introducidos. Para llamar a la función se utilizará el nombre(valores de los argumentos)
como se utilizan normalmente las funciones que ya están definidas en los paquetes que se cargan al comienzo.
Ejemplo: Función para calcular y listar las medias aritméticas de distintas potencias de una colección de 10 observaciones aleatorias e independientes
N(0, 1).
PROGRAMACIÓN
35
f ourmom < −function(x){
m1 < −mean(x)
m2 < −mean(xˆ2)
m3 < −mean(xˆ3)
m4 < −mean(xˆ4)
list(m1 = m1, m2 = m2, m3 = m3, m4 = m4)
}
x < −rnorm(10)
f ourmom(x)
36
INTRODUCCIÓN A R
2. INTRODUCCIÓN A MINITAB
Es un software estadístico comercial, www.minitab.com, en un entorno Windows. Su funcionamiento es similar a la mayoría del software comercial estadístico, pero con facilidades particulares es el aspecto metodológico por lo que
hemos considerado oportuno incluirlo como representante de esta categoría de
herramientas para el análisis de datos. Todos los elementos que se manejan en
un determinado trabajo se pueden recoger en PROYECTOS para almacenar y
recuperar posteriormente toda la información. Los procedimientos en persianas
que se despliegan al marcar los distintos elementos de la Barra de herramientas
(Toolbars) que aparece en la parte de arriba de la pantalla.
INTRODUCCIÓN A MINITAB
37
2.1. Ventanas Iniciales
Según se arranca MINITAB aparecen distintas “ventanas” que tienen diferentes funciones.
2.1.1. Ventana de la sesión (Session Window)
Recoge todas las salidas de texto como por ejemplo los resultados finales
en la aplicación de los procedimientos.
2.1.2. Ventana de datos (Worksheet)
38
INTRODUCCIÓN A MINITAB
Donde se visualizan y editan las bases de datos. Puede haber varias abiertas. La que está activa, es decir sobre la que se aplican los procedimientos
requeridos es la que contiene ∗ ∗ ∗ junto al nombre. Existen bases de datos almacenadas en el espacio MINITAB. Para abrirlas en la Barra de Herramientas
File → Open Worksheet y por defecto aparecerán los distintos ficheros *.mtw.
Si se quieren exportar es preferible guardarlas como ficheros Minitab Portable
con extensión *.mtp.
VENTANAS INICIALES
39
2.1.3. Ventana de Información General del Proyecto (Project Manager)
Describe todos los elementos utilizados en un Proyecto junto con sus características. Dentro de esta ventana se puede llamar a la Ventana de Historia
(History) en la que se pueden ver todos los comandos asociados a los procedimientos realizados desde la Barra de Herramientas. La posibilidad de utilizar
comandos permitirá la personalización de las aplicaciones en un nivel avanzado
de utilización del software.
Se pueden almacenar:
Variables con la denominación C*
Matrices con la denominación M*
Constantes con la denominación K*.
Para recuperar estos elementos en la Barra de Herramientas Manip →
Display Data.
40
INTRODUCCIÓN A MINITAB
2.1.4. Ventana de Gráficos (Graphs)
Siempre que se solicite la realización de un gráfico, aparecerá una ventana
especial con las figuras.
Si esta ventana está activa, se puede “editar” mediante la persiana Editor
de la Barra de Herramientas
VENTANAS INICIALES
41
o “barrer” (Brush) detectando los puntos de interés.
42
INTRODUCCIÓN A MINITAB
2.2. Procedimientos
Marcando los elementos de la Barra de Herramientas se despliegan las persianas con los descriptores de las distintas tareas que pueden realizarse. Al
señalar un apartado en concreto pueden aparecer nuevas persianas con distintas opciones a realizar o las ventanas de diálogo en las que se definen los
parámetros concretos para ejecutar el procedimiento en un caso particular.
También se pueden utilizar comandos para la ejecución de los procedimientos. Para ello se necesita activar esta opción: Con la ventana de Sesión activa
ir al Editor en la Barra de Herramientas marcar la fila de la persiana con
Enable Commands y aparecerá MTB > en la ventana de Sesión donde se deberán introducir los comandos. Esta forma de trabajo implica un conocimiento
avanzado del software pero como se dijo anteriormente permite desarrollar las
aplicaciones de una forma personalizada.
PROCEDIMIENTOS
43
44
INTRODUCCIÓN A MINITAB
3. PRÁCTICAS
3.1. Importar bases de datos
Con R
- Desde una dirección de internet:
darwin<-read.table(‘‘http://www.mat.ucm.es/~palomam/aedej1.dat’’)
- Desde un fichero de texto
darwin2<-read.table(‘‘C:/aed/datos/ejemplo1.dat’’)
- Desde un fichero de datos (por ejemplo dBase *.dbf) que puede ser una
base de datos abierta en Minitab y guardada como fichero dBase.
cargar el paquete foreign
library(foreign)
Peru<-> read.dbf(‘‘F:/aed/datos/Peru.dbf’’)
- Desde el Campus Virtual de la UCM (Asignatura AED de la Lic. C.C.
Matemáticas)
Ir a Bases de datos → datos.zip → descomprimir → seleccionar el fichero
→ guardar como fichero de texto → abrir desde fichero de texto
Con MINITAB
- Desde una dirección de internet un fichero Minitab Portable:
http://www.mat.ucm.es/~palomam/ejemplo1.mtp
y directamente arranca Minitab o guardar con Worpad como texto en
C:/aed/ej1minitab.mtp
- Desde Minitab:
File → Open Worksheet → Minitab Portable
- Desde un fichero de texto (“C:/aed/datos/ejemplo1.txt”):
File → Other Files → Import Special Text
- Desde el Campus Virtual de la UCM (Asignatura AED de la Lic. C.C.
Matemáticas)
Ir a Bases de datos → datos.zip → descomprimir → seleccionar el fichero
→ guardar como fichero de texto → abrir desde fichero de texto
PRÁCTICAS
45
3.2. Ejercicios
Se van a cargar unos datos que posteriormente servirán para aplicar los
procedimienos considerados. Aunque se encuentran en un fichero comprimido
dentro del Campus Virtual de la UCM, podrán tambien ser descargados desde
http://www.mat.ucm.es/~palomam/aed/datos.
Campus Virtual → Bases de datos → clase1 → Open o Save
Importar los siguientes datos
Datos 1
http://www.mat.ucm.es/~palomam/aed/datos/datos1.dat
49
-67
8
16
6
23
28
41
14
56
24
75
60
-48
29
Minitab (Cortar y Pegar directamente)
R (Cortar y Pegar en Worpad) → Guardar como fichero texto ejemplo1.dat y abrir con read.table o con scan.
Datos 2
http://www.mat.ucm.es/~palomam/aed/datos/datos2.txt
109
113
115
116
119
120
121
124
126
129
46
137.6
147.8
136.8
140.7
132.7
145.4
135
133
148.5
148.3
PRÁCTICAS
130
133
134
135
137
139
141
142
147.5
148.8
133.2
148.7
152
150.6
165.3
149.9
Minitab (Cortar y Pegar directamente sobre dos columnas)
R (Cortar y Pegar en Worpad) → Guardar como fichero de texto
resline.txt y abrir con read.table.
EJERCICIOS
47
48
PRÁCTICAS
Parte II
Análisis de datos
49
4. INTRODUCCIÓN
4.1. Historia
- Utilización de gráficos desde 1786 en que William Playfair representa
muy ajustadamente datos comparados de importaciones y exportaciones en
Inglaterra.
- Diagramas en el libro Statistical Methods for Research Workers escrito en
1925 por Sir Ronald Aylmer Fisher, creador de los fundamentos de la estadística
moderna.
- Pero es el texto de Tukey “Exploratory Data Analysis” (EDA) de 1977, el
que supone un cambio fundamental en el planteamiento del análisis de datos, introduciendo nuevas técnicas y en definitiva una nueva filosofía en el conocimiento estadístico de las bases de datos.
- El futuro se orienta en el desarrollo de las técnicas de Minería de Datos
(Data Mining) utilizando el gran avance de los ordenadores en el manejo de
grandes bases de datos así como en el aumento de la potencia de los procedimientos gráficos.
4.2. Cuestiones Generales
Relación con otro tipo de planteamientos
CLÁSICO: Problema → Datos → Modelo → Análisis → Conclusiones
AED: Problema → Datos → Análisis →Modelo → Conclusiones
BAYESIANO: Problema → Datos →Modelo→ Distribución a
priori → Análisis → Conclusiones
Logros del AED
- Visión global de los datos
- Aplicación de modelos simples y ajustados
- Detección de datos atípicos
- Conclusiones robustas
- Estimadores de parámetros
- Ordenación de factores que inciden en el problema según su importancia
- Observación de factores significativos
INTRODUCCIÓN
51
- Planteamiento del escenario óptimo
Procedimientos
- Cuantitativos
- Gráficos
Tipos de Problemas
½
Variables cuantitativas
Univariantes
Variables cualitativas o categóricas
½
(Y, X1 , . . . , Xk ) → predicción, optimización, . . .
Multivariantes
(X1 , . . . , Xp ) → identificación de estructura
52
INTRODUCCIÓN
5. DESCRIPCIÓN DE DATOS UNIVARIANTES
5.1. Métodos cuantitativos
5.1.1. Medidas de tendencia central
Dados (x1 , . . . , xk ) con frecuencias absolutas (n1 , . . . , nk ) tales que
n = n1 + . . . + nk
- Media aritmética
x̄ =
- Media geométrica
- Media armónica
k
P
xi ni
i=1
n
q
G = n xn1 1 . . . xnk k
H=
n
k
P
i=1
1
n
xi i
- Mediana Considerando todas las observaciones ordenadas
x1:n ≤ · · · ≤ xk:n ≤ · · · ≤ xn:n
si n es impar Me = x([ n ]+1):n
2
si n es par Me =
x( n +1):n +x( n ):n
2
2
2
- Moda Mo
es el valor más frecuente
no tiene por qué ser única (distribuciones bimodales, multimodales,. . . )
5.1.2. Medidas de posición
Cuantil de orden p, tal que 0 < p < 1. Si p =
Me , Q3 .
DESCRIPCIÓN DE DATOS UNIVARIANTES
1
4
cuartiles, Q1, Q2 =
53
Método 1: interpolación entre x(np+1):n y x(np):n si np ∈ Z+
x([np]+1):n si np ∈
/ Z+
Método 2: (R) interpolación entre x[(n−1)p+1]:n y x[(n−1)p+1]+1:n si
(n − 1) p + 1 ∈
/ Z+
x((n−1)p+1):n si (n − 1) p + 1 ∈ Z+
Método 3: (MINIT AB) interpolación entre x[(n+1)p]:n y x[(n+1)p]+1:n
si (n + 1) p ∈
/ Z+
x((n+1)p):n si (n + 1) p ∈ Z+
Bisagras (Hinges de Tukey)
Son las medianas de las “mitades” en que divide la mediana a las observaciones, incluyendo la mediana para un número impar de observaciones:
H1 bisagra inferior
H2 bisagra superior
Forman parte de los Resúmenes de los Valores Letra (Letter Values Displays), que constituyen un método para describir los datos, una vez ordenados y contabilizados, mediante letras que se adjudican a diferentes valores de posición. Por ejemplo M para la mediana, H para las bisagras y así
E, C, D, B, A, . . .
Resumen de los cinco números
Me
H1
xn:n
H2
x1:n
5.1.3. Medidas de dispersión
Varianza
k
P
x2i ni − nx̄2
= i=1
n−1
n−1
Desviación típica o estándar
v
u k
uP
u (xi − x̄)2 ni
t
s = i=1
n−1
s2 =
i=1
k
P
(xi − x̄)2 ni
Coeficiente de variación
CV =
54
s
x̄
DESCRIPCIÓN DE DATOS UNIVARIANTES
Rango intercuartílico
RI = Q3 − Q1
Rango
R = xn:n − x1:n
Desviación media (respecto de la media)
DM =
k
P
i=1
|xi − x̄| ni
n
Desviación mediana
MAD → mediana de {|xi − Me |}i=1,...,n
Desviación de las bisagras (H − spread)
H2 − H1
5.1.4. Medidas de asimetría y curtosis
Se pueden representar las gráficas de distintas funciones de densidad con
diferentes características de simetría y aplastamiento (curtosis)
R: Funciones de densidad
MÉTODOS CUANTITATIVOS
55
R: Funciones de densidad
y sobreponiendo las simétricas respecto del origen,
56
DESCRIPCIÓN DE DATOS UNIVARIANTES
Coeficiente de asimetría Pearson
3 (x̄ − Me )
s
Coeficiente de asimetría muestral
k
P
⎧
(xi − x̄)3 ni ⎨ > 0 asimetría positiva o a la derecha
= 0 simetría
g1 = i=1
(n − 1) s3 ⎩
< 0 asimetría negativa o a la izquierda
Coeficiente de curtosis muestral
k=
k
P
i=1
(xi − x̄)4 ni
(n − 1) s4
⎧
⎨ > 0 leptocúrtica (“picuda”)
= 0 mesocúrtica
−3
⎩
< 0 platicúrtica (“aplastada”)
5.1.5. Datos 1
http://www.mat.ucm.es/~palomam/aed/datos/datos1.dat
MINITAB: Medidas Descriptivas
MÉTODOS CUANTITATIVOS
57
58
DESCRIPCIÓN DE DATOS UNIVARIANTES
Funciones de R
#base de datos
ejemplo1<read.table(‘‘http://www.mat.ucm.es/~palomam/aed/datos/datos1.dat’’)
#función media aritmética
ej1.m<-mean(ejemplo1)
#cálculo de la media aritmética
sum(ejemplo1)/dim(ejemplo1)
#vector de datos
ejemplo1.s<scan(‘‘http://www.mat.ucm.es/~palomam/aed/
datos/datos1.dat’’)
#función media aritmética
ej1.m.s<-mean(ejemplo1.s)
#cálculo de la media aritmética
sum(ejemplo1.s)/length(ejemplo1.s)
#cálculo de la media geométrica
ej1.g<-exp(mean(log(abs(ejemplo1))))
ej1.g.2<-(prod(ejemplo1))^(1/15)
28.81678
#cálculo de la media armónica
ej1.h<-1/(mean(1/ejemplo1))
ej1.2.2<-15/sum(1/ejemplo1)
23.51709
#cuartiles
quantile(ejemplo1.s)
0% 25% 50% 75% 100%
-67 11 24 45 75
#mediana
median(ejemplo1.s)
24
#deciles
quantile(ejemplo1.s,probs=seq(0,1,by=1/10))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
-67.0 -26.4 7.6 14.4 20.2 24.0 28.4 38.6 50.4 58.4 75.0
MÉTODOS CUANTITATIVOS
59
5.1.6. Ejercicios
MINITAB
Valores letra: MINITAB
60
DESCRIPCIÓN DE DATOS UNIVARIANTES
Valores letra: MINITAB (cont.)
Valores letra: MINITAB (cont.)
Datos: Bears.MTW
MÉTODOS CUANTITATIVOS
61
ASIMETRÍA Y CURTOSIS
ASIMETRÍA Y CURTOSIS
62
DESCRIPCIÓN DE DATOS UNIVARIANTES
ASIMETRÍA Y CURTOSIS
ASIMETRÍA Y CURTOSIS
MÉTODOS CUANTITATIVOS
63
R
R: Resumen de los cinco números
Si se generan observaciones, mediante simulación, de los diferentes modelos
cuyas funciones de densidad se representaron anteriormente, se obtendrán los
diferentes valores de las medidas de asimetría y aplastamiento según su forma.
64
DESCRIPCIÓN DE DATOS UNIVARIANTES
5.2. Métodos gráficos
5.2.1. Variables cualitativas
- Diagramas de barras o rectángulos con la misma base
(barplot)
la altura proporcional a la frecuencia de la categoría
- Diagramas de sectores (pie charts)
el ángulo proporcional a la frecuencia de la categoría
- Pictogramas, Cartogramas, . . .
el tamaño de la figura o de la zona sombreada proporcional a la frecuencia de
la categoría
5.2.2. Variables cuantitativas
- Histogramas (de rectángulos con la misma o diferente amplitud de base)
MÉTODOS GRÁFICOS
65
el área del rectángulo proporcional a la frecuencia de la categoría
- Diagramas de puntos (dotplot)
las observaciones → puntos
- Diagramas de caja (boxplot)
la caja limitada por Q1 y Q3 con una línea sobre Me
los “bigotes” hasta el máximo ½
y el mínimo de las observaciones si están
Q1 − α(Q3 − Q1 )
dentro de
Q3 + α(Q3 − Q1 )
(α suele ser 1,5)
∗ → datos atípicos (outliers) fuera de ese rango
También se puede construir (Tukey) con las bisagras H1 y H2 y
los límites
½
F1 = H1 − 1,5(H2 − H1 ) → valla (“fence”) inferior
F2 = H2 + 1,5(H2 − H1 ) → valla (“fence”) superior
- Diagramas de tallo y hojas (stem and leaf plots)
tallo → primerdígito o primer bloque de dígitos
hojas → resto de dígitos hasta completar la observación
5.2.3. Ejercicios
MINITAB
MINITAB: Gráficos
Abrir bases de datos: Grades, Marketd y Bears
66
DESCRIPCIÓN DE DATOS UNIVARIANTES
MINITAB: Gráficos
MINITAB: “PLOT”
MÉTODOS GRÁFICOS
67
MINITAB: “DOTPLOT”
(Diagrama de puntos)
Abrir bases de datos: Pulse
MINITAB: “DOTPLOT”
(Diagrama de puntos)
68
DESCRIPCIÓN DE DATOS UNIVARIANTES
MINITAB: “STEM-AND-LEAF” (Diagrama de tallo y hojas)
Profundidad
MINITAB: “TIME SERIES PLOT”
MÉTODOS GRÁFICOS
69
MINITAB: “TIME SERIES PLOT”
MINITAB: “CHART”
70
DESCRIPCIÓN DE DATOS UNIVARIANTES
MINITAB: “HISTOGRAM”
MÉTODOS GRÁFICOS
71
0,03
Density
0,02
0,01
0,00
30
35
45
60
80
85
90
Length
Ejemplo 1
http://www.mat.ucm.es/~palomam/aed/datos/ejemplo1.dat
49 -67 8 16 6 23 28 41 14 56
24 75 60 -48 29
Ejemplo 2
http://www.mat.ucm.es/~palomam/aed/datos/ejemplo2.dat
15.2
13.5
13.8
13.5
72
14.7
14.3
13.9
13.0
14.4
13.5
13.7
15.0
14.0
15.4
13.5
14.2
13.7
14.6
13.0
14.0
13.4
13.7
13.7
14.6
14.6
13.5
14.4
15.8
14.6
14.2
14.0
13.5
14.5
13.8
13.7
15.1
DESCRIPCIÓN DE DATOS UNIVARIANTES
MINITAB: Gráfico de puntos
Datos
atípicos
MÉTODOS GRÁFICOS
73
MINITAB: Histograma
MINITAB: Ventana diálogo de histograma
74
DESCRIPCIÓN DE DATOS UNIVARIANTES
MINITAB: Graph →Histogram→Frame→Tick →Labels(0,75)
Funciones de R
#ejemplo2
ejemplo2<scan(‘‘http://www.mat.ucm.es/~palomam/aed/datos/ejemplo2.dat’’)
#Tabla de frecuencias
ej2.c<-cut(ejemplo2,breaks=c(13,13.5,13.75,14,14.25,14.5,15,16)
,include.lowest =TRUE, right = FALSE)
class(ej2.c)
table(ej2.c)
class(table(ej2.c))
median(ejemplo2)
median(ej2.c)
median(table(ej2.c))
attributes(ej2.c)
#histograma
hist(ejemplo2)
hist(ejemplo2,freq=FALSE)
hist(ejemplo2,breaks=c(13,13.5,13.75,14,
14.25,14.5,15,16),ylim=c(0,1))
#Se pueden ajustar diferentes ‘‘normales’’
MÉTODOS GRÁFICOS
75
curve(dnorm(x,mean(ejemplo2),sd(ejemplo2)),add=TRUE)
curve(dnorm(x,13.828,0.4482),add=TRUE,col=‘‘red’’)
curve(dnorm(x,14.916,0.4482),add=TRUE,col=‘‘green’’)
#Finalmente se puede ajustar una ‘‘mixtura de normales’’
curve(0.74*dnorm(x,13.828,0.4482)+0.26*dnorm(x,14.916,0.4482)
,add=TRUE,col=‘‘blue’’,lwd=‘‘2’’)
Mediante simulación se pueden generar muestras de diferentes modelos,
cuyas funciones de densidad se representaron anteriormente, y comparar con
sus histogramas
76
DESCRIPCIÓN DE DATOS UNIVARIANTES
MÉTODOS GRÁFICOS
77
78
DESCRIPCIÓN DE DATOS UNIVARIANTES
5.2.4. Manipulación de gráficos con
R.
R: Añadir elementos a un gráfico
R: Añadir puntos
MÉTODOS GRÁFICOS
79
R: Añadir líneas
tamaño de línea
R: Añadir texto
80
texto en el centro
DESCRIPCIÓN DE DATOS UNIVARIANTES
R
R: Sobreponer gráficos
No se marcan los ejes
MÉTODOS GRÁFICOS
81
82
DESCRIPCIÓN DE DATOS UNIVARIANTES
6. DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.1. Métodos cuantitativos
6.1.1. Matriz de datos
Xn×p
⎛
X11
⎜ ..
= ⎝ .
Xn1
↑
...
...
...
...
variable Z1
⎛
⎞
X1p
⎜
⎟
..
⎠ =⎝
.
Xnp
↑
⎞
X10
←− individuo 1
..
.. ⎟
.
. ⎠
0
←− individuo n
Xn
variable Zp
6.1.2. Población (Modelo)
Variable aleatoria p-dimensional
⎛
⎞
Z1
⎜
⎟
Z = ⎝ ... ⎠
Zp
⎞
μ1 = E [Z1 ]
⎟
⎜
..
media: E [Z] = μ = ⎝
⎠
.
μp = E [Zp ]
⎛
¤
£
matriz de covarianzas: Cov [Z] = Σ = E (Z − E [Z]) (Z − E [Z])0 =
= E [ZZ 0 ] − μμ0 =
⎞
⎛
···
⎜ V ar [Z1 ]
Cov [Zi , Zj ] ⎟
⎟
⎜
⎟
=⎜
.
.
⎟
⎜
.
⎠
⎝ Cov [Zi , Zj ]
···
V ar [Zp ]
donde Cov [Zi , Zj ] = E [(Zi − E [Zi ]) (Zj − E [Zj ])] = E [Zi Zj ] − E [Zi ] E [Zj ].
DESCRIPCIÓN DE DATOS MULTIVARIANTES
83
Subconjuntos de variables
Si se consideran los grupos de variables Z =
⎞
Zr+1
⎟
⎜
V = ⎝ ... ⎠ se tiene que
Zp
⎛
media: E [Z] =
µ
µ
U
V
μU = E [U ]
μV = E [V ]
matriz de covarianzas: Cov [Z] =
µ
¶
⎛
⎞
Z1
⎜
⎟
donde U = ⎝ ... ⎠ y
Zr
¶
ΣUU ΣU V
ΣV U ΣV V
¶
6.1.3. Estadísticos
Vector de medias:
⎛
⎞
X̄1
⎜
⎟
X̄ = ⎝ ... ⎠
X̄p
donde X̄j =
1
n
n
X
k=1
Xkj =
1
n
¡
X1j . . . Xnj
⎛
⎞
1
¢⎜ . ⎟
⎝ .. ⎠, por tanto
1
| {z }
1n
−1
X̄ = (10n 1n )
X0 1n
Matriz de covarianzas muestral:
⎛
⎜ S11
⎜
S=⎜
⎜
⎝ Sij
84
···
...
···
⎞
Sij ⎟
⎟
⎟
⎟
⎠
Spp
DESCRIPCIÓN DE DATOS MULTIVARIANTES
donde
Sij = Sji =
Sii =
n
X
¡
¢¡
¢
Xki − X̄i Xkj − X̄j
k=1
n
X
¡
¢2
Xki − X̄i
n−1
=
à n
X
Xki Xkj
k=1
!
− nX̄i X̄j
n−1
k=1
n−1
son las varianzas y covarianzas muestrales.
Por lo tanto
n
¢¡
¢0
1 X¡
Xk − X̄ Xk − X̄ .
S=
n − 1 k=1
Además se puede demostrar que E [S] = Σ.
Cálculo a partir de la matriz de datos centrados
Sea
entonces
⎞
X11 − X̄1 . . . X1p − X̄p
⎟
⎜
..
..
...
XC = ⎝
⎠
.
.
Xn1 − X̄1 . . . Xnp − X̄p
⎛
XC = X − 1n X̄0
1
X0C XC .
S =
n−1
También XC = PX, donde P = In −1n (10n 1n )−1 10n es una matriz simétrica
e idempotente y así
1
X0 PX
S=
n−1
Matriz de correlación muestral:
⎛
donde
⎜ 1
⎜
R=⎜
⎜
⎝ Rij
···
...
···
⎞
Rij ⎟
⎟
⎟
⎟
⎠
1
Sij
Rij = Rji = p
Sii Sjj
2
son los coeficientes de correlación muestral, 0 ≤ Rij
≤ 1.
MÉTODOS CUANTITATIVOS
85
⎞
⎛ √
S11 · · ·
0
⎟
⎜
...
Si DS = ⎝ 0
⎠ se tiene
p0
Spp
0
···
−1
R= D−1
S SDS
S = DS RDS
Subconjuntos de variables
Si X =
( B1
|
B2 )
se tiene
|{z}
|{z}
observaciones
observaciones
de U
de V
¶
µ
X̄U
vector de medias: X̄ =
X̄V
¶
µ
SUU SU V
matriz de covarianzas muestral: S =
SV U SV V
6.1.4. Combinaciones lineales de variables
⎞
Z1
⎟
⎜
Supongamos que dada la variable aleatoria Z = ⎝ ... ⎠ tal que E [Z] =
Zp
μZ y Cov⎛
[Z] = ⎞
ΣZ , se define la variable aleatoria Y = a1 Z1 + . . . + ap Zp = a0 Z
a1
⎜ .. ⎟
para a = ⎝ . ⎠, entonces
ap
⎛
E [Y ] = a0 μZ
Cov [Y ] = a0 ΣZ a.
⎞
⎛
X11 . . . X1p
⎟
⎜
..
...
Las observaciones X = ⎝ ...
⎠ se transforman en W = Xa
.
Xn1
...
Xnp
y por lo tanto
media muestral: w̄ = a0 X̄
varianza muestral: s2w = a0 SX a.
⎛
⎞
a11 . . . a1p
⎜
.. ⎟ entonces
...
En general sea Y = AZ donde A = ⎝ ...
. ⎠
...
aqp
aq1
E [Y ] = AμZ
86
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Cov [Y ] = AΣZ A0
En este caso, las observaciones pasan a ser W = XA0 por lo que
vector de medias: W̄ = AX̄
matriz de covarianzas muestral: SW = ASX A0 .
6.1.5. Medidas de variabilidad alrededor de X̄
Sea la matriz de datos
⎛
Xn×p
X11
⎜ ..
=⎝ .
Xn1
...
...
...
⎞ ⎛
X1p
⎟ ⎜
..
⎠=⎝
.
Xnp
⎞
X10
.. ⎟
. ⎠
Xn0
con matriz de covarianzas S, entonces las cantidades que suelen definirse para
describir el comportamiento de la “nube de puntos” alrededor de su media, se
basan en la evalución de distintas características de dicha matriz de covarianzas.
Varianza Total
V T = suma(elementos de la diagonal de S)
Varianza Media
VM =
1
suma(elementos de la diagonal de S)
p
Varianza Generalizada
V G = determinante(S)
Otra forma de tratar el problema conlleva la introducción de la distancia
de Mahalanobis entre un punto xi y la media X̄ definida por
(xi − x̄) .
∆2 (xi , x̄) = (xi − x̄)0 S−1
x
6.1.6. Coeficientes de asimetría y curtosis multivariantes
Sean dij = (xi − x̄)0 S−1
x (xj − x̄) para cualquier par de observaciones xi y
xj . Se puede demostrar que
∆2 (xi , xj ) = ∆2 (xi , x̄) − 2dij + ∆2 (xj , x̄) .
Los coeficientes más utilizados se basan en estas cantidades calculadas para
todas las observaciones.
MÉTODOS CUANTITATIVOS
87
Coeficiente de asimetría
∆p =
n
n
1 XX 3
d
n2 i=1 j=1 ij
Coeficiente de curtosis
1X 2
d
Kp =
n i=1 ii
n
6.1.7. Manipulación de matrices con MINITAB
MINITAB : Matrices desde “Worksheet”
Datos Cities
88
Construcción de la
matriz M1 con las
columnas C2 a C6
DESCRIPCIÓN DE DATOS MULTIVARIANTES
MINITAB : Matrices desde “Worksheet”
Manip→Display Data
MINITAB : Matrices desde “keyboard”
Dede ventana Session → Editor → Enable Commands
MÉTODOS CUANTITATIVOS
89
MINITAB : Matrices desde fichero
Desde
http://www.mat.ucm.es/~palomam/aed
/datos/calcio.txt
datos calcio.txt sin la 1ª columna
Manip→Display Data
MINITAB : Operaciones con matrices
Calcula la traspuesa
Calcula la inversa
Rellena con un valor constante
Construye una matriz diagonal con una
columna o pasa la diagonal de una
matriz a un columa
Autovalores y autovectores
Suma resta y multiplicación
90
DESCRIPCIÓN DE DATOS MULTIVARIANTES
MINITAB: Vector de medias y matriz de
covarianzas (Datos “Cities”)
Si se almacena
como COVA1
6.1.8. Ejercicios con R
Ejercicio 1 : Con los datos Pulse de Minitab
http://www.mat.ucm.es/~palomam/aed/datos/pulse.txt
y utilizando Minitab y R, se pide:
•Seleccionar las variables Pulse 1, Pulse 2, Weight y Height
•Determinar las matrices de covarianzas y correlación
•Calcular el vector de medias a partir de la matriz de datos X
•Determinar XC y P
•Comprobar que P es simétrica e idempotente
•Determinar la matriz de covarianzas a a partir de XC
pulse<read.table("http://www.mat.ucm.es/~palomam/aed/datos/pulse.txt",
header=TRUE)
#se elimina la primera columna
MÉTODOS CUANTITATIVOS
91
pulse<-pulse[,-1]
#se convierte en una matriz
m.pulse<-as.matrix(pulse)
#la media
pulse.mean<-apply(pulse,2,mean)
#la matriz de covarianzas
cov(pulse)
#la matriz de correlaciones
cor(pulse)
#la matriz de datos centrados
pulse.c<-scale(pulse,scale=FALSE)
class(pulse.c)
#cálculo de cov(pulse)
(1/(nrow(pulse)-1))*t(pulse.c)%*%pulse.c
#cálculo de la media
t(pulse)
t(pulse)%*%seq(1,1,length=nrow(pulse))
(1/nrow(pulse))*t(m.pulse)%*%seq(1,1,length=nrow(pulse))
#cálculo de la matriz P
P<-diag(nrow(pulse))-(1/nrow(pulse))*
seq(1,1,length=nrow(pulse))%*%t(seq(1,1,length=nrow(pulse)))
P%*%m.pulse
#Propiedades de P
(P%*%P)-P
t(P)-P
92
DESCRIPCIÓN DE DATOS MULTIVARIANTES
La salida de los resultados
> cov(pulse)
Pulse2 Height Weight
Pulse2 292.197802 -8.928571 -68.41758
Height -8.928571 13.390409 68.18084
Weight -68.417582 68.180841 563.55901
> cor(pulse)
Pulse2 Height Weight
Pulse2 1.0000000 -0.1427403 -0.1686008
Height -0.1427403 1.0000000 0.7848664
Weight -0.1686008 0.7848664 1.0000000
> (1/nrow(pulse))*t(m.pulse)%*%seq(1,1,length=nrow(pulse))
[,1]
Pulse1 72.86957
Pulse2 80.00000
Height 68.71739
Weight 145.15217
>
Ejercicio 2 : Con los datos diab.txt
http://www.mat.ucm.es/~palomam/aed/datos/diab.txt
y utilizando Minitab y R se pide:
Determinar vector de medias y matriz de covarianzas
•Separar las variables 1 y 2 y determinar sus características
•Determinar, a partir de todos los datos, XC
•Si interesa la variable Z=1.2X1+0.4X2+0.1X3+0.1X4+1.2X5
determínese la media y la varianza muestral asociada a los datos
diab<read.table("http://www.mat.ucm.es/~palomam/aed/datos/diab.txt")
diab<-diab[,-1]
m.diab<-as.matrix(diab)
#la media
diab.mean<-apply(diab,2,mean)
#solo de las dos primeras columnas
diab.mean.i<-diab.mean[c(1,2)]
#la matriz de covarianzas
MÉTODOS CUANTITATIVOS
93
diab.cov<-cov(diab)
#solo de las dos primeras columnas
diab.cov.i<-diab.cov[c(1,2),c(1,2)]
#la matriz de correlaciones
cor(diab)
#los datos centrados
scale(diab,scale=FALSE)
#Z = 1.2X1 + 0.4X2 + 0.1X3 + 0.1X4 + 1.2X5
a<-c(1.2,0.4,0.1,0.1,1.2)
#la media
med.y<-t(a)%*%diab.mean
#la varianza
var.y<-t(a)%*%diab.cov%*%a
#en efecto
Y<-m.diab%*%a
mean(Y)
var(Y)
La salida de los resultados
> diab.mean
V2
V3
V4
V5
V6
0.917826 90.413043 340.826087 171.369565 97.782609
> diab.mean.i
V2
V3
0.917826 90.413043
> diab.cov
V2
V3
V4
V5
V6
V2 0.01618184
0.216029
0.7871691
-0.2138454
2.189072
V3 0.21602899 70.558937
26.2289855 -23.9560386 -20.841546
V4 0.78716908 26.228986 1106.4135266 396.7323671 108.383575
V5 -0.21384541 -23.956039 396.7323671 2381.8826087 1142.637681
V6 2.18907246 -20.841546 108.3835749 1142.6376812 2136.396135
> diab.cov.i
V2
V3
V2 0.01618184 0.216029
V3 0.21602899 70.558937
94
DESCRIPCIÓN DE DATOS MULTIVARIANTES
> cor(diab)
V2
V3
V4
V2 1.00000000 0.20217252 0.1860353
V3 0.20217252 1.00000000 0.0938743
V4 0.18603532 0.09387431 1.0000000
V5 -0.03444497 -0.05843578 0.2443873
V6 0.37231056 -0.05368006 0.0704959
> med.y
[,1]
[1,] 205.8253
> var.y
[,1]
[1,] 3417.609
> mean(Y)
[1] 205.8253
> var(Y)
[,1]
[1,] 3417.609
>
MÉTODOS CUANTITATIVOS
V5
V6
-0.03444497 0.37231056
-0.05843578 -0.05368006
0.24438735 0.07049590
1.00000000 0.50653268
0.50653268 1.00000000
95
Ejercicio 3 : Sea Z =
1
X= 4
4
2
1
0
5
6
4
Z1
Z2
de la que se obtienen los datos
Z3
y sean
W1=2 Z1+2 Z2- Z3
W2= Z1- Z2+3 Z3
Se pide: la nueva matriz de datos, vector de medias y
matriz de covarianzas
96
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.1.9. Estudio de la variabilidad
Se pueden comparar las medidas introducidas anteriormente o utilizar el
concepto de distancia estadística (Mahalanobis).
EJEMPLO
Con los datos
“http://www.mat.ucm.es/~palomam/aed/datos/dat1.txt” (cruces verdes)
“http://www.mat.ucm.es/~palomam/aed/datos/dat2.txt” (círculos rojos)
se obtienen dos tipos de “nubes de puntos” que pueden representarse con R.
dat1<read.table("http://www.mat.ucm.es/~palomam/aed/datos/dat1.txt")
plot(dat1,col="green",pch=3)
dat2<read.table("http://www.mat.ucm.es/~palomam/aed/datos/dat2.txt")
points(dat2[,1],dat2[,2],col="red")
med1<-apply(dat1,2,mean)
med2<-apply(dat2,2,mean)
points(rbind(med1,med2),col=c("dark green","dark red"),pch=19)
text(2,2.7,"med1",font=2)
text(2.7,3.5,"med2",font=2)
4
5
6
Obteniéndose el siguiente gráfico
3
X..2.
med2
1
2
med1
0
1
2
3
4
5
X..1.
y las siguientes características
MÉTODOS CUANTITATIVOS
97
cov1<-cov(dat1)
cov2<-cov(dat2)
cor1<-cor(dat1)
cor2<-cor(dat2)
#Varianza total
VT1=sum(diag(cov1))
VT2=sum(diag(cov2))
#Varianza media
VM1=(1/ncol(dat1))*sum(diag(cov1))
VM2=(1/ncol(dat2))*sum(diag(cov2))
#Varianza generalizada
VG1=det(cov1)
VG2=det(cov2)
que dan como salida
> cov1
X..1.
X..2.
X..1. 1.2286660 0.9760124
X..2. 0.9760124 1.2610625
> cov2
x.2
y.2
x.2 1.3551807 -0.1775550
y.2 -0.1775550 1.2930154
> cor1
X..1.
X..2.
X..1. 1.0000000 0.7840976
X..2. 0.7840976 1.0000000
> cor2
x.2
y.2
x.2 1.0000000 -0.1341320
y.2 -0.1341320 1.0000000
> VT1
[1] 2.489729
> VT2
[1] 2.648196
> VM1
[1] 1.244864
> VM2
[1] 1.324098
> VG1
[1] 0.5968244
> VG2
[1] 1.720744
98
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Distancias entre los puntos y las medias
Consideramos la posición de los puntos xp1 y xp2 respecto de la media de
los datos dat1.txt.
3
med1
2
X..2.
4
5
6
#Distancias a la media
plot(dat1,col="dark blue",ylim=c(0,6))
points(med1[1],med1[2],col="red",pch=19,cex=1.2)
text(2,2.7,"med1",col="red",cex=1.2)
xp1<-c(3.5,2)
points(xp1[1],xp1[2],pch=20,cex=1.2)
arrows(5,2.5,3.8,2,col="red")
legend(3,1.8,"xp1",adj=0.5)
xp2<-c(0.5,1)
points(xp2[1],xp2[2],pch=20,cex=1.2)
arrows(0,2.5,0.4,1.3,col="red")
legend(0.7,0.7,"xp2",adj=0.5)
1
xp1
0
xp2
0
1
2
3
4
5
X..1.
MÉTODOS CUANTITATIVOS
99
que puede cuantificarse mediante la evaluación de la “distancia de Mahalanobis” y la “distancia euclídea”.
dist<-function(x,med)
{
dist.mah<-sqrt(t(x-med)%*%solve(cov1)%*%(x-med))
print("distancia de Mahalanobis")
print(dist.mah)
dist.euc<-sqrt(t(x-med)%*%(x-med))
print("distancia euclidea")
print(dist.euc)
}
dist(xp1,med1)
dist(xp2,med1)
que efectivamente reflejan la posición de xp2 más cercana a la “nube de puntos”
(menor "distancia de Mahalanobis") que xp1, a pesar de estar más alejado de
la media (mayor "distancia euclídea")
> dist(xp1,med1)
[1] "distancia de Mahalanobis"
[,1]
[1,] 3.324378
[1] "distancia euclidea"
[,1]
[1,] 1.74491
> dist(xp2,med1)
[1] "distancia de Mahalanobis"
[,1]
[1,] 1.779564
[1] "distancia euclidea"
[,1]
[1,] 2.540302
6.1.10. Comparación de asimetría y curtosis
A partir de los datos
“http://www.mat.ucm.es/~palomam/aed/datos/dat1.txt” (cruces verdes)
“http://www.mat.ucm.es/~palomam/aed/datos/dat2.txt” (círculos rojos)
se pueden comparar sus aspectos de asimetría alrededor la media y de curtosis.
100
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.2. Métodos gráficos
6.2.1. Gráficos para dos variables
- Gráficos de dispersión o nubes de puntos (scatterplots)
Cada observación un punto en el plano.
- Matrices de gráficos de dispersión (matrix plots)
Matrices bidimensionales compuestas de gráficos de dispersión individuales
para cada par de variables.
- Gráficos marginales
Como complemento a los anteriores, con representación, en los bordes, de
histogramas, diagramas de caja,. . . para cada variable.
6.2.2. Gráficos para tres variables
- Gráficos de dispersión o nubes de puntos (scatterplots)
Cada observación un punto en el espacio.
- Gráficos de contorno (contour plots)
Puntos representando las observaciones de dos de las variables para valores
fijos de las observaciones de la tercera variable.
- Gráficos de superficie y de líneas (surface and wireframe plots)
MÉTODOS GRÁFICOS
101
Generan una red de polígonos formados por caras y lados que representan
las observaciones de las tres variables.
6.2.3. Operaciones con los gráficos anteriores
- Barrido (brushing)
Permite señalar puntos y analizarlos por separado.
- “Spinnig” herramienta incorporada en cierto tipo de software (por ejemplo S-Plus), que permite girar los tres ejes para profundizar en las relaciones
de las tres variables.
6.2.4. Perfiles Multivariantes
Se pretende recoger toda la información de la base de datos con más de dos
columnas, en una figura de dos dimensiones.
- Curvas de Fourier o de Andrews
Método propuesto por Andrews y que consiste en representar cada observación p-variante (x1 , . . . , xp ) mediante la curva de Fourier
x1
f (t) = √ + x2 sin t + x3 cos t + x4 sin 2t + x5 cos 2t + . . .
2
representada en el intervalo (−π, π)
- Caras de Chernoff
Cada observación se representa por una cara donde el valor de cada variable
representa la medida de un rasgo de la misma, por ejemplo tamaño de nariz,
de boca. . . , posición de ojos,. . .
- Estrellas
Cada observación (de variables no negativas) se representa en dos dimensiones mediante círculos de radio fijo con p líneas emanando del centro.
La longitud de cada línea es el valor que tiene cada variable en dicha observación. Si se unen los extremos finales de los radios cada observación representada por una estrella.
6.2.5. Gráficos condicionados (Coplots)
Permiten la representación de dos variables condicionando por los valores
de una tercera variable. Considerando distintas particiones del rango de la
variable que condiciona se pueden obtener “nubes de puntos” de las otras dos
variables, obteniéndose información sobre la relación entre las tres variables.
102
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.2.6. Ejercicios con MINITAB
GRÁFICOS MULTIVARIANTES: MINITAB
Matrices de gráficos de
dispersión
Datos Cereal en
Minitab → Graph
→ Matrix Plot
Matrices de gráficos de
dispersión
Variable de grupo Fat
MÉTODOS GRÁFICOS
103
Gráficos de contorno
Datos Bears en Minitab →
Graph → Contour Plot
5 valores
Gráficos de dispersión
Datos Bears en Minitab → Graph
→ 3D, 3DWireframe, 3DSurface
Plot
104
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Gráficos de dispersión Make Mesh Data
Gráficos de dispersión
Normal Bivariante → Graph →
3D, 3DWireframe, 3DSurface Plot
MÉTODOS GRÁFICOS
105
6.2.7. Ejercicios con R
GRÁFICOS MULTIVARIANTES: R
Paquetes fundamentales: grDevices, graphics, grid y lattice
“máquina” gráfica
sistemas gráficos
paquete gráfico construido sobre el sistema
grid para producir gráficos Trellis
Trellis Display
Cleveland, W. (1993), Visualizing Data
Tipos de funciones gráficas:
•ALTO NIVEL: producen gráficos completos
•BAJO NIVEL: añaden elementos a un gráfico existente
•INTERACTIVAS: permiten trabajar con una salida gráfica de forma interactiva
PAQUETE GRAPHICS
Identifica puntos de forma
interactiva
Localiza hasta 20 puntos
106
DESCRIPCIÓN DE DATOS MULTIVARIANTES
PAQUETE GRAPHICS: Perfiles Multivariantes
Con los datos en http://www.mat.ucm.es/~palomam/aed/datos/frenos2.dat
se define el objeto frenos que representan las características de seis marcas de
frenos
frenos<read.table("http://www.mat.ucm.es/~palomam/aed/datos/frenos2.dat"
,row.names=1)
obteniendo su representación mediante Perfiles Multivariantes: Caras de Chernoff (faces), Estrellas (stars) y Curvas de Fourier o de Andrews
MÉTODOS GRÁFICOS
107
PAQUETE GRAPHICS: “Coplots”
108
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Los Trellis Graphics son un nuevo sistema para la realización de gráficos
con S-PLUS. El paquete Lattice de R consiste en la implementación de los
“gráficos Trellis” en R. Por tanto es un paquete gráfico de segunda generación
en el que se incluyen funciones de alto nivel para la creación de gráficos como
“objetos trellis”.
PAQUETE LATTICE
MÉTODOS GRÁFICOS
109
PAQUETE LATTICE
PAQUETE LATTICE
110
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Se puede añadir un título
en un objeto nuevo
6.3. Dependencia entre pares de variables cuantitativas
6.3.1. Métodos gráficos
Estudio de la nube de puntos
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
111
6.3.2. Medidas cuantitativas
Coeficiente de correlación (lineal) mide el grado de dependencia lineal
entre las variables
sij
rij =
si sj
siendo
!
à n
n
X
X
(xki − x̄i ) (xkj − x̄j )
xki xkj − nx̄i x̄j
sij = sji =
s2i =
n
X
k=1
k=1
(xki − x̄i )2
n−1
n−1
=
k=1
n−1
.
Es tal que −1 ≤ rij ≤ 1 y si:
rij = 1 existe relación lineal positiva entre las variables i y j
rij = −1 existe relación lineal negativa entre las variables i y j
rij = 0 no existe relación lineal entre las variables i y j
Coeficiente de correlación de Spearman detecta dependencia monótona entre las variables y se calcula mediante el coeficiente de correlación entre
los rangos de las observaciones.
Ejemplo: Sean las observaciones
X 70.0 65.0 63.0 72.0 81.0 83.0 66.0 75.0 80.0 75.0 79.0 76 76.0
69.0 75.0 74.0 85.0 86.0 71.0 64.0 78.0 80.0 74.0 72.0 77.0 81.0 82.0
80.0 80.0 80 87
Y 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 24.2 21 21.4
21.3 19.1 22.2 33.8 27.4 25.7 24.9 34.5 31.7 36.3 38.3 42.6 55.4 55.7
58.3 51.5 51 77
112
DESCRIPCIÓN DE DATOS MULTIVARIANTES
entonces rxy = 0.598 y considerando los rangos de las variables
rango (X) 6 3 1 8.5 25.5 28 4 13 22 13 19 15.5 15.5 5 13 10.5
29 30 7 2 18 22 10.5 8.5 17 25.5 27 22 22 22 31
rango (Y) 2.5 2.5 1 5 7 9 4 6 15 10 16 11 13 12 8 14 21 19 18
17 22 20 23 24 25 28 29 30 27 26 31
el coeficiente de correlación de Spearman es ρxy = 0.579
6.3.3. Regresión lineal simple
Sean las observaciones {(x1 , y1 ) , . . . , (xn , yn )} de (X, Y ) cuya nube de puntos tiene una “forma lineal”,
para ajustar una recta a la nube de puntos utilizaremos el modelo de regresión
lineal simple.
Modelo
Suponemos que existe una recta recta y = α+βx sobre la que se encuentran
las medias condicionadas E [Y | X = xi ] para i = 1, . . . , n, de forma que las
observaciones son yi = α + βxi + εi i = 1, . . . , n donde {εi } son “ruido” o sea
observaciones independientes de una N (0, σ).
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
113
entonces se determina la recta y = α̂ + β̂x de tal forma que
mı́n
α,β
³
´´2
Pn ³
i=1 (yi − (α + βxi )) =
i=1 yi − α̂ + β̂xi
Pn
2
(criterio de mínimos cuadrados)
obteniéndose los estimadores
α̂ = ȳ − β̂ x̄
P
xi yi − nx̄ȳ
.
β̂ = P 2
xi − nx̄2
Gráficamente podría obtenerse la siguiente representación
114
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Residuos
Se definen
³
´
ε̂i = yi − α̂ + β̂xi = yi − ŷi ; i = 1, . . . , n
y son una herramienta esencial para el diagnóstico y validación de las hipótesis establecidas en el planteamiento inicial del modelo de regresión lineal. También permiten definir el estimador de σ 2 mediante
1 X 2
ε̂
n − 2 i=1 i
n
σ̂ 2 =
Análisis de residuos
Se utilizan los gráficos que representan los puntos {(ŷi , ε̂i ) ; i = 1, . . . , n}
analizando los patrones que describen para verificar si el modelo de regresión
lineal es el adecuado. Así, por ejemplo se pueden obtener las siguientes nubes
de puntos
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
115
6.3.4. Regresión con R
Todos los elementos de la regresión en R se recogen en un “objeto lm” cuyos
elementos se especifican si se solicitan sus “attributes” o su “summary”.
Si se obtiene, mediante simulación, una nube de puntos alrededor de y =
2x+1 con errores N (0, 2), se podrá ajustar la correspondiente recta de mínimos
cuadrados.
116
DESCRIPCIÓN DE DATOS MULTIVARIANTES
REGRESIÓN en R
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
117
REGRESIÓN Y CORRELACIÓN en R
ANÁLISIS DE RESIDUOS
118
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.3.5. Regresión con MINITAB
Se selecciona la persiana
obteniéndose la ventana de diálogo donde se especificarán las variables consideradas y la opciones de resultados requeridos
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
119
6.3.6. Ejemplo 3
Con los datos de
http://www.mat.ucm.es/~palomam/aed/datos/ejemplo3.txt
15
11
16
24
14
11
18
17
20
13
17
15
18
25
16
12
20
24
19
30
MINITAB: Nube de puntos
Dato atípico
120
DESCRIPCIÓN DE DATOS MULTIVARIANTES
MINITAB: Barrido (“Brush”)
Editor→Brush
MINITAB: Regresión con todos los datos
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
121
MINITAB: Regresión sin dato atípico
R
122
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.3.7. Ejemplo 4
Con los datos de
http://www.mat.ucm.es/~palomam/aed/datos/ejemplo4.txt
1.38
1.4
1.24
1.36
1.48
1.38
1.56
1.14
1.2
1.18
1.26
1.64
1.7
1.72
1.74
1.82
1.9
2.08
1.78
1.86
1.96
2
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
123
MINITAB: Nube de puntos separados
R
ejemplo4<read.table("http://www.mat.ucm.es/~palomam/aed/datos/ejemplo4.txt")
plot(ejemplo4)
plot(ejemplo4,pch=19)
plot(ejemplo4[1:7,],pch=8,xlim=c(1,1.6))
points(ejemplo4[8:11,],pch=16)
abline(-0.5,1.8617,col=red")
124
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.3.8. Ejemplo 5
Con los datos de
http://www.mat.ucm.es/~palomam/aed/datos/ejemplo5.txt
1 0.59
2 0.81
3 0.83
4 0.97
5 1.01
6 1.02
7 1.2
8 1.88
9 4.34
10 5.33
MINITAB: Nube de puntos
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
125
MINITAB: Regresión con todos los datos
MINITAB: Regresión sin datos atípicos
126
DESCRIPCIÓN DE DATOS MULTIVARIANTES
R
3
1
2
V2
4
5
ejemplo5<read.table("http://www.mat.ucm.es/~palomam/aed/datos/ejemplo5.txt")
apply(ejemplo5,2,mean)
plot(ejemplo5)
attach(ejemplo5)
reg1<-lm(V2~V1)
summary(ejemplo5)
summary(reg1)
abline(reg1,col="green")
xn<-ejemplo5[-c(9,10),1]
yn<-ejemplo5[-c(9,10),2]
mean(xn)
mean(yn)
reg5<-lm(yn~xn)
abline(reg5,col=red")
2
4
6
8
10
V1
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
127
6.3.9. Regresión no paramétrica
La idea fundamental radica en huir de un marco paramétrico, como el que
acabamos de mencionar en el Modelo de Regresión Lineal Simple y hacer,
únicamente, la hipótesis de que la media condicionada es una función f que se
comporta con cierta suavidad –“smoothness”–; lo suficiente como para que su
valor en puntos X próximos pueda suponerse muy similar. Sobre la dispersión
de Y respecto a nuestra función objetivo, mantenemos la hipótesis de que es
constantemente igual a σ 2 .
Casi seguro que ante la pregunta de ¿cómo actuaría sobre los datos para
“estimar” la función f ? una respuesta muy frecuente sería del tipo: asociando
a cada X un resumen estadístico de los valores de Y en las proximidades del
X considerado; es decir, algo así como calcular medias locales. Si hiciéramos
un gráfico de dichas medias sobre el diagrama de dispersión del par (X, Y ),
tendríamos una versión suavizada de la nube de puntos; de ahí que los métodos
reciban el nombre de suavizadores –en inglés “smoothers”–.
Regresión Local (LOESS, LOWESS)
Este método calcula, para cada valor X = x0 , el promedio de Y que se
obtiene ajustando un modelo de regresión lineal, por mínimos cuadrados ponderados, en un entorno de x0 . Evidentemente, habrá que concretar lo que
entendemos por un entorno de x0 y los pesos que utilizaremos en las ponderaciones para los mínimos cuadrados; lo demás está perfectamente definido. Se
suele tomar como vecindad –entorno– de x0 los k vecinos más próximos, es
decir, los puntos que dan los k valores más pequeños a la distancia |x − x0 |.
Habitualmente, el valor de k se especifica mediante un porcentaje –conocido
como “span”– del número total de observaciones del par (X, Y ); los valores
más frecuentes son los del intervalo [0.3, 0.5], aunque el valor que se toma en
R por defecto es 2/3. Respecto a los pesos, a cada punto x del entorno de x0
se le asigna el peso
µ
¶
|x − x0 |
w
∆x0
siendo ∆x0 la máxima distancia encontrada en el entorno y w (·) una función
–denominada tri-cubo– definida por
w (t) =
½
3
(1 − t3 )
0
, si 0 ≤ t < 1
.
en los demás casos.
Gráficamente, el procedimiento podría explicarse mediante la siguiente representación donde el tamaño de los círculos refleja el peso de cada punto en el
entorno considerado para x0 = 8.
128
DESCRIPCIÓN DE DATOS MULTIVARIANTES
Puede aplicar este procedimiento a los datos
http://www.mat.ucm.es/~palomam/aed/datos/loess2.txt
sin más que ejecutar, en
R, las instrucciones siguientes:
lo<read.table("http://www.mat.ucm.es/~palomam/aed/datos/loess2.txt"
,header=T)
attach(lo)
plot(x,y)
lines(loess.smooth(x,y),col="red")
lines(loess.smooth(x,y,span=0.25),col="green")
El resultado es el que se muestra en la siguiente figura; en ella aparecen los
ajustes locales obtenidos con un “span” de 0.25, la línea verde, y por defecto
con un “span” de 2/3, la roja.
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
129
En MINITAB se puede representar este ajuste como opción al solicitar un
“Plot” de los puntos. Así, con el ejemplo anterior aparece la siguiente ventana
al solicitar Graph→Plot
130
DESCRIPCIÓN DE DATOS MULTIVARIANTES
lo que daría solo la representación de la línea ajustada con un “span” de 0.5,
por defecto. Si se marca
aparece la ventana
donde se pueden cambiar los parámetros. Si además se requiere la aparición de
los puntos, se necesitan dos gráficos
con sus respectivos
DEPENDENCIA ENTRE PARES DE VARIABLES CUANTITATIVAS
131
y
junto con la condición de “gráficos múltiple superpuestos” en Frame
lo que finalmente nos daría la siguiente figura
132
DESCRIPCIÓN DE DATOS MULTIVARIANTES
6.4. Dependencia entre pares de variables cualitativas
Las variables cualitativas bidimensionales se representan mediante “Tablas
de Contingencia” que recogen el número de observaciones con los diferentes
pares de atributos cruzados. Así para las variables (Z1 , Z2 ) cuyos atributos son
respectivamente, A1 , . . . , Ar y B1 , . . . , Bc se tendrá la siguiente tabla
Z2
Z1 \
B1
n11
..
.
···
···
..
.
Bc
n1c
..
.
Ar
nr1
n•1
···
···
nrc
n•c
A1
..
.
n1•
..
.
nr•
n
donde nij es el número de observaciones con las características Ai y Bj .
Por ejemplo de la base datos en
“http://www.mat.ucm.es/~palomam/aed/datos/simpson.dat”
se puede obtener
género
trabajo \
administración
técnico
hombre mujer
276
229 .
461
34
DEPENDENCIA ENTRE PARES DE VARIABLES CUALITATIVAS
133
6.4.1. Contraste de dependencia
Se puede utilizar el contraste de la χ2 para evaluar si existe dependencia
entre dos variables cualitativas mediante el estadístico
V =
c ¡
r X
X
nij −
i=1 j=1
ni• n•j ¢2
n
ni• n•j
n
cuya distribución, bajo la hipótesis de independencia, es una χ2(r−1)(c−1) . Por
lo tanto se rechazará la hipótesis de independencia a nivel α si el valor del
estadístico es V > χ2(r−1)(c−1);α .
En el ejemplo anterior se obtiene
V=188.9591, grados de libertad = 1, p-valor < 2.2e-16,
por lo que se rechaza la hipótesis nula, H0 , de independencia.
6.4.2. Paradoja de Simpson
Surge en algunas ocasiones, al introducir una nueva variable que permite
comparar las anteriores variables en las diferentes subpoblaciones que determinan las categorías de la variable introducida.
Ejemplo
Se tiene un grupo de enfermos al que se aplican dos tratamientos I y II .
A continuación se observa si sobreviven S o no M obteniéndose la siguiente
tabla
T ratamiento
I
II
Supervivencia \
S
108 153 261
M
123 120 243
231 273 504
De donde se obtiene que “parece mejor el tratamiento II” porque la proporción condicionada de supervivencia S dado el tratamiento I , p̂S|I =
108
= 0.47 es menor que la de supervivencia S dado el tratamiento II ,
231
p̂S|II = 153
= 0.56.
231
Pero resulta que si se obtiene información acerca del “género” del enfermo
134
DESCRIPCIÓN DE DATOS MULTIVARIANTES
se obtienen las siguientes tablas
MUJERES
T ratamiento
Supervivencia \
S
M
I
57
100
157
II
32
57
89
89
157
246
HOMBRES
T ratamiento
I
Supervivencia \
II
51 121 172
23 63 86
74 184 258
S
M
De forma que las proporciones condicionadas en cada subpoblación nos
recomiendan el I en las dos subpoblaciones porque
MUJERES :
HOMBRES :
57
32
= 0.363 mayor que p̂S|II =
= 0.36.
157
89
51
121
= 0.689 mayor que p̂S|II =
= 0.657.
=
74
184
p̂S|I =
p̂S|I
Este es un ejemplo de la “Paradoja de Simpson”, cuya causa habrá que
explicar en cada caso, pero que en general nos previene frente a la tendencia
de agrupar subpoblaciones, con sus características particulares en una única
poblacion.
En el ejemplo se puede observar que los HOMBRES sobreviven más
que las MUJERES con los dos tratamientos y este efecto, al incluir más
HOMBRES en el II, se traslada a la población total.
DEPENDENCIA ENTRE PARES DE VARIABLES CUALITATIVAS
135
136
DESCRIPCIÓN DE DATOS MULTIVARIANTES
7. ESTUDIO DE LA HIPÓTESIS DE
NORMALIDAD
En muchos procedimientos de inferencia se necesita considerar observaciones de una población Normal para garantizar la eficiencia de los mismos.
Así, por ejemplo, en el modelo de regresión lineal se ha supuesto que los errores son Normales. En este apartado se tratarán diversas técnicas que permiten
validar dicho supuesto.
7.1. Normalidad univariante
Sean (x1 , . . . , xn ) observaciones, supuestamente, de una N (μ, σ). Para comprobarlo se pueden utilizar procedimientos gráficos o contrastes de hipótesis.
7.1.1. Gráficos de probabilidad (QQ-plots)
En general son representaciones que enfrentan a los cuantiles teóricos y
observados para evaluar patrones anómalos de comportamiento. Para construir
el correspondiente gráfico de probabilidad o gráfico cuantil-cuantil, se deben
seguir los siguientes pasos:
1.- Ordenar las oservaciones x1:n ≤, . . . ≤ xj:n ≤ . . . ≤ xn:n
obteniendo así los cuantiles observados.
2.- Calcular
1− 12
j− 1
n− 1
, . . . , n2 , . . . , n 2 .
n
3.- Calcular los cuantiles teóricos –de una N (0, 1)–, q1:n , . . .,
j− 1
qj:n ,. . . , qn:n tales que Φ (qj:n ) = n 2 , donde Φ (x) es la función de
distribución de la N (0, 1).
4.- Representar (qj:n , xj:n ), j = 1, . . . , n examinando la obligada “rectitud” de las observaciones si la hipótesis de normalidad es
cierta.
Nota: Si (x1 , . . . , xn ) son observaciones de una N
¡ (μ,¢σ) en general, con
∗
función de distribución F (x), se tiene que F (x) = Φ x−μ
, por lo que si qj:n
σ
´
³
∗
∗
1
¡ ∗ ¢ j− 2
¡ ∗ ¢
q −μ
q −μ
, resulta que j:nσ = qj:n
es tal que F qj:n
= n y como F qj:n
= Φ j:nσ
de donde (qj:n , xj:n ) deben de estar sobre la recta y = σx + μ.
ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
137
Patrones de no normalidad
Este método tiene la venataja de que además de detectar no normalidad, dá
una idea de como es la distribución No Normal correspondiente a las observaciones. Si simulamos observaciones de una uniforme U (−1, 1), una t−Student,
una Gamma γ (p = 1,5, a = 1) y una Beta B (p = 9, q = 2)
munif<-runif(500,-1,1)
mt<-rt(500,2)
mgamma<-rgamma(500,1.5,rate=1)
mbeta<-rbeta(500,9,2)
con funciones de densidad
Gráficos de Probabilidad con
R
qqnorm(munif,main="colas menos pesadas")
qqnorm(mt,main="colas mas pesadas")
qqnorm(mgamma,main="asimetria positiva")
qqnorm(mbeta,main="asimetria negativa")
138
ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
Gráficos de Probabilidad con MINITAB
Hay dos posibilidades:
a) Graph→Probability Plot y se abrirá un ventana de diálogo que permite seleccionar entre varias distribuciones, no solo la Normal.
NORMALIDAD UNIVARIANTE
139
obteniéndose el gráfico
junto con información sobre la bondad del ajuste a la distribución seleccionada.
b) La persiana Stat
que proporciona el siguiente gráfico
140
ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
7.1.2. Contrastes de bondad de ajuste
Los contrastes más utilizados para evaluar el ajuste a una Normal N (μ, σ)
son los siguientes:
Contraste de la χ2
Sean {A1 , . . . , Ak } tales que ∪Ai = R y Ai ∩ Aj = ∅ para i 6= j, donde
Ai = (ei−1 , ei ].
Se determinan:
ni , el número de observaciones de entre (x1 , . . . , xn ) que están
en Ai , i = 1, . . . , k, son las frecuencias observadas,
¡
¢
¡
¢
p0i = PN(0,1) {Ai } = Φ eiσ−μ − Φ ei−1σ−μ , donde Φ (x) es la
función de distribución de la N (0, 1) ,
n0i = np0i , son las frecuencias teóricas.
Estadístico
V =
k
2
X
(ni − n0 )
i
i=1
n0i
Región crítica: Rechazar la hipótesis de normalidad a nivel α si V >
χ2k−1;α .
NORMALIDAD UNIVARIANTE
141
Contraste de Kolmogorov-Smirnov
Se determina la Función de Distribución Empírica, Fn∗ (x) definida a
partir de las observaciones ordenadas x1:n ≤ . . . ≤ xn:n mediante
⎧
0
x < x1:n
⎪
⎪
⎨
x
≤
x < xj+1:n
j:n
j
Fn∗ (x)
n
j = 1, . . . , n − 1
⎪
⎪
⎩
1
x ≥ xn:n
Estadístico
Dn
Dn+
Dn−
¯
µ
¶¯
¯ ∗
¯
©
ª
x
−
μ
¯ = máx Dn+ , Dn−
= sup ¯¯Fn (x) − Φ
¯
σ
x
∙
¶¸
µ
x−μ
∗
= sup Fn (x) − Φ
σ
x
∙ µ
¶
¸
x−μ
∗
− Fn (x)
= sup Φ
σ
x
Región crítica: Rechazar la hipótesis de normalidad a nivel α si Dn >
Dn;α .
Ejercicio con
R
Simulando 100 observaciones de una N (0, 1), se les aplican los contrastes
anteriores.
Contraste de la χ2
mnorm1<-rnorm(100)
hist(mnorm1)
cortes<-c(-Inf,seq(-1.2,1.2,by=0.3),Inf)
#creamos un factor asociando cada observacion a un intervalo
mnorm1.cut<-cut(mnorm1,breaks=cortes)
tmnorm1<-table(mnorm1.cut)
#frecuencias esperadas
length(tmnorm1)
frespe=NULL
for(i in 1:length(tmnorm1)) frespe[i]<-100*(pnorm(cortes[i+1])
-pnorm(cortes[i]))
sum(frespe)
#frecuencias observadas
frobs=vector()
for(i in 1:10) frobs[i]<-tmnorm1[i]
sum(frobs)
#construccion del estadistico
estmnorm1<- sum(((frobs-frespe)^2)/frespe)
142
ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
gdl<-length(frespe)-1
pval<-1-pchisq(estmnorm1,gdl)
#utilizacion de chisq.test
#construccion del vector de probabilidades teoricas
prob=vector()
for(i in 1:10) prob[i]<-(pnorm(cortes[i+1])-pnorm(cortes[i]))
chisq.test(x=frobs,p=prob)
que produce la siguiente salida
> pval
[1] 0.9640306
> chisq.test(x=frobs,p=prob)
Chi-squared test for given probabilities
data: frobs
X-squared = 3.0067, df = 9, p-value = 0.964
Contraste de Kolmogorov-Smirnov
#construccion del estadistico
empi<-seq((1/length(mnorm1)),1,by=(1/length(mnorm1)))
smnorm1<-sort(mnorm1)
F0<-pnorm(smnorm1)
dif.plus<-max(empi-F0)
dif.menos<-max(F0-empi)
dif<-max(dif.plus,dif.menos)
#utilizacion de ks.test
ks.test(mnorm1,"pnorm")
que produce la siguiente salida
> dif
[1] 0.06579159
> ks.test(mnorm1,"pnorm")
One-sample Kolmogorov-Smirnov test
data: mnorm1
D = 0.0658, p-value = 0.7797
alternative hypothesis: two-sided
NORMALIDAD UNIVARIANTE
143
7.2. Normalidad Bivariante
Se utilizará el siguiente resultado teórico relativo a la distribución de una
variable aleatoria X con distribución Normal p−variante Np (μ, Σ) donde Σ
es definida positiva.
(X − μ)0 Σ−1 (X − μ) es una variable aleatoria χ2p .
7.2.1. Procedimientos
a) Como se tiene que
©
ª
P (X − μ)0 Σ−1 (X − μ) ≤ χ2p;α = 1 − α
se puede considerar que,
y para p = 2, el 100(1 − α) % de
¶
µ aproximadamente
xi1
las observaciones xi =
“deben quedar dentro” de la elipse
xi2
(x − x̄)0 S−1 (x − x̄) = χ22;α .
Es un procedimiento bastante inestable pero que puede ser útil en un primer
paso, para detectar grandes desviaciones de la normalidad.
Ejemplo
¶¶
¶ µ
3 2
4
, por lo que
,
Se simulan 100 observaciones de una N2
2 2
6
se deben satisfacer las condiciones para α = 0.5 y α = 0.1. Efectivamente,
mediante las siguientes funciones de R.
µµ
library(MASS)
library(car)
mu<-c(4,6)
sigma<-matrix(c(3,2,2,2),ncol=2)
mnbiv<-mvrnorm(100,mu,sigma)
plot(mnbiv)
samplemean<-apply(mnbiv,2,mean)
cov(mnbiv)
dato<-vector(length=100)
for (i in 1:100)
{
dato[i]<t(mnbiv[i,]-samplemean)%*%solve(cov(mnbiv))%*%(mnbiv[i,]
-samplemean)
144
ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
}
hist(dato,freq=F,ylim=c(0,0.5))
curve(dchisq(x,2),add=T)
data.ellipse(mnbiv[,1],mnbiv[,2])
comp1<-dato>qchisq(0.5,df=2,lower.tail=FALSE)
length(dato[comp1=="TRUE"])
comp2<-dato>qchisq(0.10,df=2,lower.tail=FALSE)
length(dato[comp2=="TRUE"]
Una forma de visualizar los resultados sobreponiendo, a los puntos que
representan las observaciones, las elipses correspodientes a α = 0.5 y α = 0.1.
permite comprobar la salida que , efectivamente, no rechaza la normalidad
> length(dato[comp1=="TRUE"])
[1] 52
> comp2<-dato>qchisq(0.10,df=2,lower.tail=FALSE)
> length(dato[comp2=="TRUE"])
NORMALIDAD BIVARIANTE
145
[1] 12
y
⎛
⎞
x01
⎜
⎟
b) Si las observaciones X = ⎝ ... ⎠ corresponden a una Normal N2 (μ, Σ)
x0n
y se determinan las siguientes distancias de Mahalanobis de cada observación
xj a la media x̄,
d2j = (xj − x̄)0 S −1 (xj − x̄) ; j = 1, . . . , n
los valores d21 , . . . , d2n deben ser observaciones de una χ22 (suponiendo que n y
n − p son mayores que 30). Por tanto se construirá un Gráfico de Probabilidad
de ajuste a una χ22 .
1.- Ordenar las oservaciones d1:n ≤, . . . ≤ dj:n ≤ . . . ≤ dn:n
obteniendo así los cuantiles observados.
2.- Calcular
1− 12
j− 12
n− 12
,
.
.
.
,
,
.
.
.
,
.
n
n
n
3.- Calcular los cuantiles teóricos de una χ22 , q1:n , . . .,qj:n ,. . . , qn:n
tales que Fχ22 (qj:n ) =
ción de la χ22 .
j− 12
,
n
donde Fχ22 (x) es la función de distribu-
4.- Representar (qj:n , dj:n ), j = 1, . . . , n examinando la obligada
“rectitud” de las observaciones si la hipótesis es cierta.
146
ESTUDIO DE LA HIPÓTESIS DE NORMALIDAD
8. TRANSFORMACIÓN DE VARIABLES
8.1. Transformaciones lineales
8.1.1. Datos univariantes
Sean (x1 , . . . , xn ), si se define yi = axi + b, i = 1, . . . , n se obtiene:
ȳ = ax̄ + b
s2y = a2 s2x
MeY = aMeX + b (mediana)
MoY = aMoX + b (moda)
yi:n = axi:n + b, , i = 1, . . . , n
rangoY = a rangoX
g1Y = g1X (coeficiente de asimetría)
kY = kx (coeficiente de curtosis)
8.1.2. Datos bivariantes
Sean {(x1 , y1 ) , . . . , (xn , yn )}, si se definen {(v1 , w1 ) , . . . , (vn , wn )} de forma
que
vi = axi + b
wi = cyi + d
se obtiene:
svw = acsxy (covarianza muestral)
rvw = rxy (coeficiente de correlación lineal)
β W |V = ac β Y |X (coeficiente de regresión)
TRANSFORMACIÓN DE VARIABLES
147
8.2. Tranformaciones hacia la normalidad
8.2.1. Logit
Si 0 < xi < 1,
logit (xi ) = log
de forma que -∞ < logit (xi ) < ∞.
xi
1 − xi
8.2.2. Probit
Si 0 < xi < 1 y se corresponden con probabilidades de una Normal,
probit (xi ) = Φ−1 (xi )
siendo Φ (x) la función de distribución de una N (0, 1).
8.2.3. Box-Cox
Son las más utilizadas y se definen,
( λ
(λ)
xi
xi −1
λ
ln xi
si λ 6= 0
si λ = 0
estimando el valor de λ, por el método de la máxima verosimilitud.
Ejemplo con R
#Datos “cars” cuya variable “dist” no se ajusta a una normal
library(car)
attach(cars)
par(mfrow=c(2,2))
hist(dist)
qqnorm(dist)
ks.test(dist,"pnorm")
#Se determina el valor de λ y se transforman los datos
box.cox.powers(dist)
dist.t<-box.cox(dist,0.495)
hist(dist.t)
qqnorm(dist.t)
148
TRANSFORMACIÓN DE VARIABLES
Los gráficos resultantes representan la capacidad del proceso de transformación
Ejemplo con MINITAB
En los datos “Bears.MTW”, la variable “Weight” no presenta un patron de
normalidad
TRANFORMACIONES HACIA LA NORMALIDAD
149
si se abre la persiana Stat
se abre una ventana diálogo que nos permite imponer o calcular el valor de λ
150
TRANSFORMACIÓN DE VARIABLES
de forma que obteniendo el QQ-plot para los datos transformados se obiene
que junto con su histograma
TRANFORMACIONES HACIA LA NORMALIDAD
151
refleja los efectos de la transformación.
152
TRANSFORMACIÓN DE VARIABLES
9. DATOS ATÍPICOS Y AUSENTES
Son observaciones que, de algún modo afectan a las conclusiones estadísticas que se pueden extraer de una base de datos. Las definiciones pueden
considerarse:
Datos atípicos (outliers): Observaciones separadas del bloque
general de los valores correspondientes en la base de datos.
Datos ausentes (missing): Son los huecos de la base de datos,
es decir aquéllas observaciones que, por alguna razón, no se han
anotado.
9.1. Tratamiento de datos atípicos
Los datos atípicos pueden ser extremos
DATOS ATÍPICOS Y AUSENTES
153
o por el contrario
154
DATOS ATÍPICOS Y AUSENTES
pero sí pueden causar problemas en la determinación de las conclusiones finales.
Las causas pueden ser desde errores fortuitos hasta la existencia de otros
modelos subyacentes mucho más interesantes, en algunas ocasiones, que el resto
del estudio. En todo caso es recomendable el análsis de los mismos en lugar de
la eliminación directa, como ha sido la forma de tratarlos en el pasado.
Los procedimientos son muchos y a veces muy específicos del problema a
tratar, pero pueden englobarse en dos grandes bloques: Métodos de detección
y Procedimientos de acomodación.
9.1.1. Métodos de detección
Gráficos: Diagramas de cajas, gráficos de puntos o nubes de puntos.
Contrastes de discordancia: Basados en estadísticos que utilizan las diferencias entre las observaciones ordenadas, tipo los de Dixon
xs:n − xr:n
xq:n − xp:n
TRATAMIENTO DE DATOS ATíPICOS
155
o los de Grubbs
Sn−2
x
Pn−2
2
i=1 (xi:n − x̄n,n−1 )
Pn
2
i=1 (xi − x̄)
i:n
donde x̄n,n−1 = i=1
. En muchos de estos contrastes puede darse el “efecto
n−2
de enmascaramiento” que puede ocultar la presencia de un dato extremo, por
el efecto de una observación cercana y también extrema.
9.1.2. Procedimientos de acomodación
Se aplican cuando se considera que los datos atípicos deben incorporarse
en la obtención de las conclusiones finales, pero estando preparados para minimizar sus efectos adversos. Por tanto aplicando métodos que se denominan
robustos frente a observaciones anómalas.
Así, por ejemplo, para la estimación de la localización en observaciones
unvariantes, se utilizarán:
L-estimadores: Combinacnes lineales ponderadas de las observaciones ordenadas.
M-estimadores: Generalización del método de la Máxima Verosimilitud.
R-estimadores: Basados en los rangos de las observaciones.
En los problemas de regresión lineal se suele recurrir a la determinación
de la Recta Resistente (Resistant Line), que mediante un proceso iterativo
construye una recta de regresión, reduciendo el efecto de los posibles datos
atípicos.
Ejemplo con
R
library(LearnEDA)
help(rline)
peru<read.table("http://www.mat.ucm.es/~palomam/aed/datos/pulse.txt"
,header=T)
attach(peru)
fit=rline(Pulse1,Pulse2)
plot(Pulse1,Pulse2)
curve(fit$a+fit$b*(x-fit$xC),add=TRUE)
abline(lm(Pulse2~Pulse1),col="red")#recta de minimos cuadrados
156
DATOS ATÍPICOS Y AUSENTES
Ejemplo con MINITAB
Abriendo la persiana Stat
TRATAMIENTO DE DATOS ATíPICOS
157
y se lo aplicamos a las variables Pulse1 y Pulse2 de los datos Peru.MTW de
MINITAB.
9.2. Tratamiento de datos ausentes
Este tipo de observaciones aparecen con distintos tipos de símbolos:
MINITAB se representan por defecto como *, pero puede cambiarse si se abre Editor → Clipboard Settings
En
R es NA (Not Available).
Los mecanismos que han producido dichas observaciones suelen denominarse:
MCAR (Missing Completely at Random) debidos totalmente al
azar.
MAR (Missing at Random) según los tipos de datos.
MNAR (Missing not at Random) no debido a azar.
En la mayoría de los procedimientos se suele poder seleccionar el tratamiento que se les quiere dar.que va desde el rechazo hasta la imputación de valores
que podrían haber sido los observados en esos huecos De todas formas en un
158
DATOS ATÍPICOS Y AUSENTES
análisis inicial de los datos habrá que estudiarlos y en su caso omitirlos o sustituirlos por valores “posibles”.
Dentro de R se pueden utilizar, para empezar, las siguientes funciones:
NA y missing en el paquete base para detectarlos y manipularlos.
knn en el paquete EMV que estima la mejor forma de rellenar
los huecos en una matriz.
Ejercicio 1
row.names(airquality[is.na(airquality[,1]),])
is.na(airquality[,1])
z1<-na.omit(airquality[,1])
na.action(z1)
z2<-na.pass(airquality[,1])
cuya salida es
> row.names(airquality[is.na(airquality[,1]),])
[1] "5"
"10" "25" "26" "27" "32" "33" "34" "35" "36"
"37" "39"
[13] "42" "43" "45" "46" "52" "53" "54" "55" "56" "57"
"58" "59"
[25] "60" "61" "65" "72" "75" "83" "84" "102" "103" "107"
"115" "119"
[37] "150"
> is.na(airquality[,1])
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
FALSE TRUE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE
[25] TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
TRUE TRUE TRUE TRUE
[37] TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE
TRUE TRUE FALSE FALSE
[49] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE
[61] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
FALSE FALSE FALSE TRUE
[73] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE TRUE
[85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE
TRATAMIENTO DE DATOS AUSENTES
159
[97] FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
FALSE FALSE TRUE FALSE
[109] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
FALSE FALSE TRUE FALSE
[121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE
[133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE
[145] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
FALSE
> z1<-na.omit(airquality[,1])
> na.action(z1)
[1] 5 10 25 26 27 32 33 34 35 36 37 39 42 43 45 46 52 53 54
[20] 55 56 57 58 59 60 61 65 72 75 83 84 102 103 107 115 119 150
attr(,"class")
[1] "omit"
> z2<-na.pass(airquality[,1])
>
> z2
[1] 41 36 12 18 NA 28 23 19 8 NA 7 16 11 14 18 14 34 6
[19] 30 11 1 11 4 32 NA NA NA 23 45 115 37 NA NA NA NA NA
[37] NA 29 NA 71 39 NA NA 23 NA NA 21 37 20 12 13 NA NA NA
[55] NA NA NA NA NA NA NA 135 49 32 NA 64 40 77 97 97 85 NA
[73] 10 27 NA 7 48 35 61 79 63 16 NA NA 80 108 20 52 82 50
[91] 64 59 39 9 16 78 35 66 122 89 110 NA NA 44 28 65 NA 22
[109] 59 23 31 44 21 9 NA 45 168 73 NA 76 118 84 85 96 78 73
[127] 91 47 32 20 23 21 24 44 21 28 9 13 46 18 13 24 16 13
[145] 23 36 7 14 30 NA 14 18 20
Ejercicio 2
library(EMV)
mairquality<-as.matrix(airquality)
knn(mairquality)
datcomp<-knn(mairquality)$data
datcomp.df<-data.frame(datcomp)
names(datcomp.df)<-names(airquality)
pairs(airquality[,-5],main=‘‘airquality’’)
pairs(datcomp.df[,-5],main=‘‘datcomp.df’’)
El efecto del “rellenado” se puede observar en los siguientes gráficos
160
DATOS ATÍPICOS Y AUSENTES
airquality
250
60
80
150
0 100
250
0
50
Ozone
20
0 100
Solar.R
80
5 10
Wind
10
0
Day
20
30
60
Temp
0
50 100
5 10 15 20
0
10 20 30
datcomp.df
250
60
80
150
0 100
250
0
50
Ozone
20
0 100
Solar.R
80
5 10
Wind
10
0
Day
20
30
60
Temp
0
50 100
5 10 15 20
TRATAMIENTO DE DATOS AUSENTES
0
10 20 30
161
162
DATOS ATÍPICOS Y AUSENTES
Descargar