Anda di halaman 1dari 99

Universidad Nacional Autnoma de Mxico Facultad de Estudios Superiores Acatln Licenciatura de Actuara Tesina

Lenguaje R: Un complemento libre para las asignaturas de estadstica.


Por: Fabiola Lpez Gonzlez

Asesor: Act. Mahil Herrera Maldonado

ndice
Introduccin 4

1. El software libre

1.1. Clasificacin de software en funcin del tipo de licencia 6 1.2. Qu es un software GNU? 8 1.3. Por qu utilizar software libre en el aula? 8

2. Lenguaje R
2.1. Qu es el lenguaje R?
2.1.1. Qu es Lenguaje R? 2.1.2. Lenguajes R y S, su relacin

2.2. Cmo lo instalo en mi mquina?


2.2.1. Qu necesito para instalar R en mi equipo? 2.2.2. Cmo lo instalo?

2.3. Comencemos a trabajar en R


2.3.1. La ventana de R 2.3.2. Preliminares 2.3.3. Los objetos en R 2.3.4. Introduciendo datos en R 2.3.5. Operaciones bsicas y sintaxis elemental en R 2.3.6. Manejo de grficos en R

3. Estadstica Descriptiva y Anlisis Grfico de datos Multivariados


3.1. Estadstica descriptiva
3.1.1. Medidas descriptivas 3.1.2. Grficas descriptivas 3.1.3. Matrices de correlacin 3.1.4. Diagrama de dispersin y matriz de dispersin 3.1.5. Tablas de frecuencia 3.1.6. Grficos

3.2. Anlisis Grfico


3.2.1. Caras de Chernoff 3.2.2. Diagrama de Estrellas 3.2.3. Curvas de Andrews

4. Regresin Lineal

4.1. 4.2. 4.3.

Anlisis preliminar de los datos Corriendo regresiones en R Anlisis de los resultados

5. Anlisis de Conglomerados
5.1. Disimilaridad y Similaridad 5.2. Anlisis Jerrquico de Conglomerados 5.3. Mtodo Aglomerativo 5.4. Mtodo Divisivo

Conclusin

Introduccin

No existe una mejor prueba del progreso de una civilizacin que la del progreso de la cooperacin John Stuart Mill

El uso de software en el aula ha cobrado gran importancia en los ltimos aos a medida del avance de la tecnologa. Cada vez es ms difcil separar el desempeo profesional del manejo del software especfico. Muchas tareas que antes era imposible realizar; hoy, con la ayuda de la tecnologa se pueden terminar en pocos minutos mediante el uso de programas realizados con este objetivo. En el caso de la estadstica, el uso de programas especficos es de vital importancia, ya que muchas operaciones y procesos no podran realizarse, pues debido a la naturaleza de esta disciplina se necesita manejar grandes cantidades de datos o realizar numerosas iteraciones en los que es mas que necesario utilizar la ayuda de un ordenador. Por ser la estadstica una disciplina utilizada en casi todas las ciencias como herramienta de apoyo para encontrar evidencia cientfica en gran cantidad de fenmenos que van desde los ms simples fenmenos naturales hasta los ms complejos sistemas sociales, es necesario difundir entre los profesionales de muchas reas el uso de software especfico para esta disciplina. Derivado de esto, se plantea la necesidad de acercar al uso de software estadstico a personas con muy diversa formacin acadmica, por esto es importante que al difundir un paquete estadstico se haga de manera sencilla y prctica. Existen diversos paquetes de software estadstico disponibles en el mercado pero su licencia es costosa, aunque existen versiones de prueba, estas no integran todas las funciones que el paquete con licencia tiene disponibles.

Por lo tanto, si una persona requiere utilizar algn paquete estadstico con licencia debe pagar por l, la licencia se vende muchas veces por tiempo limitado, por lo cual el usuario de este tipo de software debe pagar peridicamente por su uso. En otros casos, aunque la licencia sea de temporalidad ilimitada, al salir al mercado nuevas versiones del paquete se debe adquirir la actualizacin para poder utilizar las nuevas funciones que se integren a este. R language1 es un software libre, al que cualquier persona con acceso a una computadora con Internet puede acceder. No tiene ningn costo, posee prcticamente las mismas funciones que tienen los paquetes estadsticos ms poderosos y populares del mercado2. Adems de que el software libre puede ser modificado desde su cdigo base sin ninguna restriccin. En fin, en este trabajo se propone el uso de software libre en el aula derivado de lo expuesto anteriormente con la finalidad de contar con alternativas que permitan la prctica de la estadstica a partir del anlisis de datos y la generacin de modelos por computadora. En el primer captulo de esta tesina, se abarca el tema del software libre, el Contrato GNU y se habla un poco acerca del lenguaje R as como de S, el lenguaje de donde surge; se muestran sus caractersticas bsicas as como las diferencias fundamentales entre los dos lenguajes. El segundo captulo muestra la sintaxis fundamental y las funciones bsicas con las que se construirn las rutinas en R. Cabe aclarar que en este trabajo no se utilizarn todas pues slo se revisarn a detalle las funciones estadsticas bsicas. Sin embargo, en este captulo se consideraron elementos que aporten la base para construir cualquier programa en este lenguaje. En el tercer captulo se revisan las funciones bsicas de estadstica descriptiva y se muestran las aplicaciones de los cdigos, los grficos bsicos de anlisis descriptivo y exploratorio de datos. En el cuarto captulo se desarrolla el tema del Anlisis de Regresin Lineal en R, se revisan los mtodos de regresin lineal simple y mltiple, analizando los resultados y se generan los intervalos de confianza. Por ltimo, en el quinto captulo se revisan los mtodos de anlisis de conglomerados. En este trabajo slo se tratarn los mtodos jerrquicos. Como podemos ver, las aplicaciones que maneja este trabajo estn hechas a manera de ejemplos ilustrativos y no como parte de un curso de estadstica. As que el estudiante deber ya contar con las bases para hacer uso de las aplicaciones que aqu se plantean.

1 2

Ross Ihaka SAS, S-PLUS, SPSS

1. El Software libre

El software libre es un tipo de libertad: la gente debe ser libre de utilizar software de todas las formas en que este sea socialmente til. 3

1.1. Clasificacin de software por su contrato de licencia


La licencia de un software representa un documento legal que ampara los derechos de autor de un programa para computadora. En ella se establecen ciertas limitaciones para los usuarios del programa del que se trate, bsicamente estas limitaciones tienen relacin directa con la reproduccin, distribucin, acceso y modificacin del cdigo fuente. En este sentido, se puede clasificar al software por el tipo de contrato de licencia que tiene. Un software no libre es aquel que posee algn tipo de licencia o contrato que protege los derechos de autor mediante el cul se impide o restringe en alguna forma la reproduccin, el acceso y/o la modificacin de su cdigo fuente. Este tipo de software incluye al considerado como software semi-libre as como al software con propietario. Un sistema semi-libre es aqul que puede ser copiado, implementado e incluso modificado pero slo que esto se realice sin fines de lucro. Mientras que el software con propietario agrupa a aquellos cuya reproduccin, modificacin y uso estn prohibidos o requieren de licencia. Asimismo; existen el Freeware, cuya distribucin es libre pero su modificacin est prohibida y el Shareware, el cual slo puede utilizarse temporalmente segn defina el propietario y al trmino del plazo dado exige que se pague para obtener la licencia. En el caso del software con propietario, podemos mencionar una subclasificacin: el software privado, que es el que desarrolla el usuario para su beneficio personal y su utilizacin es privada, como los sistemas que desarrollan las empresas con fines operativos internos; por otra parte, existe el software comercial que est hecho con fin de lucro.

http://www.gnu.org/philosophy/

Al obtener un software libre se adquieren tambin libertades muy especficas que se enunciarn a continuacin: Segn la Organizacin GNU, software libre es aqul que otorga las siguientes libertades4: Ser implementado para cualquier propsito (libertad 0), Estudiar cmo este trabaja y adaptarlo a las necesidades de quien lo usa (libertad 1), Distribuir copias para ayudar a quien lo necesite (libertad 2), Realizar mejoras al programa, compartirlas y de este modo ayudar a la comunidad (libertad 3).

Un programa es software libre si todos los usuarios tienen acceso a estas libertades.

1.2. Qu es un software GNU?


Un sistema GNU es un software completamente libre, compatible tambin con UNIX, las siglas GNU representan el acrnimo iterativo GNUs not UNIX. El proyecto GNU se crea en 1983 con el propsito de traer de vuelta el espritu de cooperacin que prevaleca entre los miembros de la comunidad de usuarios de equipo de cmputo. Para esto GNU utiliza el copyleft que, contrario al copyright, consiste en garantizar las 4 libertades fundamentales del software libre para todos en forma legal. El copyleft genera una nueva clasificacin del software libre, ya que existe software libre con copyleft y software libre sin copyleft. El software libre sin copyleft viene de autor con permiso para redistribuirlo y copiarlo pero no para modificarlo, mientras que el que tiene copyleft puede ser adems modificado. Esto es lo que distingue al software GNU. Para lograr todo esto, existe la Free Software Foundation la cual es el principal respaldo organizacional del Proyecto GNU. Esta institucin fue fundada en el ao 1985 y es solventada principalmente por individuos quienes pueden apoyar como asociados, mediante la compra de manuales o donando dinero, pero sobre todo colaborando en el desarrollo de nuevas implementaciones de software libre. La FSF apoya la misin del Proyecto GNU de garantizar las libertades y defender los derechos de los usuarios de Software Libre. Adems de los derechos de los que ya se ha platicado, la FSF promueve: la libertad de expresin, prensa y asociacin en Internet; el derecho de encriptar para la comunicacin privada y, para finalizar, el derecho de escribir software, inviolable por los grandes monopolios.

Contrato GNU

1.3. Por qu usar software libre en el aula?


La importancia de utilizar free software radica principalmente en la flexibilidad que otorgan las libertades que garantiza el Contrato GNU. La posibilidad de poder distribuir y reproducir el software brindan tanto al profesor y al estudiante como a la institucin ventajas de tipo econmico y legal. Permiten que los alumnos puedan hacer uso de los programas sin ninguna restriccin y por el tiempo que ellos necesiten. Adems de proporcionarles una herramienta de trabajo que podrn utilizar a lo largo de su carrera ya que al no ser necesario que la empresa donde laboran haya comprado la licencia del software ellos podrn desarrollar proyectos donde utilicen los paquetes libres sin necesidad de aprender un software especfico. Debido a que es libre el cdigo fuente del software este ser modificado si existe algn error, claro, siempre y cuando se haga un registro de los cambios o se diference la versin. Esto brinda muchas ventajas ya que el proceso de evolucin del software no depende nicamente de los desarrolladores del mismo quienes tardarn en revisar los errores que existan; al existir esta libertad, el usuario podr ser capaz de modificar el software y esto llevar a la mejora de los procesos y la ejecucin de las tareas que realice. Adems de que se propicia la abierta comunicacin entre el desarrollador y el usuario lo que permite realizar actualizaciones oportunas al programa, incluso en funciones muy especficas. La principal disyuntiva entre usar el software libre o no, radica principalmente en los servicios que ofrecen las empresas que desarrollan software con licencia. Ellas abogan por el soporte tcnico que brindan, as como la documentacin de la ayuda. No podemos negar que el software libre no ofrece esa ventaja, sin embargo, en la mayora de las ocasiones en Internet existen foros donde usuarios de todo el mundo del paquete externan dudas y otros les contestan, escriben manuales o presentan sus ejemplos. La pgina oficial registra y muestra las contribuciones y esto hace que realmente la desventaja de la ausencia del soporte tcnico como tal se vea cubierta por la vinculacin de los usuarios en la red. Es as el uso del software un contrato de buena voluntad que promueve la unin de los usuarios en todo el mundo colaborando, al fin y al cabo para el mejoramiento continuo de la sociedad; cooperando, sin importar nacionalidad o ideologa, a la solucin de problemas cientficos, sociales, econmicos, unidos por la red y por el uso del free software y sin barreras econmicas ni legales. Qu mejor que se comience a vincular desde un entorno de cooperacin, libertad e igualdad al estudiante con el mundo real.

Referencias utilizadas en este captulo


1) 2) http://www.gnu.org/ http://www.fsf.org/ Pgina de la organizacin GNU Pgina de la Free Software Foundation

2. Lenguaje R

El lenguaje R

2.1. Qu es lenguaje R?
El lenguaje R es un software de anlisis estadstico y grfico creado por Robert Gentleman y Ross Ihaka. Es, a la vez un programa y un lenguaje de programacin. R se distribuye bajo los trminos de la GNU (General Public License). Su desarrollo y distribucin es llevada a cabo por el Grupo Nuclear de Desarrollo de R. R fue compilado principalmente en C, con algunos algoritmos en Fortran; est disponible en varias formas, esencialmente para UNIX y LINUX y como archivos binarios precompilados para Windows, Macintosh y Alpha Unix. Por otro lado R tiene una gran variedad de funciones para el anlisis estadstico y grfico. Adems, es muy flexible ya que R guarda los resultados de los anlisis como objeto, permitiendo as no slo que se puedan mostrar los resultados a criterio del analista, sino que permite tambin el utilizar los resultados de los anlisis en posteriores aplicaciones. Estas son algunas, entre otras muchas ventajas que R ofrece, puede parecer al principio difcil utilizar este software ya que no posee ambiente grfico, pero al mismo tiempo es un paquete preciso, flexible y poderoso.

2.2. Antecedentes.
El lenguaje R es considerado como la versin libre del lenguaje S. El lenguaje S fue desarrollado por John Chambers, Allan Wilks y Rick Becker para Bell Laboratories entre 1975-1976, por aquellos das, el cmputo estadstico se realizaba llamando directamente

10

subrutinas hechas en Fortran; S fue desarrollado como una alternativa que ofreca un acercamiento mas interactivo as como para proveer documentacin de fcil acceso para las funciones. La primera versin de S funcion en el sistema operativo GCOS (General Comprehensive Operating System), una familia de sistemas operativos para mainframes (Computadoras con gran capacidad de procesamiento de datos). En 1979, S es llevado a UNIX, luego de que fuera portado al entonces nuevo DEC VAX de 32 bits, para luego convertirse en su plataforma primaria. En 1980, S sale de Bell Laboratories y para 1981 la versin source o versin fuente estuvo disponible en 1981 y en 1984 fueron publicados por el equipo de investigacin de Bell Laboratories: S: An Interactive Environment for Data Analysis and Graphics (Conocido como el libro Caf) y Extending the S System. En ese mismo ao, el source code de S se convirti en software con licencia a travs de AT&T Software Sales con propsitos educativos y comerciales. En 1988 el lenguaje S sufre dramticos cambios en su sintaxis. Se publica el libro The New S Language (Libro azul) donde se introducen nuevas aplicaciones, se cambia de macros a funciones, se extiende el concepto de objetos y la sintaxis se hace ms consistente y estricta. En 1991, es publicado Statistical Models in S (Libro blanco) que introduce la notacin de frmulas y el operador , objetos data frame y modificaciones al uso de mtodos y clases. De este ltimo libro se desprende R, creado en 1997 por Ross Ihaka y Robert Gentleman, de ah el nombre R, en la Universidad de Auckland Nueva Zelanda, debido a su herencia S, R tiene mayores facilidades de programacin orientada a objetos que otras ofertas de software estadsticos. Por otro lado, sus reglas de asignacin de valores y expresiones tambin facilitan la programacin en R. Otra de las fortalezas de R radica en su capacidad para producir grficas con calidad de publicacin ya que es posible darles muy buen formato, incluso pueden incluir smbolos matemticos. Adems, R posee libreras con funciones especficas y para reas de estudio muy puntuales como las de anlisis de conglomerados anlisis de series de tiempo. A pesar de que R es un software usado con mayor frecuencia con la finalidad de realizar cmputo estadstico y desarrollo de software, tambin puede ser utilizado como una caja de herramientas para clculos matriciales comparado con GNU Octave, software libre genrico de MATLAB (versiones menores a la 7). Entre las versiones 0.16 (1 de Abril de 1997) y la 2.5.0 (la cual ocuparemos en este trabajo y con fecha del 4 de Abril de 2007) han existido 6 versiones. El lenguaje R se ha transformado paulatinamente, de ser slo para ambientes UNIX y muy similar a S, a un software compatible con casi todos los sistemas operativos actuales como Windows, Solaris, MAC OS, UNIX, LINUX y BSD. Se ha hecho ms rpido, con la capacidad de ocupar poca memoria al realizar sus procesos y a partir del 18 de Abril de 2005, se ha diferenciado totalmente de S y S-Plus. El lenguaje R, al ser un software libre posee numerosas ventajas que intrnsecas a este hecho permiten mayor flexibilidad al operarlo y adems lo hacen un software muy completo ya que, debido a que su cdigo es abierto y permite que los usuarios cooperen en el proyecto bajo la vigilancia del CRAN, las aportaciones son incluidas como libreras que permiten realizar funciones en reas muy especficas.

11

Si bien el software libre carece del soporte tcnico que brindan los laboratorios que ponen a la venta su software con licencia como un valor agregado a su producto; tienen por su parte un sistema bien organizado de retroalimentacin entre los usuarios y los desarrolladores, esta vinculacin permite que los usuarios resuelvan sus dudas con relacin al uso, sintaxis, funciones o aplicaciones que posea el software, mientras que al desarrollador le proporciona datos sobre el buen funcionamiento del paquete, de la misma manera, le da una perspectiva desde el ngulo del usuario que le permite detectar las fortalezas y debilidades de su desarrollo.

2.3. Preliminares
2.3.1. Instalacin
La instalacin de R es muy sencilla, la mquina donde se desee instalar no tiene grandes requerimientos por satisfacer. Adems, la obtencin del paquete en la red y posterior instalacin son no presentan mayor dificultad. R funciona en varios Sistemas operativos, para instalarlo en tu mquina slo necesitas contar con un equipo que cuente con cualquiera de las siguientes plataformas: Windows, UNIX, Alpha UNIX, Mac OS LINUX. Dependiendo del tipo de sistema operativo que vayas a emplear necesitars diferentes requerimientos. Cabe aclarar que en este trabajo slo trabajaremos en la plataforma Windows debido a que es la que la mayora de las personas tiene instalada en su mquina. Para instalar R en una plataforma Windows necesitas primero, que la versin de Windows que maneje sea NT, 95 o posterior. Adems de tener libres en disco duro de 20 a 60 Megabytes. El sitio CRAN (http://cran.r-project.org/) cuenta con todos los archivos necesarios para instalar R as como las instrucciones de instalacin. Para instalar R debes usar el archivo R-2.5.0-win32.exe que se encuentra en cualquiera de los Mirror de CRAN. Un Mirror es un sitio espejo, es decir, un sitio que contiene la misma informacin que algn otro. Es importante que elegir el Mirror ms cercano ya que se ahorra tiempo de transferencia. Ya que se haya ubicado el Mirror de mayor conveniencia, se baja el archivo y ya que est guardado, se da doble clic al icono del ejecutable y se siguen las instrucciones.

2.3.2 La ventana de R
Para acceder a la ventana de R desde Windows cuando este ya ha sido instalado, se hace clic en el icono de R que se encuentra en la barra de programas, o bien se puede tambin entrar a R ms fcilmente si se ha creado un acceso directo en el escritorio. Aparece entonces la siguiente ventana:

12

Figura 2.1.: La porcin superior izquierda de la pantalla de R es la ventana de la Barra de Comando. Esta aparece inmediatamente al iniciar el programa.

Lo que podemos visualizar es la consola de R, es en esta donde se ejecutan los comandos. El prompt de comando, > indica el espacio fsico de la pantalla donde se encontrarn los comandos que se escriban y es una invitacin para comenzar a escribir programar. Hagamos una operacin sencilla:
Ejemplo 2.1 > 3+2 [1] 5 >

El clculo se realiza tan slo al dar enter luego de haber dado la instruccin. El resultado es 5, R lo identifica como un objeto y el [1] nos indica que la visualizacin del objeto inicia en el primer elemento de este. Se dejar para temas posteriores lo referente a la declaracin, identificacin y caracterizacin de los objetos propios de R. Para introducir instrucciones desde un documento realizado con anticipacin, se utiliza la pantalla de Script file, en esta, podemos editar los comandos que vayamos escribiendo, de ah su gran utilidad. Para abrirla, hay que dar clic en el men File, si se requiere una nueva, se da clic en New Script y si lo que se quiere es abrir un documento existente, se da clic en Open script y elige el nombre del archivo y la ubicacin que tenga. Para enviar los comandos a R, selecciona el cdigo a enviar y da clic en el icono Cargar imagen que es el segundo de los conos de la segunda lnea.

13

Fig.2.3. En esta figura se muestra la pantalla de R con una ventana de Editor de textos.

Fig 2.4. Esta figura muestra los ocho conos que aparecen en la ventana de la consola R, comenzando por la izquierda, los conos son: Abrir archivo, Cargar imagen, Guardar archivo, Copiar, Pegar, Copiar y pegar, Detener clculo actual e Imprimir. El texto en la ventana Script File puede ser editado y adems puede serle agregado texto adicional. Las ventanas de Display, no pueden ser editadas

Fig 2.5. En esta figura se muestran los cinco conos de la ventana Script file: Abrir archivo, Guardar, Cargar imagen a consola, Volver a la consola e Imprimir.

Para cerrar la ventana se puede utilizar el comando >q(), dar clic en el men File y luego en Exit o directamente en el botn para cerrar en la esquina derecha superior de nuestra pantalla.

14

Antes de comenzar a programar es necesario revisar algunos comandos bsicos ya que ser imposible entender el desarrollo del captulo sin ellos, por otro lado el conocer como funciona la ayuda de R nos ser de gran utilidad en caso que sea necesario revisar instrucciones que no conozcamos o simplemente para conocer ms de las que estamos utilizando.

La asignacin de valores:
La asignacin de un valor a una variable cualquiera se realiza formando una flecha con un guin seguido o precedido por un signo de mayor o menor segn sea el caso. Para visualizar el objeto slo es necesario escribir su nombre (Ejemplo 2.2)

Concatenar valores.
Se ocupa la funcin c() para crear vectores. Esta funcin concatena los valores dados como componentes de un vector como se muestra en el ejemplo. (Ejemplo 2.3)

En el ejemplo anterior utilizamos los valores de x y y que habamos creado anteriormente y las concatenamos en el vector z, pero tambin podemos hacerlo con directamente con valores o frmulas.

La Ayuda en R
La ayuda en lnea de R proporciona informacin muy til de cmo utilizar las funciones. La ayuda se encuentra disponible directamente para una funcin dada. Por ejemplo: (Ejemplo 2.4 (a) y (b) )
>?lm >help("lm")

mostrar dentro de R, ayuda para la funcin lm() (modelo lineal). Si se quiere buscar ayuda para expresiones que contengan caracteres no convencionales es necesario el uso de comillas. (Ejemplos 2.5 (a) y (b))

15

> ?* Error: syntax error > help("*") Arithmetic package:base R Documentation Arithmetic Operators ...

Al llamar la ayuda, se abre una ventana o pgina (esto depende del sistema operativo) con informacin general sobre la funcin en la primera lnea, tal como el nombre del paquete donde se encuentra la funcin u operador. Despus viene el ttulo, seguido de secciones con informacin especfica acerca de la misma.

Fig 2.6. En esta figura se muestran los cinco conos de la ventana Script file: Abrir archivo, Guardar, Cargar a consola, volver a la consola Reimprimir.

En ocasiones si la expresin u operador no se encuentra en la librera principal: (Ejemplo 2.6)


> help("bs") Error in help("bs") : No documentation for bs in specified packages and libraries: you could try help.search("bs")

Entonces podemos ocupar esta opcin de help(): (Ejemplo 2.7)


> help("bs", try.all.packages=TRUE) topic bs is not in any loaded package but can be found in package splines in library D:/rw1041/library

Para ver la ayuda en formato html se utiliza el siguiente comando: (Ejemplo 2.8)
> help.start()

16

Fig 2.7. Ayuda en HTML.

Con esta ayuda en html es posible realizar bsquedas usando palabras clave. Tambin se pueden realizar bsquedas por palabra clave con la funcin help.search().(Ejemplo 2.8)

Fig 2.7. Pantalla de ayuda correspondiente al comando help.search().

17

La funcin apropos() encuentra todas aquellas funciones cuyo nombre contiene la palabra dada como argumento para los paquetes cargados en memoria: (Ejemplo 2.9)
apropos("help") [1] "help" "help.search" "help.start" "link.html.help"

2.4. Programacin en R
Los Objetos de R: Clasificacin.
En trminos de informtica, los objetos son entidades las cuales tienen atributos, es decir, caractersticas intrnsecas a estos que pueden ser fijas o ser modificadas al por algn proceso. Los atributos intrnsecos de cualquier objeto en trminos computacionales son: tipo y longitud. La clasificacin por tipo se realiza tomando en cuenta slo la clase bsica del objeto. Segn esta manera de clasificar, en R, existen cuatro tipos de objeto:

Tipo de objeto Numrico: Caracter:

Descripcin
El valor de estos objetos corresponde a los nmeros reales. {0, e, pi, 0.45, } Aquellos objetos que no tienen valor numrico y constituidos por letras o cadenas de letras. Ejemplo: {Carmen, agosto, Condicion} Para identificarlos se usan comillas, por lo general, constituyen los nombres de variables Objetos cuyo valor corresponde al campo de los complejos {2i, 2+3i, etc.} Son objetos de naturaleza binaria, es decir, slo pueden asumir dos valores: TRUE FALSE, o bien; 1, 0.
Tabla 2.1. Tipo de objetos en R.

Complejo: Lgico:

La longitud se refiere al nmero de elementos en el objeto. Adems, en R existe una clasificacin secundaria de los objetos derivada de caractersticas intrnsecas de los mismos, mediante la cul podemos dividirlos en:

18

Tipo de objeto
Vector Factor Arreglo

Tipo de elementos que lo componen

Comando para originarlo

Varios tipos de elemento posibles en el mismo arreglo?


No No No No Si Si Si

numrico, caracter, complejo o lgico numrico o caracter factor

numrico, caracter, complejo o lgico Matriz numrico, caracter, matrix complejo o lgico data.frame numrico, caracter, complejo o lgico Ts numrico, caracter, complejo o lgico Lista numrico, caracter, complejo, lgico, funcin, expresin, . . .

Tabla 2.2. Tipo de arreglos en R.

a)

Vector.

El vector es un objeto cuyos atributos son: tipo de elementos que contiene y longitud, para crearlos se utiliza la funcin vector(). Para guardar un arreglo de nmeros de una sola dimensin los concatenamos con la funcin c(), de la siguiente manera: (Ejemplo 2.10)
> x<-c(1,2,3,4) > x [1] 1 2 3 4

Por medio de esta misma funcin, concatenamos dos variables a las que previamente les habamos asignado valores. (Ejemplo 2.11)
> > > > a=1 b=2 x<-c(a,b) x

1 2

Pero para declarar un vector utilizamos la funcin vector() de la siguiente manera: (Ejemplo 2.12)

19

b)

Matriz

Una matriz es un arreglo con los siguientes atributos: modo, longitud y dimensin. Para crear una matriz, se utiliza el comando matrix() de la siguiente forma: (Ejemplo 2.13 (a) y (b))
> matrix(5,2,2) [,1] [,2] [1,] 5 5 [2,] 5 5 > matrix(1:6,2,3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6

Otra forma de interpretar una matriz es como un vector con dimensin. Desde este punto de vista, las matrices pueden ser creadas al agregar dicho atributo a un vector en la forma adecuada: (Ejemplo 2.14 (a) y (b))
> x<-1:15 > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > dim(x)<-c(5,3) > x [,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15 > dim(x)<-c(3,5) > x [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15

Como se puede observar, la funcin dim() agrega al vector el atributo de dimensin; el primer argumento de dim() es el nmero de renglones, mientras que el segundo representa el nmero de columnas que tendr la matriz.

c)

Arreglo

Un arreglo cualquiera de nmeros se puede crear mediante la funcin array(), la cual tiene dos argumentos, el primero est conformado por los nmeros que integran el arreglo y el segundo corresponde a la dimensin que este tiene. (Ejemplo 2.15 (a) y (b))
> dim(as.array(letters)) [1] 26 > array(1:3, c(2,4)) [,1] [,2] [,3] [,4] [1,] 1 3 2 1 [2,] 2 1 3 2 > array(1:6, c(2,4)) [,1] [,2] [,3] [,4]

20

[1,] [2,]

1 2

3 4

5 6

1 2

d)

Marco de datos (data frame)

Un marco de datos se puede construir de dos formas: 1) 2) A partir de vectores Declarando el marco de datos y capturando los valores para cada campo.

Para crear un marco de datos a partir de vectores se utiliza la funcin data.frame() cuyos argumentos son los vectores que conforman el marco de datos. (Ejemplo 2.16 (a) y (b))
> x<-1:4; n<-10;M<-c(10,35); y<-2:4; > data.frame(x,n) x n 1 1 10 2 2 10 3 3 10 4 4 10 > data.frame(x,M) x M 1 1 10 2 2 35 3 3 10 4 4 35

Los vectores que vayan a ser utilizados en la creacin del marco de datos deben tener el mismo nmero de componentes. Pues si no se generar el siguiente error: (Ejemplo 2.17)
> data.frame(x,y) Error en data.frame(x, y) : arguments imply differing number of rows: 4, 3 >

e)

Series de tiempo

Por medio de la funcin ts() crea una serie de tiempo descrita por los sus argumentos en esta forma: Los elementos que la componen Frecuencia Inicio de la serie. Si la serie es anual, no es necesario especificar la frecuencia. (Ejemplo 2.18)
> ts(1:10,1959) Time Series: Start = 1959 End = 1968 Frequency = 1 [1] 1 2 3 4

9 10

21

Para especificar una frecuencia diferente a la anual, se pone el nmero de veces que se da la observacin en un ao. Adems si la fecha de inicio de la serie es diferente a enero, debe tambin ser especificado. (Ejemplo 2.19)
> ts(1:47,frequency=12,start=c(1959,2)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1959 1 2 3 4 5 6 7 8 9 10 11 1960 12 13 14 15 16 17 18 19 20 21 22 23 1961 24 25 26 27 28 29 30 31 32 33 34 35 1962 36 37 38 39 40 41 42 43 44 45 46 47

Como podemos observar, esta serie mensual inici en febrero Este ejemplo muestra cmo se declara una serie de tiempo a partir de una matriz. (Ejemplo 2.20)

De esta manera se crean tres series de tiempo determinadas por las columnas de la matriz, que inician en enero de 1965 y cuya frecuencia es mensual adems, estn compuestas por una secuencia sucesiva que va del 1 al 36

f)

Lista

La lista muestra los objetos que la integran por separado, lo cual le resta aplicacin, se crea con le comando list(); los argumentos de esta funcin son vectores: (Ejemplo 2.21(a) y (b))
> L1<-list(x,y) > L2<-list(A=x,B=y) > names(L1) NULL > names(L2) [1] "A" "B" > L1 [[1]] [1] 1 2 3 4 [[2]] [1] 2 3 4 > L2 $A [1] 1 2 3 4

22

$B [1] 2 3 4 >

g)

Expresiones o funciones

Adems de los objetos ya mencionados, en R tambin es posible crear funciones para simplificar los cdigos de nuestras rutinas. Estos objetos se crean por medio de la funcin expression().(Ejemplo 2.22 (a),(b) y (c))
> #A continuacin se formular una Expresin > x<-3 > y<-2.5 > z<-1 > exp1<-expression(x/(y+exp(z))) > exp1 expression(x/(y + exp(z))) > > length(ex1 <- expression(1+ 0:9)) [1] 1 > ex1 expression(1 + 0:9) > eval(ex1)# Evaluar [1] 1 2 3 4 5 6 7 8 9 10 > length(ex3 <- expression(u,v, 1+ 0:9)) [1] 3 > mode(ex3 [3]) # expression [1] "expression" > mode(ex3[[3]])# invocar [1] "call" > rm(ex3) >

Como se observa en el ejemplo a) primero se definen los argumentos de la funcin y luego se crea la expresin, en el ejemplo b) se evala la expresin creada y en el ejemplo c) se verifica el modo y adems se invoca la expresin. Es importante conocer las diferentes clases de objeto que existen en R para explotar al mximo las propiedades de cada uno de estos y de esta manera hacer que las rutinas sean simples y eficientes.

h)

Cmo visualizar los objetos

Para poder ver los atributos intrnsecos de un objeto utilizamos la funcin mode() y lenght(), la primera nos ayuda a visualizar el tipo y la segunda, la longitud: (Ejemplo 2.23 (a) y (b) )
> x <-5 > mode(x) > [1] numeric

23

> length(x) > [1] 1 > A<- Matriz; comparar<- TRUE; z<-5i > mode(A); mode(comparar); mode(z) [1] character [1] logical [1] complex

Los datos no disponibles se expresan con NA not available independientemente del tipo de dato. Los datos numricos muy grandes se pueden representar usando notacin exponencial: (Ejemplo 2.24)
> N<-2.5e23 > N [1] 2.5e+23

Para representar una variable como carcter se utilizan las comillas . Para incluir las comillas dentro de la variable se escriben las comillas a visualizar precedidas por una \. Estos caracteres juntos se pueden visualizar por medio de la funcin cat(). Los objetos en R, tienen la siguiente clasificacin: Para visualizar objetos en R existen varias funciones de las que hablaremos a continuacin: La funcin ls() simplemente lista los objetos en memoria y slo muestra sus nombres. (Ejemplo 2.25)
> mes<- Julio > nombre<- Fabiola > n1<-15 > n2<-2007 > m<-20 > ls() [1] m mes n1 n2

Para listar aquellos objetos que contengan algn carcter en comn, se utiliza la variante pattern= que puede ser abreviada como pat=: (Ejemplo 2.26)
> ls(pat=m) [1] m mes nombre

Para restringir la lista a aquellos que empiezan con este carcter se utiliza la siguiente variante de pattern=^: (Ejemplo 2.27)
> ls(pat=^m) [1] m mes

Para mostrar algunos detalles de los objetos en memoria se agrega a ls() el .str antes de los parntesis: (Ejemplo 2.28)
> ls.str() m : num 20 mes : chr Julio n1 : num 15 n2 : num 2007 nombre : chr Fabiola

24

Existen tres tipos de operadores en R. R utiliza el directorio de trabajo para leer y escribir archivos. Para saber cual es este directorio puede utilizar el comando getwd() (get working directory) Para cambiar el directorio de trabajo, se utiliza la funcin setwd(); por ejemplo, setwd(C:/data) o setwd(/home/paradis/R).

2.3.4. Introduciendo datos en R

Para la eficiente realizacin de las diferentes tcnicas estadsticas es muy importante un manejo adecuado de los datos a analizar, ya que constituye la materia prima de dicho anlisis. R es permite leer datos de archivos realizados en muy diversos programas. Por medio de la funcin read.table() y scan() se pueden leer archivos de muy diversos tipos, mientras que write.table() guarda los datos en la memoria. La introduccin de datos en R puede definirse en dos pasos: a) b) Lectura de datos Guardar datos.

a)

Lectura de datos

R puede leer datos guardados como archivos de texto (ASCII) con las siguientes funciones: read.table(), scan() y read.fwf(). R tambin puede leer archivos en otros formatos (Excel, SAS, SPSS, . . . ), y acceder a bases de datos tipo SQL, pero las funciones necesarias no estn incluidas en el paquete base. Aunque esta funcionalidad es muy til para el usuario avanzado, slo describiremos las funciones para leer archivos en formato ASCII. La funcin read.table() crea un marco de datos (data frame) y constituye la manera ms usual de leer datos en forma tabular. Por ejemplo si tenemos un archivo de nombre data.dat, el comando:
> misdatos <- read.table("data.dat")

crear un marco de datos denominado misdatos, y cada variable recibir por defecto el nombre V1, V2, . . . y puede ser accedida individualmente escribiendo misdatos$V1, misdatos$V2,. . . , o escribiendo misdatos["V1"], misdatos["V2"], . . . , o, tambin escribiendo misdatos[,1], misdatos[,2 ], . . . 9 Existen varias opciones con valores por defecto (aquellos usados por R si son omitidos por el usuario) que se detallan en la siguiente tabla:
read.table(file, header = FALSE, sep = "", quote = "\"", dec = ".",row.names, col.names, as.is = FALSE, na.strings = "NA", colClasses = NA, nrows = -1,skip = 0, check.names = TRUE, fill = !blank.lines.skip,strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#")

25

A continuacin, se muestra cada uno de los atributos de la funcin read.table() y sus caractersticas:

El nombre del archivo (entre o como una variable de tipo caracter), posiblemente con su direccin si se encuentra en un directorio diferente al de trabajo (el smbolo \no es permitido y debe reemplazarse con /, inclusive en Windows), o una direccin remota al archivo tipo URL (http://...) Header Una variable lgica (FALSE (falso) o TRUE (verdadero)) indicando si el archivo contiene el nombre de las variables en la primera fila o lnea sep el separador de campo usado en el archivo; por ejemplo sep="\t" si es una tabulacin Quote Los caracteres usados para citar las variables en modo caracter Dec El caracter usado para representar el punto decimal row.names Un vector con los nombres de las lneas de tipo caracter o numrico (por defecto: 1, 2,3, . . . ) col.names Un vector con los nombres de las variables (por defecto: V1, V2, V3, . . . ) as.is Controla la conversin de variables tipo caracter a factores (si es FALSE) o las mantiene como caracteres (TRUE); as.is puede ser un vector lgico o numrico que especifique las variables que se deben mantener como caracteres na.strings el valor con el que se codifican datos ausentes (convertido a NA) colClasses un vector de caracteres que proporciona clases para las columnas nrows el nmero mximo de lneas a leer (se ignoran valores negativos) Skip El nmero de lneas ignoradas antes de leer los datos check.names Si es TRUE, chequea que el nombre de las variables sea vlido para R fill si es TRUE y todas las filas no tienen el mismo nmero de variables, agrega blancos strip.white (condicional a sep) si es TRUE, borra espacios extra antes y despues de variables tipo carcter blank.lines.skip si es TRUE, ignora lneas en blanco comment.char un caracter que define comentarios en el archivo de datos; lneas que comiencen con este caracter son ignoradas en la lectura (para desactivar este argumento utilice comment.char =) File
Tabla 2.3. Parmetros de read.table()

Existe una diferencia: misdatos$V1 y misdatos[, misdatos["V1"] es un marco de datos

1] son vectores mientras que

Las variantes de read.table son tiles ya que vienen con diferentes opciones por defecto. La funcin scan es ms flexible que read.table. A diferencia de esta ltima es posible especificar el modo de las variables:
> misdatos <- scan("data.dat", what = list("", 0, 0))

En este ejemplo scan lee tres variables del archivo data.dat; el primero es un caracter y los siguientes dos son numricos. Otra distincin importante es la capacidad de scan() de

26

crear diferentes objetos como vectores, matrices, marcos de datos, listas, . . . En el ejemplo anterior, misdatos es una lista de tres vectores. Por defecto, es decir si se omite el argumento what, scan() crea un vector numrico. Si los datos ledos no corresponden al modo (o modos) esperado(s) (ya sea por defecto o especificado a travs de what), se genera un mensaje de error. Las opciones son las siguientes:
scan(file = "", what = double(0), nmax = -1, n = -1, sep = "", quote = if (sep=="\n") "" else "\"", dec = ".", skip = 0,nlines = 0, na.strings = "NA",flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE,blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "#")

El nombre del archivo(entre ), posiblemente incluyendo la direccin completa (el smbolo \no es permitido y debe ser reemplazado por /, inclusive bajo Windows), o acceso remoto del tipoURL (http://...); si file=, los datos deben ser introducidos desde el teclado (la entrada se termina con una lnea en blanco) what especifica el tipo (s) de los datos (numrico por defecto) nmax el nmero mximo de datos a ser ledo, o si what es una lista, el nmero de lneas por leer (por defecto, scan lee los datos hasta que encuentra el final del archivo) n el nmero de datos por leer (por defecto no hay limite) sep el separador de campos usado en el archivo Quote Los caracteres usados para citar las variables de tipo caracter Dec El caracter usado para el punto decimal. Skip El nmero de lneas ignorado antes de empezar a leer datos Nlines El nmero de lneas a leer na.string El valor asignado a datos ausentes (convertido a NA) Flush Si es TRUE, scan va a la siguiente lnea una vez se han leido todas las columnas (el usuario puede agregar comentarios en el archivo de datos) Fill Agrega blancos si es TRUE y todas las lneas no tienen el mismo nmero de variables strip.white (condicional a sep) si es TRUE, elimina espacios extras antes y despus de variables de tipo caracter quiet Si es FALSE, scan muestra una lnea indicando los campos que han sido ledos blank.lines.skip si es TRUE, ignora lneas en blanco multi.line si what es una lista, especifica si las variables de un mismo individuo estn en una sola lnea en el archivo (FALSE) comment.char Un caracter que define comentarios en el archivo; aquellas lneas que comiencen con este caracter son ignoradas File
Tabla 2.4. Parmetros de scan()

La funcin read.fwf() puede usarse para leer datos en archivos con formato de ancho fijo:
read.fwf(file, widths, col.names, n = -1) sep="\t", as.is = FALSE, skip = 0, row.names,

27

Las opciones son las mismas que para read.table() con excepcin de widths que especifica la anchura de los campos. Por ejemplo, si un archivo de nombre Base2.1 tiene los datos mostrados a continuacin:
1 2 3 4 5 6 A A B B C C 1.50 1.55 1.60 1.65 1.70 1.75 1.2 1.3 1.4 1.5 1.6 1.7

Esto se puede leer con el comando read.table() de la siguiente manera: (Ejemplo 2.29)

Si el archivo que se va a leer con este comando tiene algn encabezado, se sugiere utilizar la variable header=TRUE como sigue: (Ejemplo 2.30)
> datos<-read.table(C:/Archivos datos/Base2.2.txt,header=TRUE) > datos Nio Edad Municipio Idioma 1 Juanito 5 Naucalpan Ingls 2 Rosita 7 Tlalnepantla Espaol 3 Pepito 9 Cuautitln Francs > de programa/R/R-2.5.0/Bases de

Otra forma prctica y atractiva de leer datos sin tener que introducir el nombre del archivo desde R es utilizando primero el comando file.choose() que aparece una ventana de seleccin de archivos de la siguiente forma: (Ejemplo 2.31)
> archivo<-file.choose()

Fig 2.8. Ventana de eleccin de archivos que se abre con el comando file.choose().

28

Y luego ocupamos la funcin read.table() o scan() para crear un marco de datos a partir del archivo obtenido de esta manera.

b)

Guardando datos

write.table(x, file = "", append = FALSE, quote = TRUE, sep = "",eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = c("escape", "double"))

La funcin write.table() guarda el contenido de un objeto en un archivo. El objeto es tpicamente un marco de datos (data frame), pero puede ser cualquier otro tipo de objeto (vector, matriz,. . . ). Los argumentos y opciones se encuentran en la siguiente tabla: Es el nombre del objeto a exportar, El nombre del archivo (por defecto, el objeto se muestra en la pantalla), Si es TRUE anexa los datos al archivo sin borrar datos ya existentes en el mismo, Lgico o numrico : si es TRUE variables de tipo caracter y factores se escriben entre ; si es un vector numrico, este indica el nmero de las variables a ser es mostradas entre (en ambos casos los nombres de las variables se escriben entre pero no si quote = FALSE), El separador de campo utilizado en el archivo, El caracter que indica el final de lnea ("\n" es retorno), El caracter a usarse para datos faltantes, El caracter usado para el punto decimal, Una opcin lgica que indica si los nombres de las lneas se escriben en el archivo, Identificacin para los nombres de las columnas y Si es quote=TRUE, especifica la manera como se debe tratar las comillas dobles en variables tipo caracter: si es escape(o e, por defecto) cada es reemplazada por \.
Tabla 2.5. Parmetros de write.table()

x file append quote

sep eol na Dec row.names col.names qmethod

Una manera sencilla de escribir los contenidos de un objeto en un archivo es utilizando el comando
write(x, file="data.txt"),

donde x es el nombre del objeto (que puede ser un vector, una matrix, o un arreglo). Esta funcin tiene dos opciones: nc (o ncol) que define el nmero de columnas en el archivo (por defecto nc=1 si x es de tipo caracter, nc=5 para otros tipos), y append (lgico) que agrega

29

los datos al archivo sin borrar datos ya existentes (TRUE) o borra cualquier dato que existe en el archivo (FALSE, por defecto). Para guardar un grupo de objetos de cualquier tipo se puede usar el comando:
save(x, y, z, file= "xyz.RData").

Para facilitar la transferencia de datos entre diferentes mquinas, se pueden utilizar la opcin ascii = TRUE. Los datos, ahora como un workspace o espacio de trabajo en trminos de R, se pueden cargar en memoria ms tarde con el comando:
load("xyz.RData").

La funcin save.image() es una manera corta del comando


save(list=ls(all=TRUE), file=".RData")

(guarda todos los objetos en memoria en el archivo .RData).

Otras formas de generar datos en R Secuencias regulares


Una secuencia regular de nmeros enteros, por ejemplo de 1 hasta 30, se puede generar con el operador : como sigue: (Ejemplo 2.32)

El vector resultante x tiene 30 elementos. El operador : tiene prioridad sobre otros operadores aritmticos en una expresin: (Ejemplo 2.33)
> 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 1:(10-1) [1] 1 2 3 4 5 6 7 8 9

La funcin seq puede generar secuencias de nmeros reales: (Ejemplo 2.34)


> seq(1, 5, 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

Donde el primer nmero indica el principio de la secuencia, el segundo el final y el tercero el incremento que se debe usar para generar la secuencia. Tambin se puede usar: (Ejemplo 2.35)

30

> seq(length=9, from=1, to=5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

Tambin se pueden escribir los valores directamente usando la funcin c: (Ejemplo 2.36)
> c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

Si se quiere, tambin es posible introducir datos directamente desde el teclado usando la funcin scan() sin argumentos: (Ejemplo 2.37)
> z <- scan() 1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 10: Read 9 items > z [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

La funcin rep() crea un vector con elementos idnticos: (Ejemplo 2.38)


> rep(1, 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

La funcin sequence() crea una serie de secuencias de nmeros enteros donde cada secuencia termina en el nmero (o nmeros) especificado (s) como argumento (s): (Ejemplo 2.39 (a) y (b))
> sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 > sequence(c(10,5)) [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5

La funcin gl() (generador de niveles) es muy til porque genera series regulares de factores. La funcin tiene la forma gl(k, n) donde k es el nmero de niveles (o clases), y n es el nmero de rplicas en cada nivel. Se pueden usar dos opciones: length para especificar el nmero de datos producidos, y labels para especificar los nombres de los factores. (Ejemplo 2.40 (a) , (b), (c), (e) y (f))
> gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(3, 5, length=30) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2, 6, label=c("Macho", "Hembra")) [1] Macho Macho Macho Macho Macho Macho [7] Hembra Hembra Hembra Hembra Hembra Hembra Levels: Macho Hembra > gl(2, 10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2

31

> gl(2, 1, length=20) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Levels: 1 2 > gl(2, 2, length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2 15

Finalmente, expand.grid() crea un marco de datos con todas las combinaciones de vectores o factores proporcionados como argumentos: (Ejemplo 2.41)
> expand.grid(a=c(60,80), p=c(100, 300), sexo=c("Hombre", "Mujer")) a p sexo 1 60 100 Hombre 2 80 100 Hombre 3 60 300 Hombre 4 80 300 Hombre 5 60 100 Mujer 6 80 100 Mujer 7 60 300 Mujer 8 80 300 Mujer

Secuencias aleatorias
La posibilidad de generar datos aleatorios es bastante til en estadstica y R tiene la capacidad de hacer esto para un gran nmero de funciones y distribuciones. Estas funciones son de la forma rfunc(n, p1, p2, ...), donde func indica la distribucin, n es el nmero de datos generado, y p1, p2, . . . son valores que toman los parmetros de la distribucin. La tabla anterior muestra los detalles de cada distribucin, y los posibles valores por defecto de los parmetros (si no se indica, significa que el parmetro debe ser especificado por el usuario). Todas estas funciones se pueden usar reemplazando la letra r con las letras d, p o q para obtener, la densidad de probabilidad (dfunc(x,...)), la densidad de probabilidad acumulada (pfunc(x, ...)), y el valor del cuartil (qfunc(p, ...), con 0 < p < 1, respectivamente. Algunas de las funciones de distribucin que R considera son:

Distribucin Gauss (normal) Exponencial Gamma Poisson Weibull Cauchy Beta Student (t)

Cdigo rnorm(n, mean=0, sd=1) rexp(n, rate=1) rgamma(n, shape, scale=1) rpois(n, lambda) rweibull(n, shape, scale=1) rcauchy(n, location=0, scale=1) rbeta(n, shape1, shape2) rt(n, df)

32

FisherSnedecor (F) Pearson Binomial Geomtrica Hypergeomtrica Logstica Lognormal Binomial negativa Uniforme Estadstico de Wilcoxons

rf(n, df1, df2) rchisq(n, df) rbinom(n, size, prob) rgeom(n, prob) rhyper(nn, m, n, k) rlogis(n, location=0, scale=1) rlnorm(n, meanlog=0, sdlog=1) rnbinom(n, size, prob) runif(n, min=0, max=1) rwilcox(nn, m, n), rsignrank(nn, n)

Tabla 2.6. Funciones de distribucin de probabilidad que considera R.

A continuacin, como ejemplo tenemos la generacin de diez nmeros con distribucin uniforme (0,1). (Ejemplo 2.42)
> runif(10,0,1) [1] 0.94525750 0.91915735 0.80868855 0.05713948 0.99623519 0.08050776 0.83682049 0.45032151 0.18081338 0.19225350

2.3.5. Operaciones bsicas y sintaxis elemental en R

R siendo un lenguaje orientado a objetos posee mltiples ventajas pues la programacin de rutinas resulta ms fcil que en lenguajes como C o Java. Ya que no es necesario compilar, sino que se construyen los programas utilizando las funciones existentes.

Operaciones bsicas
La sintaxis de R en sus comandos y funciones bsicas es muy parecida a la de C++ ya que las libreras se construyeron con este programa. Es por eso que en la mayora de los casos si se ha programado en C ser muy fcil desarrollar rutinas en R.

Operadores
Aritmticos + adicin substraccin * multiplicacin "/" divisin ^ potencia %% mdulo %/% divisin de enteros Comparativos < menor > mayor <= menor o igual que >= mayor o igual que == Igual != diferente de Lgicos !x NO lgico x&y Y Lgico x && y Identidad. x|y O lgico x || y Identidad. xor(x,y) O exclusivo

Tabla 2.7. Operadores bsicos que considera R.

33

Los operadores aritmticos y comparativos actan en dos elementos (x + y, a <b). Los operadores aritmticos actan sobre variables de tipo numrico o complejo, pero tambin lgico; en este caso los valores lgicos son forzados a valores numricos. Los operadores comparativos pueden actuar sobre cualquier tipo devolviendo uno o varios valores lgicos. Los operadores lgicos pueden actuar sobre uno o dos objetos de tipo lgico, y pueden devolver uno (o varios) valores lgicos. Los operadores Y y O existen en dos formas: uno sencillo donde cada operador acta sobre cada elemento del objeto y devuelve un nmero de valores lgicos igual al nmero de comparaciones realizadas; otro doble donde cada operador acta solamente sobre el primer elemento del objeto. Es necesario usar el operador AND para especificar una desigualdad del tipo 0<x<1 la cual puede ser codificada como 0 <x & x <1. La expresin 0<x<1 es vlida, pero no devuelve el resultado esperado debido a que ambos operadores son del mismo tipo y se ejecutan sucesivamente de izquierda a derecha. La comparacin 0<x se realiza primero y el valor retornado es comparado con 1 (TRUE o FALSE <1): en este caso, el valor lgico es implcitamente forzado a numrico (1 o 0 <1). Los operadores comparativos actan sobre cada elemento de los dos objetos que se estn comparando (reciclando los valores de los ms pequeos si es necesario), devolviendo un objeto del mismo tamao. Para comparar totalmente dos objetos es necesario usar la funcin identical():(Ejemplo 2.43)
> x <- 1:3; y <- 1:3 > x == y [1] TRUE TRUE TRUE > identical(x, y) [1] TRUE

Existen muchas funciones en R para manipular datos. Hemos visto la ms sencilla, c que concatena los objetos listados entre parntesis. Por ejemplo: (Ejemplo 2.44)
> c(1:5, seq(10, 11, 0.2)) [1] 1.0 2.0 3.0 4.0 5.0 10.0 10.2 10.4 10.6 10.8 11.0

El nmero de funciones disponibles en R es demasiado grande para ser listado en este manual. Se pueden encontrar todas las funciones matemticas simples (log, exp, log10, log2, sin, cos, tan, asin, acos, atan, abs, sqrt, . . . ), funciones especiales (gamma, digamma,beta, bessell, . . . ), as como diversas funciones tiles en estadstica y que detallaremos a continuacin.

Funcin
sum(x) prod(x) max(x) min(x) which.max(x) which.min(x) range(x) suma de los elementos de x producto de los elementos de x valor mximo en el objeto x valor mnimo en el objeto x devuelve el ndice del elemento mximo de x devuelve el ndice del elemento mnimo de x rango de x o c(min(x), max(x))

34

length(x) mean(x) median(x) var(x) o cov(x)

cor(x) var(x, y) cov(x, y) cor(x, y)

nmero de elementos en x promedio de los elementos de x mediana de los elementos de x varianza de los elementos de x (calculada en n1); si x es una matriz o un marco de datos, se calcula la matriz de varianza-covarianza matriz de correlacin de x si es una matriz o un marco de datos (1 si x es un vector) o covarianza entre x y y, o entre las columnas de x y y si son matrices o marcos de datos correlacin lineal entre x y y, o la matriz de correlacin si x y y son matrices o marcos de datos

Tabla 2.8. Estas funciones devuelven un solo valor (o un vector de longitud 1), a excepcin de range() que retorna un vector de longitud 2, y var(), cov(), y cor() que pueden devolver matrices, veremos su aplicacin en el captulo 1.

Operaciones con vectores


Los vectores pueden ser manipulados con expresiones aritmticas clsicas:
> x > y > z > z [1] <- 1:4 <- rep(1, 4) <- x + y 2 3 4 5

Se pueden adicionar vectores con diferentes longitudes; en este caso el vector ms corto se recicla. Ejemplos: (Ejemplo 2.45)
> x <- 1:4 > y <- 1:2 > z <- x + y 25 > z [1] 2 4 4 6 > x <- 1:3 > y <- 1:2 > z <- x + y Warning message: longer object length is not a multiple of shorter object length in: x + y > z [1] 2 4 4

Note que R ha devuelto un mensaje preventivo y no un mensaje de error; por lo tanto la operacin fue realizada. Si queremos agregar (o multiplicar) un mismo valor a todos los elementos de un vector: (Ejemplo 2.46)
> x > a > z > z [1] <- 1:4 <- 10 <- a * x 10 20 30 40

35

A continuacin, algunos ejemplos de cdigos de operaciones bsicas con vectores: (Ejemplo 2.47 (a), (b), (c) y (d))
> #Producto acumulativo de un vector prod() > x<-c(9,8,5,4) > print(prod(x)) [1] 1440 > > #Para obtener producto punto de un vector > y<-c(5,4,3,2) > print(x%*%y) [,1] [1,] 100

>
> #Para obtener producto cruz > crossprod(x,y=NULL) [,1] [1,] 186 > > #Para obtener sumas de vectores > x+y [1] 14 12 8 6 > > #Para multiplicar por un escalar > 8*x [1] 72 64 40 32 >

Otras funciones de gran utilidad son las siguientes pues, por medio de estas es posible devolver vectores ms complejos:

Comando
round(x, n) rev(x) sort(x) rev(sort(x)) rank(x) log(x, base) scale(x)

Funcin
redondea los elementos de x a n cifras decimales invierte el orden de los elementos en x ordena los elementos de x en orden ascendente; para hacerlo en orden descendente:

alinea los elementos de x calcula el logaritmo de x en base "base" si x es una matriz, centra y reduce los datos; si se desea centrar solamente utilizar pmin(x,y,...) un vector en el que el iavo elemento es el mnimo de x[i], y[i], . . . pmax(x,y,...) igual que el anterior pero para el mximo cumsum(x) un vector en el que el iavo elemento es la suma desde x[1] a x[i] cumprod(x) igual que el anterior pero para el producto cummin(x) igual que el anterior pero para el mnimo cummax(x) igual que el anterior pero para el mximo match(x, y) devuelve un vector de la misma longitud que x con los elementos de x que estn en y (NA si no) which(x == a) devuelve un vector de los ndices de x si la operacin es (TRUE) (en este ejemplo, los valores de i para los cuales x[i] == a). El argumento de esta funcin debe ser una variable de tipo lgico Cose(n, k) calcula el nmero de combinaciones de k eventos en n repeticiones = n!/[(nk)!k!] na.omit(x) elimina las observaciones con datos ausentes (NA) (elimina la fila

36

na.fail(x) unique(x) table(x) subset(x, ...)

Simple(x, size)

Tabla 2.9. Comandos para obtener vectores de mayor complejidad.

correspondiente si x es una matriz o un marco de datos) devuelve un mensaje de error si x contiene por lo menos un NA si x es un vector o un marco de datos, devuelve un objeto similar pero suprimiendo elementos duplicados devuelve una tabla con el nmero de diferentes valores de x (tpicamente para enteros o factores) devuelve una seleccin de x con respecto al criterio (..., tpicamente comparaciones: x$V1 <10); si x es un marco de datos, la opcin select proporciona las variables que se mantienen (o se ignoran con -) Remuestrea al azar y sin reemplazo size elementos en el vector x; la opcin replace = TRUE permite remuestrear con reemplazo

Clculos con Matrices


R posee facilidades para manipular y hacer operaciones con matrices. Las funciones rbind() y cbind() unen matrices con respecto a sus filas o columnas respectivamente: (Ejemplo 2.48)
> m1 <- matrix(1, nr = 2, nc = 2) > m2 <- matrix(2, nr = 2, nc = 2) > rbind(m1, m2) [,1] [,2] [1,] 1 1 [2,] 1 1 [3,] 2 2 [4,] 2 2 > cbind(m1, m2) [,1] [,2] [,3] [,4] [1,] 1 1 2 2 [2,] 1 1 2 2 27

El operador para el producto de dos matrices es %* %. Por ejemplo, considerando las dos matrices m1 y m2: (Ejemplo 2.49)
> rbind(m1, m2) %*% cbind(m1, m2) [,1] [,2] [,3] [,4] [1,] 2 2 4 4 [2,] 2 2 4 4 [3,] 4 4 8 8 [4,] 4 4 8 8 > cbind(m1, m2) %*% rbind(m1, m2) [,1] [,2] [1,] 10 10 [2,] 10 10

La transposicin de una matriz se realiza con la funcin t; esta funcin tambin funciona con marcos de datos.

37

La funcin diag se puede usar para extraer o modificar la diagonal de una matriz o para construir una matriz diagonal: (Ejemplo 2.50 (a), (b), (c), (d) y (e))
> diag(m1) [1] 1 1 > diag(rbind(m1, m2) %*% cbind(m1, m2)) [1] 2 2 8 8 > diag(m1) <- 10 > m1 [,1] [,2] [1,] 10 1 [2,] 1 10 > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > v <- c(10, 20, 30) > diag(v) [,1] [,2] [,3] [1,] 10 0 0 [2,] 0 20 0 [3,] 0 0 30 > diag(2.1, nr = 3, nc = 5) [,1] [,2] [,3] [,4] [,5] [1,] 1.3 0.0 0.0 0 0 [2,] 0.0 1.3 0.0 0 0 [3,] 0.0 0.0 1.3 0 0

R tambin posee algunas funciones para clculos con matrices. Mencionamos aqu solve() para invertir una matriz, qr() para descomposicin, eigen() para calcular valores y vectores propios, y svd() para descomposicin singular. Los siguientes ejemplos son corridas de operaciones simples con matrices en R.
> #Operaciones con matrices > > m1<-matrix(1,nr=2,nc=2) > m2<-matrix(2,nr=2,nc=2)

Producto de matrices (Ejemplo 2.51)


> rbind(m1,m2)%*%cbind(m1,m2) [,1] [,2] [,3] [,4] [1,] 2 2 4 4 [2,] 2 2 4 4 [3,] 4 4 8 8 [4,] 4 4 8 8 >

Para permutar los renglones y columnas de una matriz se ocupa aperm() (Ejemplo 2.52)
> m3<-diag(0.58,nr=3,nc=5) > m3 [,1] [,2] [,3] [,4] [,5] [1,] 0.58 0.00 0.00 0 0 [2,] 0.00 0.58 0.00 0 0 [3,] 0.00 0.00 0.58 0 0 > aperm(m3) [,1] [,2] [,3] [1,] 0.58 0.00 0.00

38

[2,] [3,] [4,] [5,] >

0.00 0.00 0.00 0.00

0.58 0.00 0.00 0.00

0.00 0.58 0.00 0.00

Para obtener la transpuesta de una matriz (Ejemplo 2.53)


> m1<-matrix(1:4,nr=2,nc=2) > m1 [,1] [,2] [1,] 1 3 [2,] 2 4 > m1t<-t(m1) > m1t [,1] [,2] [1,] 1 2 [2,] 3 4 >

Para obtener la inversa de una matriz se ocupa la funcin solve() (Ejemplo 2.54)
> m1.1<-solve(m1) > m1.1 [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 >

Para descomposicin de una matriz qr().(Ejemplo 2.55)


> m1.2<-qr(m1) > m1.2 $qr [,1] [,2] [1,] -2.2360680 -4.9193496 [2,] 0.8944272 -0.8944272 $rank [1] 2 $qraux [1] 1.4472136 0.8944272 $pivot [1] 1 2 attr(,"class") [1] "qr" >

Para calcular valores y vectores propios eigen()(Ejemplo 2.56)


> eigen(m1) $values [1] 5.3722813 -0.3722813 $vectors [,1] [,2] [1,] -0.5657675 -0.9093767

39

[2,] -0.8245648 >

0.4159736

Para descomposicin singular de una matriz svd().(Ejemplo 2.57)


> svd(m1) $d [1] 5.4649857 0.3659662 $u [,1] [,2] [1,] -0.5760484 -0.8174156 [2,] -0.8174156 0.5760484 $v [,1] [,2] [1,] -0.4045536 0.9145143 [2,] -0.9145143 -0.4045536 >

Y por ltimo, la suma de matrices se realiza con el operador comn de la suma: (Ejemplo 2.58)
> m1+m2 [,1] [,2] [1,] 3 5 [2,] 4 6 > m1+m3 Error en m1 + m3 : arreglos de dimensin no compatibles >

Esta es una pequea muestra de lo que se puede hacer en R en lo que respecta a operaciones con matrices, pues como se haba mencionado, R posee poderosas herramientas para el clculo matricial.

Condicionales
El establecer estructuras condicionales es de mucha utilidad para la realizacin de rutinas, en R el comando que se utiliza para esta funcin es ifelse() : (Ejemplo 2.59)
> a<-runif(1,0,1) > ifelse(a<=.5,b<-1,b<-0) [1] 0 > a [1] 0.852033 > b [1] 0 >

A continuacin ifelse() anidado para mostrar varias condiciones: (Ejemplo 2.60)


> ifelse(a<=(1/3),b<-0,ifelse(a>=(1/3)&&a<=(2/3),b<-1,b<-2)) [1] 2

40

Otras formas de mostrar condiciones, el primer ejemplo muestra verdadero o falso. Si se cumple la condicin (Ejemplo 2.61)
> if(a<=0.5) b<-1 > b [1] 0 If con varias condiciones (Ejemplo 2.62) > if(a<=0.5) b<-3 else b<-4 > b [1] 4

un if para mostrar

Bucles
Son estructuras cclicas se utilizan con mucha frecuencia al programar, en R se pueden utilizar las siguientes estructuras: - for - while

For
Muy parecida a la sintaxis de C++, el comando for se utiliza de la siguiente manera: (Ejemplo 2.63)
> for(i [1] 1 [1] 1 2 [1] 1 2 [1] 1 2 [1] 1 2 in 1:5) print(1:i)

3 3 4 3 4 5

Se especifica el rango de repeticiones de la variable o contador i y luego se pone la funcin que se calcular en forma iterativa indexada a esta variable. Utilizando for, podemos adems crear vectores a partir de otros. (Ejemplo 2.64)
> x<-c(5:10) > y<-c(90:95) > z<-rep(5,0) > for(i in 1:6) + { + z[i]<-x[i]+y[i] + } > z [1] 95 97 99 101 103 10

41

While
While() es un controlador de flujo que para con una condicin, es de ms aplicacin que for() pues en muchas ocasiones no sabemos el nmero exacto de iteraciones que se

necesitan para que el modelo llegue a los resultados que cumplan las condiciones que lo hagan aceptable al observador y es necesario plantear las condiciones deseables para parar el proceso. (Ejemplo 2.65)
> a<-1 > i<-0 > while(i<=5) + { + i=i+1 + a=a+a*i + } > a [1] 5040 > i [1] 6

Estos cdigos son aplicaciones muy bsicas de las funciones en R y constituyen la ayuda bsica para quienes no han tenido contacto con este lenguaje.

2.3.6

Manejo de grficos en R

R ofrece una increble variedad de grficos. Si quieres darte una idea puedes escribir el comando (Ejemplo 2.66)
>demo(graphics)

No nos es posible detallar aqu todas las posibilidades de R en trminos de generacin de grficas. Cada funcin grfica en R tiene un enorme nmero de opciones permitiendo una gran flexibilidad en la produccin de grficos y el uso de cualquier otro paquete grfico palidece en comparacin. Las funciones grficas trabajan totalmente diferente a las funciones ordinarias. El resultado de una funcin grfica es enviado a un dispositivo grfico. Un dispositivo grfico es una ventana grfica o un archivo. Existen dos tipos de funciones grficas: Funciones de graficacin de alto nivel que crean una nueva grfica

Funciones de graficacin de bajo nivel que agregan elementos a una grfica ya existente. Las grficas se producen con respecto a parmetros grficos que estn definidos por defecto y pueden ser modificados con la funcin par().

42

Primero veremos como manejar grficos y dispositivos grficos; despus veremos en detalle algunas funciones grficas y sus parmetros. Veremos ejemplos prcticos del uso de estas funcionalidades en la produccin de grficos. Finalmente, veremos los paquetes grid() y lattice() cuyo funcionamiento es diferente a las funciones grficas normales de R.

Abriendo mltiples dispositivos grficos


Al ejecutarse una funcin grfica, R abre una ventana para mostrar el grfico si no hay ningn dispositivo abierto. Un dispositivo grfico se puede abrir con la funcin apropiada. El tipo de dispositivos grficos disponibles depende del sistema operativo. Las ventanas grficas se llaman X11 bajo Unix/Linux, Windows bajo Windows y macintosh bajo Mac. En Unix/Linux y Windows se puede abrir una nueva ventana grfica con el comando x11() ya que en Windows existe un alias apuntando a windows(). Dispositivos grficos que son archivos se pueden abrir con una funcin que depende del tipo de archivo que se quiere crear: postscript(), pdf(), png(),etc., La lista de dispositivos grficos disponibles se obtiene con el comando ?device. El ltimo dispositivo en ser abierto, se convierte en el dispositivo activo sobre el cual se dibujan (o escriben) las grficas generadas. La funcin dev.list() muestra una lista con los dispositivos abiertos: (Ejemplo 2.67)
> x11(); x11(); pdf() > dev.list() X11 X11 pdf 2 3 4

Los nmeros corresponden al nmero del dispositivo respectivo. Este se puede usar para cambiar el dispositivo activo. Para saber cual es el dispositivo activo: (Ejemplo 2.68)
> dev.cur() pdf 4

y para cambiar el dispositivo activo: (Ejemplo 2.69)


> dev.set(3) X11 3

La funcin dev.off() cierra el dispositivo; por defecto se cierra el dispositivo activo, de lo contrario el correspondiente al nmero pasado en la funcin. R muestra el nmero del nuevo dispositivo activo: (Ejemplo 2.70)
> dev.off(2) X11 3 > dev.off() pdf 4

Vale la pena mencionar dos caractersticas especficas de la versin de R para Windows:

43

1) La funcin win.metafile abre un dispositivo meta-archivo de Windows , y 2) El men History seleccionado cuando la ventana grfica est activa, permite grabar todas las grficas durante una sesin (por defecto, esta opcin est inactiva, pero el usuario la puede activar haciendo clic en Recording en este men).

Disposicin de una grfica


La funcin split.screen() divide el dispositivo grfico activo. Por ejemplo:
split.screen(c(1, 2)) divide el dispositivo en dos partes que se pueden seleccionar con screen(1) o screen(2); erase.screen() borra la ltima grfica dibujada. Una parte de un dispositivo se puede dividir a su vez en partes ms pequeas con split.screen() permitiendo la posibilidad de configuraciones complejas.

Estas funciones son incompatibles con otras similares (como layout() o coplot()) y no se deben usar con mltiples dispositivos grficos. Su uso se debe limitar por ejemplo, a la exploracin grfica de datos. La funcin layout() divide el dispositivo activo en varias partes donde se colocarn las grficas de manera sucesiva. Esta funcin tiene como argumento principal una matriz con nmeros enteros indicando el nmero de las sub-ventanas. Por ejemplo, para dividir el dispositivo en cuatro partes iguales: (Ejemplo 2.71)

Fig 2.9. Ventana de grfico dividida en cuatro secciones iguales

Tambin es posible crear esta matriz previamente permitiendo una mejor visualizacin de la manera como se va a dividir el dispositivo: (Ejemplo 2.72)

44

> mat <- matrix(1:4, 2, 2) > mat [,1] [,2] [1,] 1 3 [2,] 2 4 > layout(mat)

Los siguientes ejemplos demuestran algunas de las posibilidades ofrecidas por layout().(Ejemplo 2.73)
>layout(matrix(1:6, 3, 2)) >layout.show(6)

Fig 2.10. Ventana de grfico dividida en seis secciones iguales

Para visualizar la particin creada, se puede usar la funcin layout.show con el nmero de sub-ventanas como argumento. En este ejemplo tenemos: (Ejemplo 2.73 (a))
>layout.show(4)

45

Fig 2.11. Visualizacin slo de cuatro paneles de la ventana de grfico dividida en seis secciones iguales creada en el ejemplo anterior

(Ejemplo 2.74)
>m <- matrix(c(1:3, 3), 2, 2) >layout(m) >layout.show(3)

Fig 2.12. Tres sub-ventanas acomodadas en una matriz de cuatro

46

En ninguno de estos ejemplos hemos usado la opcin byrow de matrix() (leer por filas), y por lo tanto las sub-ventanas se numeran a lo largo de las columnas; se puede especificar matrix(..., byrow=TRUE) para numerar las sub-ventanas a lo largo de las filas. Los nmeros en la matriz se pueden dar en cualquier orden, por ejemplo matrix(c(2, 1, 4, 3), 2,2). Por defecto, layout() divide el dispositivo en dimensiones regulares: esto se puede modificar con las opciones widths y heights. Estas dimensiones se dan de manera relativa. Aunque pueden ser proporcionadas en centmetros, ver ?layout. (Ejemplo 2.75)
>m <- matrix(1:4, 2, 2) >layout(m, widths=c(1, 3), heights=c(3, 1)) >layout.show(4)

Fig 2.13. Tres sub-ventanas acomodadas en una matriz de cuatro con diferentes proporciones en widths y heights

(Ejemplo 2.76)
>m <- matrix(c(1,1,2,1),2,2) >layout(m, widths=c(2, 1), heights=c(1, 2)) >layout.show(2)

Fig 2.14. Dos sub-ventanas acomodadas en una matriz de dos por dos con diferentes anchos y alturas

47

Finalmente, los nmeros en la matriz pueden ser ceros dando la posibilidad de realizar arreglos complejos. (Ejemplo 2.77)
>m <- matrix(0:3, 2, 2) >layout(m, c(1, 3), c(1, 3)) >layout.show(3)

Fig 2.15. Visualizacin de slo tres sub-ventanas acomodadas en una matriz de cuatro con diferentes anchos y altos

(Ejemplo 2.78)
>m <- matrix(scan(), 5, 5) 1: 0 0 3 3 3 1 1 3 3 3 11: 0 0 3 3 3 0 2 2 0 5 21: 4 2 2 0 5 26: Read 25 items >layout(m) >layout.show(5)

Fig 2.16. Visualizacin de 5 sub-ventanas definidas por un arreglo de nmeros

48

Funciones de graficacin de alto nivel


La tabla a continuacin resume algunas de las funciones grficas en R.
Graficar los valores de x (en el eje y) ordenados en el eje x Grfico bivariado de x (en el eje x) y y (en el eje y) Igual a plot() pero los puntos con coordenadas similares se dibujan como flores con el nmero de ptalos igual al nmero de puntos pie (x) Grfico circular tipo pie boxplot(x) Grfico tipo box-and-whiskers stripplot(x) Grfico de los valores de x en una lnea (como alternativa a boxplot() para pequeos tamaos de muestra) coplot(xy | z) Grfico bivariado de x y y para cada valor o intervalo de valores de z interaction.plot(f1, Si f1 y f2 son factores, grafica el promedio de y (en el eje y) con f2, y) respecto a los valores de f1 (en el eje x) y de f2 (curvas diferentes); la opcin fun permite escoger un estadstico de y (por defecto, el promedio: fun=mean) matplot(x,y) Grfica bivariada de la primera columna de x vs. la primera columna de y, la segunda columna de x vs. la segunda columna de y, etc. dotplot(x) Si x es un marco de datos, hace un grfico de puntos tipo Cleveland (grficos apilados fila por fila y columna por columna) fourfoldplot(x) Utilizando cuartos de crculos, visualiza la asociacin entre dos variables dicotmicas para diferentes poblaciones (x debe ser un arreglo de dim=c(2, 2, k), o una matriz de dim=c(2, 2) si k = 1) assocplot(x) Grfica amigable de Cohen mostrando desviaciones de independencia de filas y columnas en una tabla de contingencia de dos dimensiones mosaicplot(x) Grfico mosaico de los residuales de una regresin log-lineal de una tabla de contingencia pairs(x) Si x es una matriz o un marco de datos, dibuja todas las posibles grficas divariadas entre las columnas de x plot.ts(x) Si x es un objeto de clase "ts", grafica x con respecto al tiempo. x puede ser multivariada pero las series deben tener la misma frecuencia y fechas ts.plot(x) Igual a la anterior pero si x es multivariado, las series pueden tener diferentes fechas pero la misma frecuencia hist(x) Histograma de las frecuencias de x barplot(x) Histograma de los valores de x qqnorm(x) Cuartiles de x con respecto a lo esperado bajo una distribucin normal qqplot(x, y) Cuartiles de y con respecto a los cuartiles de x contour(x, y,z) Grfico de contornos (los datos son interpolados para dibujar las curvas), x y y deben ser vectores, z debe ser una matriz tal que dim(z)=c(length(x), length(y)) (x y y pueden ser omitidos) frilled.contour(x, Igual al anterior, pero las reas entre contornos estn coloreadas, y se y, z) dibuja una leyenda de colores image(x, y, z) Igual al anterior pero con colores (se grafican los datos crudos) persp(x, y, z) Igual al anterior pero en perspectiva (se grafican los datos crudos) stars(x) Si x es una matriz o un marco de datos, dibuja una grfica con segmentos o una estrella, donde cada fila de x es representada por una estrella, y las columnas son las longitudes de los segmentos symbols(x, y,...) Dibuja, en las coordenadas dadas por x y y, smbolos (crculos, cuadrados, rectngulos, estrellas, termmetros o cajas) cuyos tamaos, colores . . . son especificados con argumentos adicionales termplot(mod.obj) Grfico de los efectos (parciales) de un modelo de regresin (mod.obj) Tabla 2.10. Funciones de graficacin de alto nivel. plot(x) plot(x, y) sunflowerplot(x,y)

49

Las opciones y argumentos para cada una de estas opciones se pueden encontrar en la ayuda incorporada en R. Algunas de estas opciones son idnticas para varias funciones grficas; stas son las principales (con sus valores por defecto):
add=FALSE si es TRUE superpone el grfico en el ya existente (si existe) axes=TRUE si es FALSE no dibuja los ejes ni la caja del grfico type="p" especifica el tipo de grfico; "p": puntos, "l": lneas, "b": puntos conectados por

lneas, .o": igual al anterior, pero las lneas estn sobre los puntos, "h": lneas verticales, "s": escaleras, los datos se representan como la parte superior de las lneas verticales, "S": igual al anterior pero los datos se representan como la parte inferior de las lneas verticales xlim=, ylim= especifica los lmites inferiores y superiores de los ejes; por ejemplo con xlim=c(1, 10) o xlim=range(x) xlab=, ylab= titulos en los ejes; deben ser variables de tipo carcter main= ttulo principal; debe ser de tipo carcter sub= sub-ttulo (escrito en una letra ms pequea).

Funciones de graficacin de bajo nivel


R posee un conjunto de funciones grficas que afectan una grfica ya existente: comandos de graficacin de bajo nivel. Estos son los principales: Agrega puntos (se puede usar la opcin type=) Igual a la anterior pero con lneas Agrega texto dado por labels en las coordenadas (x,y); un uso tpico: Agrega texto dado por text en el margen especificado por side (ver axis() ms abajo);

points(x, y) lines(x, y) text(x, y,labels, ...) plot(x, y,type="n"); text(x, y, names) mtext(text,side=3, line=0,...) Line segments(x0,y0, x1, y1)

Especifica la lnea del rea de graficado Dibuja una lnea desde el punto (x0,y0) hasta el punto (x1,y1) arrows(x0, y0,x1, y1, Igual al anterior pero con flechas desde (x0,y0) si code=2, angle=30, code=2) al punto (x1,y1) si code=1, o en ambos si code=3 angle Controla el ngulo desde la base de la flecha hasta la punta de la misma abline(a,b) dibuja una lnea con pendiente b e intercepto a abline(h=y) Dibuja una lnea horizontal en la ordenada y abline(v=x) Dibuja una lnea vertical en la abcisa x abline(lm.obj) Dibuja la lnea de regresin dada por lm.obj (ver seccin 5) rect(x1, y1,x2, y2) Dibuja un rectngulo donde las esquinas izquierda, derecha, superior e inferior estn dadas por x1, x2, y1, y y2, respectivamente polygon(x, y) Dibuja un polgono uniendo los puntos dados por x y y legend(x, y,legend) Agrega la leyenda en el punto (x,y) con smbolos dados por legend title() agrega un ttulo y opcionalmente un sub-ttulo

50

axis(side,vect) vect (opcional) rug(x) locator(n,type="n", ...)

identify(x,...)

Agrega un eje en la parte inferior (side=1), izquierda (2), superior (3), o derecha (4); Da la abscisa (u ordenada) donde se deben dibujar los marcadores (tick marks) del eje Dibuja los datos x en el eje x como pequeas lneas verticales Devuelve las coordenadas (x,y) despus que el usuario a hecho click n veces en el grfico con el ratn; tambin dibuja smbolos (type="p") o lneas (type="l") con respecto a parmetros grficos opcionales (...); por defecto no se dibuja nada (type="n") Similar a locator() con la diferencia que imprime en la grfica el valor de x (u opcionalmente de una leyenda especificada en la opcin labels=) ms cercano al punto donde se hizo click. Util para identificar puntos en la grfica que estn asociados con nombres.
Tabla 2.11. Funciones de graficacin de bajo nivel.

Note la posibilidad de agregar expresiones matemticas en una grfica con text(x, y,expression(...)), donde la funcin expression transforma su argumento en una ecuacin matemtica. Por ejemplo,
> text(x, y, expression(p == over(1, 1+e-(beta*x+alpha))))

Para incluir una variable en una expresin, se pueden utilizar las funciones substitute y as.expression; por ejemplo para incluir el valor de R2 (calculado anteriormente y guardado en un objeto Rsquared):
> text(x, y, as.expression(substitute(R2==r, list(r=Rsquared))))

se ver en la grfica en el punto con coordenadas (x,y):


R2 = 0,9856298

Para ver solo tres cifras decimales, podemos modificar el cdigo de la siguiente manera:
> text(x, y, as.expression(substitute(R2==r, + list(r=round(Rsquared, 3)))))

que se ver como: R2 = 0,986 Finalmente para escribir la R en cursivas:


> text(x, y, as.expression(substitute(italic(R)2==r, + list(r=round(Rsquared, 3)))))

R2 = 0,986

Parmetros grficos
Adems de la utilizacin de comandos de graficacin de bajo nivel, la presentacin de grficos se puede mejorar con parmetros grficos adicionales. Estos se pueden utilizar como opciones de funciones grficas (pero no funciona para todas), o usando la funcin par para cambiar de manera permanente parmetros grficos; es decir grficas subsecuentes

51

se dibujarn con respecto a los parmetros especificados por el usuario. Por ejemplo, el siguiente comando:
> par(bg="yellow")

Dar como resultado que todos los grficos subsecuentes sern amarillos. (Ejemplo 2.79)
x<-c(0:20) y<-3*x+2 plot(y)

10

20

30

40

50

60

10 Index

15

20

Fig 2.17. Grfica obtenida por defalult. par(bg="yellow",fg="blue") plot(y)

10

20

30

40

50

60

10 Index

15

20

Fig 2.17. Grfica obtenida por medio la de aplicacin de la opcin bg y fg de la funcin par().

Existen 68 parmetros grficos y algunos tienen funciones muy similares. La lista completa de parmetros grficos se puede ver con ?par; en la siguiente tabla ilustramos solo los ms usados.

52

adj

controla la justificacin del texto (0 justificado a la izquierda, 0.5 centrado, 1 justificado a la derecha) bg especifica el color del fondo (ej. : bg=red", bg=blue", . . . La lista de los 657 colores disponibles se puede ver con colors()) bty controla el tipo de caja que se dibuja alrededor del grfico: o", "l", "7", c", u" o "]" (la caja se parece a su respectivo caracater); si bty="n" no se dibuja la caja cex un valor que controla el tamao del texto y smbolos con respecto al valor por defecto; los siguientes parmetros tienen el mismo control para nmeros en los ejes, cex.axis, ttulos en los ejes, cex.lab, el ttulo principal, cex.main, y el subttulo, cex.sub col controla el color de los smbolos; como en cex estos son: col.axis, col.lab, col.main y col.sub font un entero que controla el estilo del texto (1: normal, 2: cursiva, 3: negrilla, 4: negrilla cursiva); como en cex existen: font.axis, font.lab, font.main y font.sub las un entero que controla la orientacin de los caracteres en los ejes (0: paralelo a los ejes, 1: horizontal, 2: perpendicular a los ejes, 3: vertical) lty un entero o caracter que controla el tipo de las lneas; (1: slida, 2: quebrada, 3: punteada, 4: punto lnea, 5: lnea larga-corta, 6: dos lneas cortas), o una secuencia de hasta 8 caracteres (entre "0" y "9") que especifica alternativamente la longitud en puntos o pixeles, de los elementos dibujados y los blancos; por ejemplo lty="44" tendr el mismo efecto que lty=2 lwd un nmero que controla la anchura de las lneas mar un vector con 4 valores numricos que controla el espacio entre los ejes y el borde de la grfica en la forma c(inferior, izquierda, superior, derecha); los valores por defecto son c(5.1, 1.3.6, 1.3.6, 2.1) mfcol un vector del tipo c(nr,nc) que divide la ventana grfica como una matriz con nr filas y nc columnas;las grficas se dibujan sucesivamente en las columnas mfrow igual al anterior, pero las grficas se dibujan en las filas pch controla el tipo de smbolo, ya sea un entero entre 1 y 25, o un caracter entre" ps un entero que controla el tamao (en puntos) de textos y smbolos pty un caracter que especifica el tipo de regin a graficar, "s": cuadrada, "m": mxima tck un valor que especifica la longitud de los marcadores de eje como una fraccin de la altura o anchura mxima del grfico; si tck=1 se dibuja una rejilla tcl un valor que especifica la longitud de los marcadores de eje como una fraccin de la altura de una lnea de texto (por defecto tcl=-0.5) xaxt si xaxt="n" el eje x se coloca pero no se muestra (til en conjuncin con axis(side=1, ...)) yaxt Si yaxt="n" el eje y se coloca pero no se muestra (til en conjuncin con axis(side=2, ...))
Tabla 2.11. Parmetros de graficacin de la funcin par().

53

Ejemplos simples de grficos con datos reales: (Ejemplo 2.80)


> archivo<-file.choose()#Abrir ventana para eleccin de archivo > datos<-read.table(archivo,header=TRUE)#Leer archivo y asignarlo a un data frame > datos#Visualizacin de datos Pliza MC RA Agente Gerenciacod 1 2.007e+10 529793.75 6123.05 31027 2 2 2.007e+10 251669.02 6958.77 25934 1 3 2.007e+10 520751.15 4322.15 31019 3 4 2.007e+10 531458.72 22367.92 5013 4 . . . >MC<-datos[,2]#Asignando la columna MC (Monto constitutivo) a un vector MC > gerencia<-datos[,5]#Asignando la columna gerencia a un vector gerencia > par(bg="yellow",col="red",las=2,font=3,fg="red",lwd=2)#Ejemplo de funcin par() > hist(gerencia)#Muestra la grfica de frecuencias de los datos par(col.axis="red",col.lab="purple",las=2,font=3,fg="blue",lwd=1)#Ejemplo de uso de la funcin par() > hist(gerencia)#Muestra la grfica de frecuencias de los datos > m <- matrix(c(1:2),2,2) > layout(m, widths=c(2, 1),heights=c(1, 2))

Histogram of gerencia
Frequency 35 30 25 20 15 10 5 0 0 2 4 6 8 8

gerencia

Histogram of gerencia
35 30 25 Frequency 20 15 10 5 0 0 2 4 6

gerencia

Fig 2.19. Grfica obtenida utilizando algunos parmetros de la funcin par() y mostradas en una matriz de una columna y dos renglones mediante la funcin layout().

54

Referencias utilizadas en este captulo

1) 2) 3) 4) 5) 6)

http://www.r-project.org/ Pgina oficial de R. http://cran.r-project.org/doc/FAQ/R-FAQ.html FAQ de R (Sitio de preguntas ms frecuentes) R para Principiantes,Emmanuel Paradis,Institut des Sciences de lEvolution, Universit Montpellier II, F-34095 Montpellier cdex 05, France Using R for Data Analysis and Graphics: Introduction, Code and Commentary, J H Maindonald, Centre for Bioinformation Science,Australian National University. J. H. Maindonald 2000, 2004. Grficos Estadsticos con R, Juan Carlos Correa y Nelfi Gonzlez, Posgrado en Estadstica, Universidad Nacional-Sede Medelln, 2002. http://cm.bell-labs.com/cm/ms/departments/sia/S/history.html Historia del desarrollo del lenguaje S.

55

3. Estadstica Descriptiva y Anlisis Grfico de datos Multivariados

Cuando colectamos datos de alguna poblacin en particular, por lo general buscamos conocer ciertas caractersticas particulares de esta poblacin. El anlisis descriptivo es el primer acercamiento que tenemos con los datos, nos ayuda a conocer el comportamiento de estos y nos proporciona la perspectiva inicial que sustentar nuestro anlisis. Por ejemplo, cuando decimos que una poblacin tiene un comportamiento normal; en el sentido de que su distribucin terica se aproxima a la distribucin normal de Gauss. Para poder hacer una afirmacin de tal magnitud, es necesario hacer un exhaustivo anlisis estadstico y asumir que esta distribucin terica explica en gran medida los datos que se tienen de la poblacin. Existen dos aproximaciones complementarias entre s: el anlisis descriptivo y el anlisis exploratorio. Dadas n observaciones X1,X2,,Xn, consideremos que estas provienen de una muestra con una distribucin particular. En el anlisis descriptivo, se realizan estimaciones de la localizacin, variacin y forma de la distribucin. El anlisis exploratorio de datos consiste en examinar el conjunto de datos mediante grficas que nos permitirn visualizar comportamientos que nos sern tiles para realizar posteriormente un anlisis ms profundo.

3.1. Estadstica descriptiva


Puede definirse la estadstica descriptiva como aquellos mtodos que incluyen la recoleccin, presentacin y caracterizacin de un conjunto de datos con el fin de describir apropiadamente las diversas caractersticas de ese conjunto.

56

3.1.1.

Medidas descriptivas

Medidas de tendencia central


Las medidas de tendencia central proporcionan una indicacin del centro de la poblacin. Por eso tambin nos podemos referir a ellas como medidas de localizacin, ya que nos ayudan a ubicar a la poblacin. Estimar los centros de la poblacin es muy til para determinar el valor esperado de la muestra, o a qu valor (en promedio) sta tiende.

a)

Media:

La media es la medida de tendencia central ms comn. Dada una muestra X1,X2,,Xn, la media aritmtica X es simplemente el promedio aritmtico de las observaciones.

X=

1 n Xi n i =1

A la media aritmtica la podemos entender como el estimador insesgado de la media de la poblacin. Esto quiere decir que si la distribucin terica tiene una media , entonces el valor esperado de X es igual a , por lo tanto, la media muestral proporciona un estimador insesgado de la verdadera media. Comando en R: >mean(data.example) (Ejemplo 3.1)
#tomar base de datos: Base3.1.txt > archivo<-file.choose()#Abrir ventana para eleccin de archivo > datos<-read.table(archivo,header=TRUE)#Leer archivo y asignarlo a un data frame >MC<-datos[,2] #Asignando la columna MC (Monto constitutivo) a un vector MC > mean(MC) [1] 612871.4

Aunque la media es la medida con los ms elevados rigores tericos, es muy sensible a la presencia de outliers; en consecuencia, se utiliza en conjunto con estimadores ms robustos que no sean tan susceptibles a los datos raros.

b)

Media Truncada*

Esta medida central robusta se obtiene luego de ordenar la muestra en orden ascendente, si sabemos que existe un porcentaje de observaciones prximas a valores extremos, los eliminamos de los dems y luego calculamos la media. As, la media truncada es una mejor aproximacin al valor central de las observaciones, especialmente cuando hay outliers presentes.

57

Comando en R: >mean(Datos,trim=0.2) Este comando calcula la media truncada en un 20% (Ejemplo 3.2)
> mean(MC,trim=0.15)#Calcula la media truncada al 15% [1] 506265

c)

Mediana

La mediana se calcula de la siguiente manera: Dada una muestra de n datos, se ordenan en forma ascendente, si n es impar, la mediana ser definida por el valor central, de lo contrario se obtiene calculando el promedio de las dos observaciones centrales La mediana es una medida central robusta ya que no es afectada por la presencia de outliers. Comando en R: >median(Datos) (Ejemplo 3.3)
> median(MC) [1] 490250.1

d)

Moda

La moda redefine como el valor que se present con mayor frecuencia en la muestra. Grficamente, se ubica como el mximo del histograma. Para las distribuciones simtricas, este estadstico es un buen estimador del centro de la distribucin, mientras que para las distribuciones con sesgo indica hacia si la distribucin se encuentra cargada hacia los valores ms altos o mas bajos del rango. En R no existe un comando prediseado para calcular la moda pero podemos calcularla de la siguiente manera: Primero hay que obtener la tabla de frecuencias, esto se logra por medio de la funcin table(), luego creamos matrices unidimensionales con los valores de la tabla de frecuencias y de los nombres de la tabla, las unimos por columnas y luego con la funcin match(). Cdigo en R:
> + + + + + + > Moda<-function(x){ tab<-table(x) mtab<-matrix(tab) ntab<-matrix(names(tab)) otab<-cbind(ntab,mtab) a<-match(max(tab),tab) return(otab[a,])}

58

Ya teniendo la rutina podemos crear una funcin para obtener la moda: (Ejemplo 3.4)
> tab<-table(gerencia) > tab gerencia 0 1 2 3 4 5 6 7 8 15 21 13 12 24 10 8 14 9 > mtab<-matrix(tab) > ntab<-matrix(names(tab)) > otab<-cbind(ntab,mtab) > a<-match(max(tab),tab) > moda<-otab[a,] > moda [1] "4" "24" >

Medidas de dispersin
Las medidas de dispersin indican la variabilidad o desviacin en una coleccin de datos. Es por esto que los estadsticos de dispersin son tambin conocidos como medidas de escala. Muchas de estas estadsticas estn basadas en promedios de la distancia de cada observacin al centro del conjunto de datos, es por esto que estn directamente relacionadas con las medidas de tendencia central.

a)

Rango

El rango es la medida de dispersin ms simple y natural que existe, se obtiene al calcular la diferencia entre el dato mayor y el menor. Comando en R: >range(Datos) (Ejemplo 3.5)
> range(MC) [1] 40079.71 2754407.88 > range(gerencia) [1] 0 8

b)

Varianza y desviacin estndar

La varianza de una muestra es el valor en promedio de las distancias al cuadrado entre la media y cada elemento de la poblacin. Al elevar al cuadrado esas distancias, logramos que todos los nmeros que aparecen sean positivos y al mismo tiempo asignamos mas peso a las desviaciones ms grandes. Dada una muestra X1,X2,,Xn, representamos el clculo de la varianza de la siguiente manera:

59

s2 =

1 n ( X i X )2 n 1 i =1

La desviacin estndar es la raz cuadrada de la varianza. Por ser la desviacin cuadrada promedio, se esperara que la suma de las distancias al cuadrado s 2 se dividieran entre n , calculada como se presenta arriba es un estimador insesgado de la varianza muestral ya que si el divisor fuera n o, tendramos una estimacin con sesgo. Entonces, si el valor esperado de s 2 es 2 entonces la varianza muestral proporciona un estimador insesgado de la varianza terica, en otras palabras es igual a la varianza. Al igual que la media muestral, la varianza muestral es muy sensible a los outliers. Por lo tanto, es recomendable utilizarla en conjunto con medidas de dispersin ms robustas. (Ejemplo 3.6)
> var(MC) [1] 256388046100

c)

MAD (Mediana de la Desviacin Absoluta)

Dada una muestra X1,X2,,Xn, la Mediana de las Desviaciones Absolutas (MAD) es la mediana de las distancias de cada de una de las observaciones X i al centro. Por ejemplo, si consideramos que el centro de la poblacin es X , la MAD es definida como la mediana de los valores X i X . Si consideramos que el centro de la poblacin es la mediana M , entonces la MAD ser la mediana de los valores X i M . Ejemplo:
>mad(Datos,center=mean(Datos))

(Ejemplo 3.7)

d)

Rango Intercuartil

Dada una coleccin de puntos X1,X2,,Xn, el Rango Intercuartil (IQR) es la diferencia entre el mayor y el menor (tercer y primer) cuartiles de la muestra. El IQR es la herramienta visual utilizada en las grficas de caja para mostrar el spread de una muestra con respecto a su mediana. Cdigo en R:
>iqr<-function(x) diff(quantile(x,c(0.25,0.75)))

60

(Ejemplo 3.8)
> #Rango intercuartil > iqr<-function(x) diff(quantile(x,c(0.25,0.75))) > iqr(MC) 75% 204185.6 >

Medidas de forma de la distribucin


Estas medidas describen los patrones complementarios en la distribucin de los valores de los datos. Los que ms frecuentemente se utilizan son la simetra y la kurtosis.

a)

Simetra

La simetra se obtiene a partir del tercer momento central de la distribucin de los datos y muestra si los datos se distribuyen igual de ambos lados de la media. En R no existe ninguna funcin que la calcule directamente, es necesario expresar el cdigo. (Ejemplo 3.9)

En el cdigo anterior expresamos el clculo del factor de simetra a partir del tercer momento central, primero obtenemos la media y luego se la restamos a cada una de las componentes del vector que constituye el objeto de estudio, elevamos el resultado de cada uno de los clculos anteriores al cubo y obtenemos la esperanza, luego dividimos este resultado entre la media al cubo y obtenemos el coeficiente de simetra, luego le aplicamos la funcin que creamos

b)

Kurtosis

La kurtosis se calcula a partir del cuarto momento central de los datos y mide el grado de picudez de la funcin, esto nos proporcionar informacin de cun alejados se encuentran los datos de la media. Del mismo modo que para la simetra, no existe ninguna funcin en R para realizar el clculo de la kurtosis a partir de un conjunto de datos, por lo tanto, es necesario escribir el cdigo.

61

(Ejemplo 3.10)

La funcin para obtener el coeficiente de kurtosis se calcula del mismo modo que la calculada para simetra.

3.1.2.

Matrices de correlacin

La matriz de correlacin muestra el grado de dependencia lineal que tienen las variables que conforman nuestras observaciones; es una matriz cuadrada que se construye con los coeficientes de correlacin ij de la siguiente manera:

11 21
...

12 ... 1n 22 ... 2 n
...

n1

n2

... ... ... nn

Es de gran utilidad ya que con ella podemos distinguir si podemos aplicar ciertas tcnicas estadsticas sobre los datos que analizamos como la regresin, entre otras. Para calcular la matriz de correlacin en R utilizaremos el comando: cor()

(Ejemplo 3.11)

62

3.1.3.

Diagrama de dispersin y matriz de dispersin

El diagrama de dispersin es una grfica que representa la relacin de correspondencia entre las variables que se relacionan entre s para un dato. Esta grfica muestra una coleccin de puntos (x=i,y=j) tales que cada punto es una observacin o dato cuya caracterstica x tiene valor i y su caracterstica y tiene valor j. En R podemos realizar esta grfica de la siguiente manera: (Ejemplo 3.12)

0 0

20000

40000

60000

MA

80000

100000

500000

1000000

1500000 MC

2000000

2500000

Fig. 3.1. Diagrama de dispersin entre dos variables

Una matriz de dispersin es el conjunto de diagramas de dispersin de las variables que conforman una base de datos ordenadas en un arreglo. La funcin que utiliza R para generar matrices de dispersin, al igual que en el caso anterior es plot(). A continuacin mostramos un ejemplo con la base de datos 3.1. (Ejemplo 3.13)

63

Matriz de dispersin de info plizas


2.007e+10 0 1500000 0 20000 50000

Pliza
2.007e+10 1500000

MC

RA
30000 60000

Agente

Gerenciacod

2.007e+10

2.007e+10

0 40000

120000

Fig. 3.2. Diagrama de dispersin de todas las variables

3.1.4.

Tablas de frecuencia

Las tablas de frecuencia sirven para organizar los datos y obtener informacin preliminar. A partir de ellas podemos construir la distribucin emprica de los datos, es aqu donde radica su importancia. En R las tablas de frecuencia se construyen con la funcin table().

(Ejemplo 3.14)

60000

64

3.1.5.

Grficos

Grficas descriptivas
Las grficas son un elemento auxiliar en el anlisis estadstico de gran valor ya que muestran de forma clara cmo se distribuyen los datos. Cuando los datos dependen de ms de dos variables, el uso de grficos comienza a resultar poco prctico, ya que es imposible para nosotros visualizarlos. A continuacin mostraremos los grficos estadsticos ms representativos:

a)

Grfico de cajas:

Grfica inventada por John Tukey en 1977, es una conveniente forma de representar las cinco estadsticas sumarias: la observacin ms pequea, el primer cuartil ( Q1 ), la mediana el tercer cuartil ( Q3 ) y la observacin con el mayor valor. Adems, muestra si alguna observacin presenta valores inusuales (outliers). En R se construye con el comando boxplot() de la siguiente manera: (Ejemplo 3.15)

Monto Constitutivo
2500000

Fig 3.3. Grfico de cajas para la variable Monto Constitutivo

500000

1500000

65

b)

Grfico de barras:

Un grfico de barras es aquella representacin grfica bidimensional en que los objetos grficos elementales son un conjunto de rectngulos dispuestos paralelamente de manera que la extensin de los mismos es proporcional a la magnitud que se quiere representar. Los rectngulos o barras pueden estar colocados horizontal o verticalmente. En ste ltimo caso reciben tambin el nombre de grficos de columnas. En R, un grfico de barras se programa de la siguiente manera con las funciones ya vistas en el captulo 1. (Ejemplo 3.16)
> Invalidez<-datos1[,1] > par(bg="yellow",fg="blue",las=3) > barplot(Invalidez,main="Pensionados por Invalidez por estado al 2006",names.arg=c("Aguascalientes","BajaCalifornia","BajaCaliforniaSur","Ca mpeche","Coahuila","Colima","Chiapas","Chihuahua","DistritoFederal","Durang o","Guanajuato","Guerrero","Hidalgo","Jalisco","Mexico","Michoacan","Morelo s","Nayarit","NuevoLeon","Oaxaca","Puebla","Queretaro","QuintanaRoo","SanLu isPotosi","Sinaloa","Sonora","Tabasco","Tamaulipas","Tlaxcala","Veracruz"," Yucatn","Zacatecas"),col="blue") >

Fig 3.4. Grfico de barras de pensionados por invalidez por cada estado de la repblica

c)

Grfico de pie:

El grfico de pie se usa con datos cualitativos o cuantitativos. A travs de una regla de tres, un crculo se divide en sectores.

gradosi = fri 360

66

Cada rebanada representa la proporcin de datos contenidos en una clase de la tabla de frecuencia. (Ejemplo 3.17)
> Invalidez1<-datos1[1:10,1] > par(bg="pink") > pie(Invalidez1,main="Pensionados por Invalidez por estado al 2006",labels=c("Aguascalientes","BajaCalifornia","BajaCaliforniaSur","Campe che","Coahuila","Colima","Chiapas","Chihuahua","DistritoFederal","Durango") ,col=rainbow(10)) >

Pensionados por Invalidez por estado al 2006

Coahuila

Campeche BajaCaliforniaSur BajaCalifornia

Colima Chiapas

Aguascalientes Chihuahua Durango

DistritoFederal

Fig 3.4. Grfico de pie de pensionados por invalidez por los 10 primeros estados de la repblica ordenados alfabticamente

3.2.

Anlisis Grfico Multivariado

El anlisis multivariado est basado en los principios de la Estadstica multivariada, la cul considera la observacin y el anlisis de ms de una variable al mismo tiempo. Estas tcnicas de anlisis son muy utilizadas en los estudios de mercado ya que en dichos estudios se toman en cuenta los efectos de todas las variables sobre las respuestas de inters.

67

Debido a la imposibilidad de graficar directamente las observaciones cuando se quiere tomar en cuenta ms de tres variables, se han desarrollado diversas tcnicas para visualizar observaciones con ms de tres variables, con ayuda de los software estadsticos incluso se puede mostrar alrededor de 20 variables distintas por observacin, esto nos ayudar a obtener informacin para entender el grupo de observaciones. A continuacin, veremos las tcnicas ms utilizadas: Caras de Chernoff Diagrama de Estrellas Curvas de Andrews

3.2.1.

Caras de Chernoff

Grfica que muestra datos multivariados en forma de caras humanas. Los rasgos caractersticos individuales como los ojos, la boca, la nariz representan valores de las variables a travs de su forma, tamao, lugar en la cara donde se encuentran ubicados y orientacin. La idea que sustenta este tipo de representacin grfica es la facilidad con que el observador reconocer cualquier variacin por imperceptible que parezca. Ya que los rasgos de la cara cambian muy considerablemente, se debe escoger cuidadosamente la forma en que se grafican los rasgos. (librera aplpack) Ver anexo 1: Instalacin de libreras. (Ejemplo 3.18)

Pensionados de Mxico
Aguascalientes BajaCalifornia BajaCaliforniaSur Campeche Coahuila Colima

Chiapas

Chihuahua

DistritoFederal

Durango

Guanajuato

Guerrero

Hidalgo

Jalisco

Mexico

Michoacan

Morelos

Nayarit

NuevoLeon

Oaxaca

Puebla

Queretaro

QuintanaRoo

SanLuisPotosi

Sinaloa

Sonora

Tabasco

Tamaulipas

Tlaxcala

Veracruz

Yucatn

Zacatecas

Fig 3.6. Diagrama de Caras de Chernoff de los datos de Pensionados de Mxico.

68

3.2.2

Diagrama de Estrellas

Esta grfica es una representacin iconogrfica de los datos en la que cada representa una observacin y cada rayo de la estrella representa a una variable de sta. Los rayos de la estrella estn conectados mediante una lnea. (Ejemplo 3.19)

Grfico de estrellas Pensionados

Aguascalientes

BajaCalifornia Campeche BajaCaliforniaSur

Coahuila

Colima

Chihuahua Chiapas DistritoFederal

Durango Guanajuato

Guerrero

Hidalgo

Jalisco

Mexico

Michoacan

Morelos

Nayarit

NuevoLeon

Oaxaca

Puebla

Queretaro

QuintanaRoo

SanLuisPotosi

Sonora Sinaloa Tabasco

Tamaulipas Tlaxcala

Veracruz

Yucatn

Zacatecas

Fig 3.7. Diagrama de Estrellas de los datos de Pensionados de Mxico.

69

3.2.2.

Curvas de Andrews

Grfica en la cual los individuos de la muestra se encuentran representados por curvas, en dos dimensiones. Estas curvas se construyen para una observacin X = ( x1 , x 2 ,...x n ) a partir de la frmula:

f x (t ) =

x1 2

+ x 2 sen(t ) + x3 cos(t ) + x 4 sen(2t ) + x5 sen(2t ) + ...

Por lo tanto, la curva que representa la media de la poblacin es :

f (t ) =

1
2

+ 2 sen(t ) + 3 cos(t ) + 4 sen(2t ) + 5 sen(2t ) + ...

Esta grfica proporciona una escala de las proyecciones unidimensionales de la muestra. Sabemos que

a0 a0

representa un punto en una esfera n dimensional de radio unitario, por

lo tanto, esperaramos que en la manera de lo posible, muchos de estos puntos estuvieran dentro del rango , . Andrews demostr en 1972 que se poda alcanzar una mejor 2 cobertura usando funciones ms complejas en t 0 pero a costa de tener una curva con ms giros. Esta representacin preserva la varianza, pero si los componentes no son correlacionados, la varianza se reduce a la constante largo de la grfica.

1 d 2 . Esto implica que la varianza ser constante a lo 2

Como no existe una funcin para hacer grficos de curvas de Andrews en R es necesario hacer un cdigo para eso. Este Cdigo declara la funcin andrews.curves() y ser de mayor utilidad ya que lo podemos utilizar en cualquier momento y su aplicacin es ms general:
> andrews.curves <- function(xdf, cls, npts=101, title="Classes") { + n <- nrow(xdf) + clss <- as.factor(cls) + xpts <- seq(0, 2*pi, length=npts) + X <- xpts + for (i in 1:n) { + xi <- unname(unlist(xdf[i, ])) + ys <- andrews.function(xi, npts) + X <- cbind(X, ys) + } + ymin <- min(X[, 2:(n+1)]) + ymax <- max(X[, 2:(n+1)]) + plot(0, 0, type="n", xlim=c(0, 2*pi), ylim=c(ymin, ymax), + main="Andrews' Curves", xlab="", ylab="") + + clrs <- as.integer(clss) + for (i in 2:(n+1)) { + lines(X[, 1], X[, i], col=clrs[i-1])

70

+ } + legend(4, ymax, levels(clss), col=c(1:nlevels(clss)), lty=1) + # return(X) + } > > andrews.function <- function (xs, no.pts=101) { + n <- length(xs) + xpts <- seq(0, 2*pi, length=no.pts) + ypts <- c() + for (p in xpts) { + y <- xs[1] + for (i in 2:n) { + if (i %% 2 == 1) { y <- y + xs[i]*sin((i %/% 2)*p) } + else { y <- y + xs[i]*cos((i %/% 2)*p) } + } + ypts <- c(ypts, y) + } + return(ypts) + } > andrews.curves(datos1,c(1,2,3,4,5),npts=32,title="Tipos Pensin")

Andrews' Curves
2000

-1000

1000

1 2 3 4 5

Fig 3.8. Diagrama de Curvas de Andrews de los datos de Pensionados de Mxico.

71

Referencias utilizadas en este captulo


1) 2 2) 3) 4) 5) http://addictedtor.free.fr/graphiques/sources/source_47.R Curvas de Andrews

http://cran.r-project.org/doc/contrib/grafi3.pdf Curvas de Andrews 2 http://tolstoy.newcastle.edu.au/R/help/04/10/5185.html Chernoff faces http://addictedtor.free.fr/graphiques/graphcode.php?graph=87 Chernoff faces FAQ in R

72

4. Regresin lineal

La regresin es una herramienta para explorar las relaciones entre variables. La regresin lineal, en particular, explora relaciones que son fcilmente descritas por una lnea recta. Una cantidad sorprendente de problemas pueden ser analizados utilizando tcnicas de regresin lineal y muchos mas an se pueden resolver por medio de transformaciones de las variables originales que tienen como resultado relaciones lineales entre las variables transformadas. Este captulo describe la regresin en el caso univariado para variables continuas. Comenzamos con la regresin simple que es la regresin con una sola variable predictora: se estimar el modelo, se examinarn los modelos estimados y los residuales. Luego examinaremos el caso de la regresin lineal mltiple variando los modelos aadiendo o retirando variables segn convenga y finalmente, analizaremos los modelos estimados.

4.1 Regresin simple


La regresin simple utiliza el mtodo de mnimos cuadrados para estimar una respuesta univariada como una funcin lineal de una sola variable predictora. En el mtodo de mnimos cuadrados, estimamos una lnea a partir de los datos minimizando la suma de los residuales cuadrados. Dado un conjunto de n observaciones y i de la variable dependiente correspondientes al conjunto de los valores xi de la variable predictora y a un modelo

( x) , el i -simo residual es definido como la diferencia entre la i -sima = f arbitrario y


( x ) , que es, ri=yi-y*i. i = f observacin y i y el valor estimado y i
Para correr un regresin simple en R se ocupa la funcin lm() (modelo lineal) con este comando se vinculan la variable de respuesta y la predictora. En muchos casos, la variable dependiente y la predictora son componentes de una matriz de datos. Por ejemplo, considerando los siguientes datos:

73

Fig. 4.1. Datos correspondientes al monto constitutivo de una pensin bsica y el de la renta de 11% que le corresponde.

Un grfico de dispersin de estos datos se muestra a continuacin:

0 0

20000

40000

60000

RA

80000 100000

500000

1000000 1500000 2000000 2500000 MC

Fig. 4.2. Grfico de dispersin del Monto Constitutivo de la pensin bsica contra el de la renta adicional de 11%.

74

Del diagrama de dispersin podemos inferir una relacin lineal entre el monto constitutivo para una pensin bsica (MC) y el correspondiente a la renta adicional de 11% (RA). Elegiremos RA como la variable dependiente y MC como la predictora. La eleccin de la variable dependiente y la independiente se deriva de la manera en que los datos se originan, ms que por consideraciones estadsticas. Para estimar el modelo, usamos lm() como sigue: (Ejemplo 4.1)

El primer argumento, RA~MC es la frmula que especifica que la variable RA es modelada como una funcin de MC. El segundo argumento, especifica que los datos para el modelo lineal estn contenidos en el marco de datos datos. La funcin summary se utiliza para obtener un resumen del modelo estimado. (Ejemplo 4.2)

La columna Estimate bajo Coefficients proporciona los coeficientes del modelo lineal, permitiendo interpretar la lnea de regresin estimada como sigue:

RA = 2.565e + 03 + 1.68e 02 MC
La R 2 (Multiple R-Squared) nos dice que el modelo explica alrededor de 0.3289 de la variacin en RA . El estadstico F (F-statistic) es el cociente de la media cuadrada de la regresin sobre la varianza estimada, si no hay relacin entre el Monto Constitutivo de la pensin bsica y el la Renta Adicional de 11% entonces es muy cercano a 0, esta razn tiene una distribucin F con 1 y 124 grados de libertad. La razn aqu es claramente significante entonces la verdadera inclinacin de la recta de regresin muy probablemente no es 0.

75

Grficos diagnsticos para modelos lineales.

Qu tan bueno es el modelo que estimamos? Podemos predecir el monto constitutivo de la renta adicional de 11% con el monto constitutivo de la pensin bsica?, Podemos hacerlo mejor?. Estas preguntas son comunes cuando tratamos de explicar datos mediante un modelo estadstico. No slo basta con estimar el modelo, es necesario evaluar qu tan bien se ajusta el modelo a los datos, tomando en cuenta de que en caso de que el modelo no se ajustara adecuadamente habra que modificarlo o, en el peor de los casos, abandonarlo. El mtodo ms simple y que provee mayor informacin para examinar el ajuste es observar el modelo en grficos. Tomando un conjunto de grficos que, en su totalidad, revelen las fortalezas y debilidades del modelo. El mtodo plot() para un modelo lineal en R proporciona los siguientes grficos: (Ejemplo 4.3)

Residuals vs Fitted
40000
107

Normal Q-Q
Standardized residuals 6
78 107

78

Residuals

-40000

72

-2
72

10000

30000 Fitted values

50000

-2

-1

Theoretical Quantiles

Scale-Location
Standardized residuals Standardized residuals
78

Residuals vs Leverage
6
78 107 1 0.5

2.0

107 72

1.0

-2

0.0

10000

30000 Fitted values

50000

-4

Cook's distance 0.00 0.05 0.10

72

0.5 1

0.15

Leverage

Fig. 4.3. Grficos que proporciona por default el mtodo plot() aplicado a un modelo lineal.

1) Grfico de residuales contra ajuste Este grfico compara la dispersin de los valores estimados contra los valores reales Si el modelo es un intento de explicar la

76

variacin en los datos, se debe esperar que la variacin sea mucho mayor que en los residuales. 2) Grfico de normalidad de residuales (Q-Q): Este grfico provee una prueba visual de la hiptesis de que los errores se distribuyen con una normal (0,1) . Si los residuales ordenados de menor a mayor quedan superpuestos a la recta cuantil-cuantil, entonces tenemos una fuerte evidencia de que se los errores, en efecto, tienen una distribucin normal. 3) Raz cuadrada del valor absoluto de los residuos contra los valores estimados: este grfico es til para identificar outliers y visualizar la estructura de los residuales. 4) Residuales vs Leverage: El contorno que dibujan los residuales es igual en magnitud a las lneas que cruzan el orgen. La grfica que muestra el ajuste de la recta estimada no se puede calcular con este comando pero podemos obtenerla fcilmente de la siguiente manera: (Ejemplo 4.4)

Grfico observaciones - recta estimada

0 0

20000

40000

60000

RA

80000 100000

500000

1000000 1500000 2000000 2500000 MC

Fig. 4.4. Grficos que muestra el ajuste de la recta estimada a los datos.

77

4.2. Regresin mltiple.


Se pueden construir modelos lineales involucrando muchas variables predictoras del mismo modo que si se involucrara una. En general, cada predictor representa un componente de la frmula del modelo. Cuando utilizamos datos multivariados, generalmente visualizamos las relaciones qiue tienen entre s, as como la relacin que mantienen con la variable dependiente mediante matrices de dispersin, obtenidas con la funcin pairs() de la siguiente manera: (Ejemplo 4.5)
> pairs(datos2.1,main="Diagrama Permanente") > de dispersin Invalidez\nIncapacidad

Diagrama de dispersin Unin Europea


2000 4000 2600 3400 1500 3500 22000 Total 14000 5000 Importacion 2000 Gastoscfgob 2600 3400 Gastoscfpriv FBCF 1500 3500 Exportacion 14000 22000 8000 14000 2500 4000

Fig. 4.5. Matriz de dispersin.

Con la funcin lm() obtenemos una funcin lineal con 5 predictores. (Ejemplo 4.6)

2500

4000

8000

14000

78

(Ejemplo 4.7)

Cuando la variable respuesta es la primera variable del marco de datos ordenada por columnas, entonces podemos ocupar el comando lm() de la siguiente manera: (Ejemplo 4.8)

Revisaremos primero los grficos que R obtiene por default para evaluar el modelo (Ejemplo 4.9)

79

50

Residuals

-50 0

-150

72

-3 -2 -1

57

Standardized residuals

Residuals vs Fitted
84

Normal Q-Q
84 57

72

14000

18000 Fitted values

22000

-2

-1

Theoretical Quantiles

Standardized residuals

Standardized residuals

72

Scale-Location
1.5
57 84

Residuals vs Leverage
84

1.0

0.5

-2

1 2

92

0.0

-4

Cook's distance 72 0.00 0.05 0.10 0.15

0.5

14000

18000 Fitted values

22000

Leverage

Fig. 4.6. Grficos obtenidos por default por R para el modelo ajustado.

Con la lnea de los cuantiles podemos ver que los residuales estandarizados se distribuyen como una normal (0,1) lo que da soporte al modelo. La R 2 mltiple y el estadstico F tambin apoyan el modelo, puesto que la R 2 es de ms del 99% y el estadstico F indica que el modelo es significativamente distinto de cero. Por otro lado, los estadsticos T para cada coeficiente indican que todas las variables contribuyen explicativamente al modelo. Cuando existen variables que no explican de manera significativa, se retiran para obtener un modelo lo ms simple posible a partir de las variables que nos proporcionen mejores parmetros de verificacin. Para seleccionar un modelo que involucre pocos trminos se ocupan los comandos add1 y drop1, aunque son un poco tediosos si se realizan muchas veces. La funcin step provee un mtodo que automticamente selecciona las variables con el modo stepwise (gradual). El comando drop1 elimina el trmino que no sea significativo en el modelo. Su argumento debe ser forzosamente un modelo lnea como se puede ver en el ejemplo: (Ejemplo 4.10)

80

La funcin add1() tiene dos argumentos, el primero es el modelo lineal que estamos analizando, el segundo es el rango o los trminos por los que podemos optar para aadir al modelo. En la frmula no es necesario meter la variable respuesta pues debe ser la misma que en el modelo original. Para poder ver mejor como funciona este comando ocuparemos el siguiente modelo modificado: (Ejemplo 4.11)

El objeto arrojado por la funcin add1 es una tabla ANOVA como la que arroja drop1 y muestra las diferencias cuadradas debidas al trmino que ingresa. La suma de cuadrados de los residuales del nuevo modelo, as como el AIC modificado. Cada rengln de la tabla ANOVA representa los efectos que tiene el trmino al que hace referencia sobre el modelo base. En general, es mejor aadir un trmino si el AIC para ese trmino es menor que los de la tabla, incluyendo el AIC del modelo. Incluir o sacar variables es un mtodo muy til para elegir un modelo cuando se tiene un nmero pequeo de trminos. La funcin step() proporciona un procedimiento para realizar la regresin stepwise. Esto es, step hace en forma automtica el proceso de seleccin de variables sacando del modelo aquella que ms reduzca el Cp. La funcin Cp necesita un modelo inicial para comenzar a trabajar. (Ejemplo 4.12)

81

> UE.lm0<-lm(Total~1,data=DatosUE) > optiUE.lm<step(UE.lm0,~Importacion+Gastoscfgob+Gastoscfpriv+FBCF+Exportacion) Start: AIC=1510.34 Total ~ 1 Df 1 1 1 1 1 Sum of Sq 872483368 864962558 862683975 855483871 855330442 RSS 2323359 9844169 12122752 19322856 19476285 874806727 AIC 955 1091 1110 1154 1155 1510

+ Gastoscfgob + FBCF + Exportacion + Importacion + Gastoscfpriv <none>

Step: AIC=954.83 Total ~ Gastoscfgob Df Sum of Sq 1 1090105 1 454550 1 253261 1 168503 RSS 1233254 1868809 2070098 2154856 2323359 1 872483368 874806727 AIC 897 936 946 950 955 1510

+ FBCF + Gastoscfpriv + Exportacion + Importacion <none> - Gastoscfgob

Step: AIC=897.3 Total ~ Gastoscfgob + FBCF Df Sum of Sq 1 384276 1 1 1 1 13219 137 1090105 8610915 RSS 848978 1233254 1220035 1233117 2323359 9844169 AIC 864 897 898 899 955 1091

+ Importacion <none> + Exportacion + Gastoscfpriv - FBCF - Gastoscfgob

Step: AIC=864.2 Total ~ Gastoscfgob + FBCF + Importacion Df Sum of Sq 1 630063 1 32769 1 1 1 RSS 218916 816209 848978 384276 1233254 1305878 2154856 6817286 7666264 AIC 739 862 864 897 950 1069

+ Exportacion + Gastoscfpriv <none> - Importacion - FBCF - Gastoscfgob

Step: AIC=738.8 Total ~ Gastoscfgob + FBCF + Importacion + Exportacion Df Sum of Sq 1 46769 1 1 1 1 614333 630063 1001119 6167270 RSS 172147 218916 833248 848978 1220035 6386185 AIC 718 739 862 864 898 1054

+ Gastoscfpriv <none> - FBCF - Exportacion - Importacion - Gastoscfgob

Step: AIC=718.2 Total ~ Gastoscfgob + FBCF + Importacion + Exportacion + Gastoscfpriv Df Sum of Sq RSS AIC

82

<none> - Gastoscfpriv - FBCF - Gastoscfgob - Exportacion - Importacion >

1 1 1 1 1

172147 46769 218916 590143 762290 592690 764837 644062 816209 1040682 1212829

718 739 856 856 862 900

La funcin step() arroja un objeto) lm(), o sea un modelo lineal. Sin embargo, step() muestra paso a paso hasta encontrar el modelo, si lo que se quiere es visualizar slo el resultado final, se debe incluir en la funcin step() el argumento trace=FALSE como se muestra a continuacin.

Como podemos ver, nuestro mejor modelo es el que incluye a todas las variables independientes, como ya se haba visto en los ejemplos anteriores.

Intervalos de confianza
Qu tan confiable es la estimacin producida en una regresin simple dados nuestros supuestos? (residuos con distribucin normal con varianza constante ), podemos construir intervalos de confianza para cada punto de nuestra lnea de regresin estimada basados en la distribucin t y bandas de confianza para la lnea de regresin entera basndonos en la distribucin F. Para efectos de este trabajo slo se generarn los intervalos de confianza para cada observacin as como los correspondientes a los coeficientes del modelo.

Intervalos de confianza para cada observacin.


En ambos casos necesitaremos el error estndar del valor estimado, se.fit que es calculado como sigue:

Para un objeto lm se puede utilizar la funcin predict como sigue: (Ejemplo 4.13)

83

Dado un punto x en los valores estimados, un intervalo de confianza de (1 )% para el valor pronosticado correspondiente a x es el conjunto de valores tal que:

t , n 2 se. fit < y < y + t , n 2 se. fit y 2 2


donde t (q, d ) es el q -simo cuantil de la distribucin t con d grados de libertad. Para obtener el intervalo de confianza utilizamos el error estndar de los ajustes que y obtuvimos con la funcin predict() y lo multiplicamos por el cuantil de t , n 2

y luego lo

sumamos a los ajustes para obtener los lmites inferior y superior de cada intervalo en una matriz. Como se puede observar en el cdigo, se realizan primero tres vectores a partir de la funcin predict() y luego se integran en una matriz. Podemos ver en la grfica que los intervalos de confianza son muy pequeos, esto se debe principalmente a que su error estndar es muy pequeo, lo que hace que la prediccin sea bastante confiable. (Ejemplo 4.14)

84

Para realizar la grfica de estos intervalos hacemos uso de la funcin matplot() de la siguiente manera: (Ejemplo 4.15)

> matplot(intconfpunt,ylab="intconfpunt",xlab="x",type="l",main="Intervalos de confianza para cada observacin") >

85

Intervalos de confianza para cada observacin


24000 intconfpunt 14000 0 16000 18000 20000 22000

20

40 x

60

80

Fig. 4.7. Intervalos de confianza por observacin

Intervalos de confianza sobre los coeficientes de regresin


Asumiendo que los errores del modelo de regresin lineal se distribuye en forma normal con media cero y varianza constante 2 y que adems son independientes entre si, se puede llegar a establecer que un intervalo de confianza del 100(1 )% para el coeficiente de regresin poblacional j es de la forma

)< < + t t 1 se se( j j j j j


2 2
donde t

( )

1 y t representan los percentiles del 100% y 1 100% de una 2 2 2 2 distribucin t con n p 1 grados de libertad, donde p es el nmero de variables

predictoras. Para obtener estos intervalos con R, utilizamos la funcin confint(). Esta funcin tiene tres argumentos y slo puede ser aplicada a objetos de la clase lm. El primero de dichos argumentos, es el modelo al cul se aplica, el segundo es el nivel de confianza expresado como 1 y el tercero es un vector de coeficientes para los cuales se desea aplicar esta funcin, el que vaya en blanco indica por default que se desea aplicar a todos los coeficientes. El resultado que arroja corresponde a dos vectores que son el lmite inferior y el lmite superior del intervalo para cada coeficiente como se muestra a continuacin.

86

Los intervalos de confianza sobre los coeficientes revelan su nivel de significancia pues podemos observar mediante ellos si para un nivel de confianza determinado, el cero se encuentra incluido en el intervalo. Como podemos ver, para un nivel de confianza del 95%, nuestros coeficientes son claramente significantes puesto que no hay cambios de signo en el intervalo.

Referencias utilizadas en este captulo


1) 2) Insightful(2001). S-Plus 6 Guide to Statistics (for Windows) Vol. 1. Harrel Frank, OConnell Michael, Pikounis William, Merck & Co., Pinheiro Jos, Therneau Terry Springer (2005). An R and S-Plus Companion to Multivariate Analysis. Brian S.Everitt Practical Regression and Anova using R, Faraway Julian J., July 2002. Mendenhall, Beaver, Beaver (). Probability and Statistics. Thomson Brooks/ Cole.

3)

4)

87

5. Anlisis de Conglomerados

El anlisis de conglomerados consiste en la clasificacin de objetos dentro de diferentes grupos, o ms precisamente en particionar el grupo de datos en subconjuntos (clusters). De esta manera, los objetos pertenecientes a un mismo cluster se asemejan uno con otro, mientras que los objetos en clusters diferentes son disimilares. En dos o tres dimensiones, los clusters pueden ser visualizados, ya con ms de tres dimensiones o en el caso de los datos disimilares necesitaremos algn tipo de ayuda analtica. De forma general, los algoritmos de clusterizacin pueden pertenecer a dos categoras:

a)

Algoritmos Partitivos:

Mediante un algoritmo partitivo divide los datos en k clusters, el entero k debe ser especificado. Por lo regular, se corre el algoritmo para un rango de k valores, para cada k, el algoritmo realiza la clusterizacin y adems arroja un parmetro que permite seleccionar el mejor valor de k a posteriori. Algoritmos partitivos en R: kmeans, pam, clara y fanny

b)

Algoritmos Jerrquicos:

Los algoritmos jerrquicos construyen una jerarqua completa de clusters para el conjunto de datos. De este tipo de algoritmos se desprenden dos tipos de mtodos: a. Mtodos Aglomerativos: Los mtodos de clusterizacin jerrquicos aglomerativos parten de un pequeo cluster y van adicionando clusters hasta que quede slo un cluster grande que ser el conjunto entero de los datos. (Algoritmos Jerrquicos Aglomerativos en R: agnes, mclust, hclust)

88

b. Mtodos Divisivos: Los mtodos divisivos parten de que el conjunto entero de los datos es un solo cluster, luego divide en clusters hasta que cada objeto es separado. (Algoritmos Jerrquicos Divisivos en R: diana, mona) Para el presente captulo slo veremos los algoritmos jerrquicos.

5.1 Disimilaridad y Similaridad


La disimilaridad entre dos objetos es la medida de cun diferentes son entre s, a veces podemos utilizar medidas de distancia para este efecto, bajo el entendido de que una funcin de disimilaridad no siempre es una distancia. El cmo se realiza el clculo de la disimilaridad entre dos objetos depende directamente de las variables originales. La funcin daisy construye una matriz de disimilaridad. Este algoritmo acepta varios tipos de variable como nominal, ordinal, binaria asimtrica entre otras. Como nuestra funcin puede realizar clculos para diversos tipos de variables es necesario especificar el tipo de variable de la que se trata si esta es diferente a las predeterminadas las cuales corresponden a valores reales continuos. Estos son los tipos de variable que acepta la fucin daisy: Variables de escala: Medidas continuas sobre una escala bruta. Ejemplos tpicos son: la temperatura, la altura, y el peso. Para calcular su disimilaridad podemos ocupar distancia Euclideana distancia Manhattan. - Variables continuas ordinarias: Son variables continuas medidas en una escala desconocida o dnde slo es conocido el rden y no la magnitud actual. - Variables en escala racional: Medidas continuas en una escala no lineal. Un ejmplo podra ser el crecimiento de una poblacin que se comporta en forma exponencial. - Variables ordinales discretas: Una variable ordinal discreta tiene M posibles valores que estn ordenados. - Variables nominales: Una nominal tiene M posibles valores que no estn ordenados. - Variables binarias simtricas: Son variables que slo tienen dos posibles valores: 0 y 1 y que tienen la misma importancia. Algunos ejemplos podran ser hombre y mujer o vertebrados y invertebrados. Variables binarias asimtricas:

89

Son variables con dos nicos valores 0 y 1, pero en este caso uno refleja mayor importancia que el otro. Dentro de esta categora podemos considerar variables que indican la presencia (1) o ausencia de un atributo. - Variables de tipos mezclados: Cuando todas las variables de los datos son de diferente tipo. Ejemplo (5.1)
> daisy(datos1) Dissimilarities : Aguascalientes Campeche BajaCalifornia BajaCaliforniaSur Campeche Coahuila 1028.126478 Colima 247.085326 Chiapas 1059.476108 Chihuahua 1045.652961 DistritoFederal 1039.714335 Durango 1097.412633 Guanajuato 1046.106205 Guerrero 1144.943924 Hidalgo 1158.666594 Jalisco 1044.805995 Mexico 1019.159817 Michoacan 1050.684426 Morelos 1082.453656 Nayarit 309.944419 NuevoLeon 1044.965864 Oaxaca 1116.436398 Puebla 1048.042595 Queretaro 1111.622680 QuintanaRoo 123.443361 SanLuisPotosi 1220.107416 Sinaloa 1049.377035 Sonora 1050.029595 Tabasco 1393.174484 BajaCalifornia BajaCaliforniaSur

555.095264 919.851603 854.961898 1057.472722 1050.862579 255.447764 556.405454 39.081258 828.626702 1247.911139 4.780377 555.202921 574.762236 124.153455 554.930681 236.033491 284.370631 556.464188 561.868078 555.136886 78.429616 1358.950135 558.197250 168.071085 554.923560 159.038855 1041.119389 387.149980 555.563935 555.401020 932.895053 1228.330251 557.129733 16.270990 151.804432 678.902382 15.510610 791.027084 839.077506 47.847296 97.317596 6.989048 632.925883 1321.585963 63.691424 723.051261 9.661951 713.981923 1089.838460 941.832606 13.564288 7.923269 1027.832250 374.895417 922.245808 849.194955 844.856354 977.427357 849.763426 1040.255784 1060.023502 849.293494 819.808410 854.648765 955.952484 484.894972 849.303305 1002.496085 851.899066 996.481156 290.423318 1135.058426 853.714505 854.192472 1284.362347

90

Tamaulipas 1049.337877 Tlaxcala 1211.230483 Veracruz 1046.787156 Yucatn 1124.708939 Zacatecas 1026.421090 BajaCalifornia BajaCaliforniaSur Campeche Coahuila Colima Chiapas Chihuahua DistritoFederal Durango Guanajuato Guerrero Hidalgo Jalisco Mexico Michoacan Morelos Nayarit NuevoLeon Oaxaca Puebla Queretaro QuintanaRoo SanLuisPotosi Sinaloa Sonora Tabasco Tamaulipas Tlaxcala Veracruz Yucatn Zacatecas . . . Tlaxcala Veracruz Yucatn Zacatecas

555.068425 1217.245271 556.792870 189.772379 139.101471 Coahuila Colima

7.659934 1246.707145 43.140974 743.862933 416.361715 Chiapas Chihuahua

853.411145 1220.766986 851.150532 1013.773814 869.443111

1202.147112 558.666806 29.604755 134.436509 679.773858 29.650410 791.884603 839.210733 41.923098 70.548132 41.243499 634.028525 1296.754064 52.228799 724.112203 32.734854 714.914008 1066.407863 942.219450 35.196042 35.907527 1014.339710 35.034589 1246.723374 42.760610 744.634559 418.263921

1250.060612 1222.470875 557.292747 1212.924027 577.053492 136.563900 1284.951234 122.228938 678.791536 1223.048164 557.038532 4.334350 1328.494033 234.009381 790.959151 1338.756484 282.479938 838.819578 1221.788156 558.628235 33.465914 1191.446591 564.241313 81.560279 1228.065919 557.154396 18.085386 1271.363619 76.379309 632.832125 150.105182 1361.026248 1315.944003 1221.419215 560.445333 48.971547 1302.648777 166.007995 723.037754 1225.222090 557.009339 8.641148 1298.066339 157.045942 713.913112 243.908848 1043.039646 1084.497118 1396.915431 385.180771 941.522049 1226.887269 557.628114 6.632969 1227.460335 557.452645 9.712954 1540.862229 936.646086 1024.604096 1226.711291 557.133376 9.281863 1371.529867 1216.566665 1244.996935 1223.779776 558.883323 29.045145 1310.145415 187.714593 743.646894 1217.580085 141.112059 416.741196

1246.413049 36.405113 1238.799877 743.714149 1250.894082 416.466222 1202.633375

744.139017 419.308149

328.565106

Metric : euclidean Number of objects : 32 >

91

5.2. Anlisis Jerrquico de Conglomerados


Los mtodos jerrquicos combinan o dividen los grupos existentes. De esta manera producen una estructura jerrquica donde se muestra el orden en que estos grupos fueron aglomerados o divididos.

5.2.1

Mtodos Aglomerativos

El mtodo aglomerativo comienza con una observacin en cada cluster y los junta hasta terminar con un solo grupo compuesto por la totalidad de las observaciones. En R, la funcin que lo calcula es agnes. Esta funcin es un mtodo aglomerativo jerrquico de produce una secuencia de conglomerados. En la primera clusterizacin hay n clusters, con un objeto cada uno. En los pasos subsecuentes, los clusters son fusionados hasta que slo queda un cluster que contiene la totalidad de las observaciones. El algoritmo se basa solamente en las disimilaridades. Si aplicamos la funcin a la matriz de datos, lo primero que har agnes ser calcular la matriz de disimilaridades. La jerarqua obtenida por agnes puede ser grficamente representada en dos formas: a. Clustering trees: Es un rbol cuyas hojas representan objetos. La coordenada vertical del lugar donde las ramas se juntan es la disimilaridad entre los clusters correspondientes.
Dendrogram of agnes(x = datos1)
1200

200 400 600 800

Height

Fig. 5.1. Dendograma obtenido con el mtodo agnes

Aguascalientes Chiapas Zacatecas Durango Morelos Oaxaca Queretaro Yucatn Guerrero Hidalgo SanLuisPotosi BajaCalifornia Michoacan Chihuahua Guanajuato Puebla Sonora Tamaulipas Sinaloa Coahuila Jalisco Veracruz NuevoLeon DistritoFederal Mexico

datos1 Agglomerative Coefficient = 0.9

BajaCaliforniaSur Campeche QuintanaRoo Colima Nayarit

Tabasco

Tlaxcala

92

b. Banner: El banner muestra las sucesivas uniones de izquierda a derecha. El Banner contiene la misma informacin que el clusterin tree.
Banner of agnes(x = datos1)
Aguas Chiap Zacat Duran Morel Oaxac Quere Yucat Guerr Hidal SanLu BajaC Micho Chihu Guana Puebl Sonor Tamau Sinal Coahu Jalis Verac Nuevo Distr Mexic Tabas BajaC Campe Quint Colim Nayar Tlaxc 0 200 400 600 Height Agglomerative Coefficient = 0.9 800 1000 1200

Fig. 5.1. Banner obtenido con el mtodo agnes

93

5.2.2

Mtodos Divisivos

Mientras la clusterizacin aglomerativa parte de muchos grupos y los combina en uno solo, Los mtodos divisivos toman al grupo de observaciones entero como un cluster y lo divide repetidamente hasta terminar con un solo grupo. El mtodo que ocupa R para realizar este tipo de anlisis jerrquico de conglomerados es diana. Ejemplo (5.2)
> diana(datos1) Merge: [,1] [,2] [1,] -26 -28 [2,] -8 -11 [3,] -1 -7 [4,] -21 1 [5,] -2 -16 [6,] 4 -25 [7,] -20 -22 [8,] 2 6 [9,] -14 -30 [10,] 5 8 [11,] 9 -19 [12,] 7 -31 [13,] 10 -5 [14,] -10 12 [15,] 13 11 [16,] -9 -15 [17,] 3 -17 [18,] -13 -24 [19,] 14 -12 [20,] -4 -23 [21,] -6 -18 [22,] 15 16 [23,] 17 -32 [24,] 19 18 [25,] 20 21 [26,] -3 25 [27,] 23 24 [28,] 27 22 [29,] 28 -27 [30,] 26 -29 [31,] 29 30 Order of objects: [1] Aguascalientes Chiapas Morelos Zacatecas Durango Oaxaca Queretaro Yucatn [9] Guerrero Hidalgo SanLuisPotosi BajaCalifornia Michoacan Chihuahua Guanajuato Puebla [17] Sonora Tamaulipas Sinaloa Coahuila Jalisco Veracruz NuevoLeon DistritoFederal [25] Mexico Tabasco BajaCaliforniaSur Campeche QuintanaRoo Colima Nayarit Tlaxcala Height: [1] 4.780377 78.429616 217.275679 526.184729 66.111522 9.653901 33.621113 112.237996 263.051814 104.247392 949.753545 6.989048 [13] 18.085386 4.334350 9.712954 5.557975 3.106356 7.391517 41.243499 66.167069 11.421079 26.437036 153.730831 69.040892

94

[25] 1048.862294 1628.855305 150.105182 1628.855305 Divisive coefficient: [1] 0.9093466 Available components: [1] "order" "height" "order.lab" "data" >

484.894972

123.443361

337.865349

"dc"

"merge"

"diss"

"call"

La funcin diana tambin proporciona el coeficiente divisivo que mide la estructura de clusterizacin del conjunto de datos. La jerarqua obtenida por diana puede ser graficada en un rbol o en un banner.

Dendrogram of diana(x = datos1)


1500

1000

Height

500

Tabasco

La funcin diana es un mtodo jerrquico divisivo. El cluster inicial consiste en un gran conglomerado que contiene a todos los elementos. En todos los pasos subsecuentes, el mayor cluster disponible se dividir en dos grupos ms pequeos hasta que cada cluster contenga slo un elemento. En el primer paso de un mtodo jerrquico, hay 2 =

n(n 1) posibles formas de mezclar 2 dos clusters. Pero en el primer paso del mtodo hay 2n 1 1 posibilidades de dividir un
cluster en dos. El siguiente nmero es mucho mayor y en la prctica no es posible probar todas las posibles divisiones.

Aguascalientes Chiapas M orelos Zacatecas Durango O axaca Q ueretaro Yucatn G uerrero Hidalgo SanLuisPotosi BajaCalifornia M ichoacan Chihuahua G uanajuato Puebla Sonora Tam aulipas Sinaloa Coahuila Jalisco Veracruz NuevoLeon DistritoFederal M exico

datos1 Divisive Coefficient = 0.91

Fig. 5.3. Dendograma obtenido por medio del mtodo diana.

BajaCaliforniaSur Cam peche Q uintanaRoo Colim a Nayarit

Tlaxcala

95

Referencias utilizadas en este captulo 1) http://www.bioconductor.org/workshops/2003/Milan/PDF/Lab5.pdf 2) http://cged.genes.nig.ac.jp/RGM2/pkg.php?p=cluster 3) Insightful(2001). S-Plus 6 Guide to Statistics (for Windows) Vol. 1. Harrel Frank, OConnell Michael, Pikounis William, Merck & Co., Pinheiro Jos, Therneau Terry. 4) Hair, Anderson, Tatham, Black, (1998). Multivariate Data Analysis. Fifth Edition. Wiley, New York. 5) Springer (2005). An R and S-Plus Companion to Multivariate Analysis. Brian S.Everitt

96

Conclusin

El desarrollo de un proyecto arroja resultados positivos, experiencias y conocimientos que sirven como base para la formulacin de nuevas propuestas. En el caso del presente trabajo, se obtienen las siguientes: El uso del software libre debe difundirse entre la poblacin. No debe restringirse nicamente a reas de tipo acadmico o cientfico, sino que debe expandirse hacia el terreno profesional. Ya que en muchas compaas, sobre todo pequeas o incluso grandes donde no se invierte en paquetera estadstica no se cuenta con la posibilidad de adquirir software con licencia y el profesional debe valerse por recursos propios. Por otro lado, dada las mltiples aplicaciones de la estadstica en muchas disciplinas es muy importante conocer el uso de software estadstico que auxilie al profesional en el desarrollo de su quehacer cotidiano. Es por eso que es importante tender un material de acercamiento a un paquete estadstico en espaol, comprensible y sencillo, que sin abundar en terminologa estadstica brinde el soporte necesario para el desarrollo de investigaciones as como para le uso en el campo laboral. El Lenguaje R tiene mltiples aplicaciones que se incrementan con las contribuciones de usuarios de todo el mundo que le aportan nuevas funciones casi tan especficas como problemas hay por resolver en todos los mbitos desde series de tiempo, ciencias actuariales, demografa, biologa,, etctera. Queda pendiente la exploracin al alumno que tome inters de estas aplicaciones pues el objetivo de este material es un mero acercamiento a los usos comunes y sencillos del paquete. Por otra parte ha sido muy estimulante darme cuenta de que el inters por este trabajo crece debido a la necesidad que tienen los estudiantes de manejar software de este tipo. Y otra cosa que creo que es muy importante agregar es que al aprender a manejar este paquete tambin se aprende a manejar S-Plus ya que su sintaxis es muy parecida, incluso podramos decir que manejar R es un poco ms difcil que manejar S-Plus. Para finalizar, me gustara agregar que yo misma he sido sujeto de prueba en este manual, ya que he aprendido el lenguaje a la par de la realizacin de este proyecto, lo que a sido muy til para m y me ha significado una gran ventaja en mi campo laboral, y en este momento me encuentro utilizando algunas otras aplicaciones del lenguaje que no se incluyen en el manual, por lo que espero que este sea un acercamiento para estudiantes y profesores que quieran incorporar el uso de este software a la prctica diaria.

97

Anexo 1
Cmo cargar y llamar libreras
Como ya se mencion, muchas aplicaciones de R son contribuciones de usuarios de este software en todo el mundo, pero no todas se encuentran dentro del paquete base de R. Todas estas contribuciones se encuentran en la pgina de CRAN en libreras, en este trabajo utilizamos algunas de estas libreras, es por eso que se mencionar a continuacin como bajarlas y llamarlas.

1) 2) 3) 4)

Ingresar a CRAN Ingresar al Mirror ms cercano Entrar en la opcin Contributed Extension packages. Al entrar a esa opcin se puede ver el nombre de la librera seguido de una breve descripcin de su contenido. Se da clic en ella y se elige la opcin Windows binary. 5) Como viene en un archivo .zip, se extrae el ejecutable y se guarda en la carpeta library que se encentra en el directorio R-2.5.0.

Si se requiere llamar la librera, se utiliza el comando library(), poniendo el nombre la librera como argumento.

98

99