Introduccion R PDF
Introduccion R PDF
Introduccion R PDF
Contenido
1. Motivación 3
2. Descargar R 3
3. Instalar R 4
3.1. Sobre RStudio y otros IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
7. Lectura de datos 12
7.1. Función setwd() para ayudar a R a encontrar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.2. Leyendo archivos CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1
1. Motivación
Todo gran programador que conozcas, llegó a serlo resolviendo problemas
que no estaba cualificado para resolver hasta que los resolvió.
Los computadores son las calculadoras científicas más avanzadas que existen y la estadística lo sabe. Es por
esto que es una disciplina que, generalmente, se enseña utilizando alguna herramienta informática. Así agiliza-
mos la implementación de las técnicas estadísticas y nos aseguramos de que las personas pasen menos tiempo
haciendo sumas, restas y dibujitos, y más tiempo gastando neuronas formulando hipótesis y haciendo prediccio-
nes acertadas, que es en última instancia lo más complicado y significativo (chiste estadístico). Además ahora
vivimos en la época de lo que se llama “big data”, que simplemente quiere decir que promediar a mano alzada es
imposible desde el punto de vista práctico.
La pregunta entonces es ¿cuál herramienta computacional es la que mejor se acomoda a un curso introductorio
de estadística? No hay una sola respuesta. Existen muchos programas muy buenos y la verdad la elección de uno
u otro depende enteramente del gusto de cada quien. También sucede que los instructores enseñan aquel que
aprendieron a usar a la fuerza en alguna materia de pregrado o posgrado. Algunas herramientas especializadas
para estadística conocidas son: SAS, SPSS, Minitab, Statgraphics, Stata e incluso el viejo y confiable Microsoft
Excel (o cualquier otro programa de hojas de cálculo). El problema de todas estas que mencionamos, es que
todas son productos que venden empresas y por lo tanto requieren licencias costosas. Y aunque algunos tienen
versiones de prueba (o sabemos dónde conseguir las versiones crackeadas), una vez salimos al mundo laboral
nos damos cuenta de sus limitaciones y además de que la piratería no es bien vista. Entonces aparece R, un
proyecto liderado por gente chévere de todo el mundo, que pone a nuestra disposición, de manera libre y gratuita,
un programa sofisticado para el análisis estadístico de datos y la producción de gráficas.
Pero aunque las cosas gratis son casi siempre excelentes solo por eso (no una enfermedad), R tiene muchas
otras ventajas, entre ellas: puede utilizarse en Windows, Mac OS, y distribuciones de Linux sin problemas; cuenta
con una comunidad amplia de personas en Internet que se encargan de mantenerlo actualizado con los últimos
avances en estadística en todas las ramas de la ciencia; esta misma comunidad está disponible para resolver
dudas y publicar tutoriales y video-ayudas; y además un lenguaje de programación que permite ir más allá de la
estadística si es necesario. Ahora, también es importante destacar sus desventajas, de las cuales la más evidente
es que al ser también un lenguaje de programación, puede tener una curva lenta de aprendizaje al comienzo.
Así pues, toda esta “carreta” ha sido para invitarlos a aprender R con nosotros. Si en algún momento dudan
o se sienten frustrados ante posiblemente su primera experiencia de programación, pueden recurrir a alguno
de los otros programas que se mencionaron arriba, a excepción de Microsoft Excel, que no está especializado
para el tratamiento estadístico de datos aunque posea muchas de las mismas funciones. Sin más preámbulos,
descarguemos e instalemos R.
2. Descargar R
Para descargar R debe visitarse la página del proyecto en: https://www.r-project.org/. En el panel del lado izquierdo
habrá una sección que se llama “Download” y debajo de ella dice “CRAN”, dar clic aquí. CRAN quiere decir
Comprehensive R Archive Network, que es un nombre muy elaborado para simplemente referirse al lugar donde
está guardado el programa en Internet. La cosa es que el CRAN no queda en un solo lugar, sino que tiene copias
(o espejos o mirrors) por todo el mundo, por si alguna copia se daña, existan otras intactas. Lo normal es que uno
seleccione un mirror cercano a la ubicación geográfica en la que uno se encuentra, pero hoy en día el Internet es
tan veloz que eso no importa tanto. Aún así, solo por seguirles la corriente, seleccionemos el mirror de Colombia
(cualquiera de los dos) que está ubicado en los computadores de la Universidad ICESI en Cali.
Esto nos llevará a una página en la que se listan las opciones para cada sistema operativo. Asumiremos que
estamos trabajando en Windows, así que hacemos clic en “Download R for Windows”. Esto nos llevará a otra
página en la que vamos a escoger cuál distribución de R queremos. Por ahora, no necesitamos muchas cosas así
que solo instalemos el programa base, así que hacer clic en “base”. Esto nos lleva a una página final en la que
por fin vemos el instalador de Windows para descargarlo “Download R 3.5.1 for Windows”. Esto nos preguntará
2
Figura 1: Descargar R para su instalación: (1) ir a la página del proyecto, (2) seleccionar el repositorio CRAN, (3)
escoger el mirror para Colombia, (4) seleccionar sistema operativo (Windows), (5) elegir la versión base de R, (6)
hacer clic en el vínculo para descargar R con las opciones especificadas, y finalmente (7) elegir guardar el archivo
instalador.
si queremos guardar el ejecutable, y lo guardamos en algún lugar del computador, que puede ser la carpeta
“Descargas”. En la Figura 1 pueden verse los pasos descritos aquí.
3. Instalar R
Instalar R usando el instalador de Windows es tan sencillo como hacer clic seguidas veces en "Siguiente"(o
"Next"). Siendo este un curso introductorio, no entraremos en los destalles de las posibles maneras de instalar
el programa. En la Figura 2 se observan pantallazos de una instalación corriente de R. En esta ocasión no se
hicieron modificaciones a las opciones predeterminadas del instalador.
3
Figura 2: Instalación de R: (1) ejecutar el instalador, (2) aceptar los permisos de ejecución, (3) seleccionar el
idioma para el instalador, (4) aceptar los términos de la licencia de uso, (5) seleccionar el lugar de instalación de
R, (6) seleccionar los componentes a instalar, (7) escoger si se inicia R con Windows, (8) escoger si crear ícono
en escritorio y comenzar instalación, (9) instalación en progreso, (10) finalizar. Además se muestra el ícono de
acceso directo que aparece en el Escritorio.
base de R. Pero si el lector o lectora quieren utilizar algún IDE, seguro se sentirán muy cómodos y podrán seguir
esta misma guía sin problemas.
4
Figura 3: Ventana inicial de R.
corresponde a la consola de R. Esta pequeña ventana es la más importante de todas pues es la que se encarga
de ejecutar todos nuestras instrucciones. Esta consola es R, es lo que aprenderemos a usar con esta guía. Todo
los demás menú y cosas son solo adicionales para hacer el uso de esta ventana de consola más agradable.
4.1. Consola de R
La consola de R viene con unos colores predeterminados. El fondo es de color blanco. Tiene un color azul naval
para los mensajes que la misma consola de R nos muestra. Y tiene un color rojo normal para el texto que nosotros
como usarios le escribamos. Naturalmente esos colores pueden modificarse según le gusten al usuario en el menú
“Editar” y “Preferencias de la interface gráfica”. En ese mismo menú pueden editarse muchas cosas sobre cómo
se muestra R para el usuario, aunque no todas las cosas pueden cambiarse. Como se muestra en la Figura 3,
la consola al inicio imprime un largo mensaje en el que se dice la versión de R que se está usando, y además
dan información sobre el lenguaje en el que está R (puede que el suyo aparezca en español), y abajo aparecen
algunos comandos sobre pedir ayuda o hacer pequeñas demostraciones. Luego de este mensaje largo aparece
una flecha roja (o “mayor que”) seguida de una línea vertical:
> |
La barra vertical usualmente está titilando, igual que en cualquier editor de texto (como Microsoft Word). Esto
significa que el programa está a la expectativa de que el usuario ingrese algo de texto. En inglés esto se denomina
prompt y es donde escribimos instrucciones para que R las ejecute. El símbolo de "mayor que"(>) está ahí por
razones históricas, pues en los computadores antigüos esa era la manera de decir “aquí estamos”. Entonces uno
escribe un comando en el prompt y luego presiona la tecla “Enter” para que R ejecute nuestra instrucción. Por
ejemplo hagamos operaciones aritméticas:
> 4 + 5
[1] 9
> 10*2
[1] 20
Los números entre corchetes ([1]) indican el número de renglones de cada cosa que se imprime. En estas
operaciones matemáticas solo se imprime un renglón, y por eso el único número 1. En cambio, si por ejemplo se
5
tratara de una matriz, tendría varios renglones. Una definición importante en la consola de R es la de workspace
(área de trabajo en inglés):
Workspace de la consola: este término se refiere a todo lo que se escribe en la consola y a todo lo que esta
imprime. Es decir, el workspace es todo lo que ocurre en la consola: todas las variables, instrucciones, funciones,
resultados, mensajes, entre otras cosas. Al final de toda sesión de R, el programa le pregunta al usuario si
quiere guardar el workspace, esto por si quiere repetir exactamente los mismos cálculos e instrucciones con las
mismas variables en un futuro. Generalmente nosotros no querremos hacer exactamente los mismos cálculos
para los mismos datos (¿para qué hacer lo mismo dos veces?), y por eso casi nunca guardaremos el workspace.
Además en cualquier procedimiento pueden hacerse pruebas y errores en la consola que no querremos guardar
de ninguna forma. Sin embargo, pueden existir ocasiones en las que sea útil hacerlo y por eso el programa lo
pregunta, como por ejemplo cuando se queda uno en medio de alguna operación pero ya no queda tiempo de
clase y debe continuar luego.
Se debe entonces pensar en la consola de R como una calculadora muy sofisticada, que no solo hace operaciones
aritméticas, sino que tiene muchas funciones programadas para el análisis estadístico de información. Estas
funciones las iremos aprendiendo a medida que avanza este documento.
4.2. Funciones en R
Hemos dicho que la consola de R es una calculadora sofisticada. Esta entonces tiene funciones de alto calibre,
no solo sumar (+), restar (-), multiplicar (*) y dividir (/). Una función es simplemente un código de computador que
con unas entradas o argumentos, hace diversas operaciones para entregar un resultado o salida. Hay funciones
para muchas cosas y aquí no vamos a enlistarlas todas, pero sí a mostrar su forma básica. Toda función tiene un
nombre alusivo a lo que esta entrega como resultado y luego del nombre siguen unos paréntesis entre los cuales
van a ir los argumentos de entrada para la función. Si no hay nada entre los paréntesis, es porque no se necesitan
argumentos, como es el caso de algunas funciones. Entonces siempre que hablemos de alguna función, debemos
recordar que estas llevan unos paréntesis que les acompañan el nombre. Estos nombres además no deberíamos
utilizarlos para los nombres de variables, aunque es posible. Veamos algunos ejemplos:
No se preopcupen si no entienden bien lo que hacen las funciones. Ese no es el punto, lo importante es el
lenguaje, y que entiendan a qué nos referimos con funciones y que recuerden los paréntesis. Y noten por ejemplo
que mean() requiere un argumento de entrada, mientras que la función getwd() no.
6
Figura 4: Creando un nuevo script de R: (a) abriendo el editor y (b) organizando las ventanas verticalmente en el
panel multi-ventanas.
en blanco, como se muestra en la Figura 4a. Lo primero que debe notarse es que cuando se tiene enfocada
esta ventana de editor, desaparecen algunos de los íconos de la barra de herramientas y algunos de los menús
de la barra superior (como “Visualizar” y “Misc”). Esto es indicativo de que la ventana de editor de scripts tiene
una funcionalidad distinta. La más relevante de todas es la que tiene que ver con ejecutar las líneas de código
que escribamos en esa nueva ventana. Puede verse en el menú “Editar” (con la ventana de editor enfocada) las
opciones “Correr línea o selección” y “Ejecutar todo”. Lo que hacen estas funciones es pasar lo que escribamos
en el script a la consola de R, que es como dijimos anteriormente donde sucede todo. Es útil recordar el atajo
de teclado Ctrl + R, que nos permite ejecutar el renglón en el que estamos parados en el editor de scripts, o la
selección que hagamos (puede ser con el mouse) en esa misma ventana. Con este atajo, podemos ir probando
las cosas que vamos escribiendo en el script hasta que llegamos al resultado deseado.
Finalmente, ahora que tenemos dos ventanas: una para la consola y otra para el editor de scripts, podemos
ver la utilidad del menú “Ventanas”, en el que podemos escoger cómo queremos organizarlas: en cascada (una
encima de la otra), divididas verticalmente u horizontalmente. La Figura 4b muestra cómo se organizaron las
dos ventanas separadas verticalmente. En el curso de esta guía puede que aparezcan más ventanas (como una
para los gráficos o varios scripts abiertos al tiempo), ya entonces pueden escoger cómo organizarlas para su
comodidad.
7
5.1. ¿Qué es una variable?
Este tema es elemental, y a veces los instructores lo pasamos por alto creyendo que todos entienden lo que es
una variable. Pero una variable en programación no es lo mismo que una variable en un curso de matemáticas, y
tampoco nos referimos aquí a los tipos de variables (cualitativas o cuantitativas) que se ven en estadística. Una
variable es simplemente un nombre que se le asigna a algún objeto. Piensen en que tenemos por ejemplo una
matriz de 80 filas por 80 columnas, si cada vez que quisiéramos hacerle una operación, por ejemplo un promedio,
tuviéramos que escribir las 80 filas y las 80 columnas, nos quedarían doliendo las manos y odiaríamos al profesor
o profesora de esa materia por hacernos doler nuestras manitas. Así que preferimos escribir esa matriz una sola
vez, pero asignándole un nombre, bautizándola, para que solo con usar ese nombre, el programa ya entienda que
se trata de esa inmensa matriz.
Los nombres de una variable en R tienen reglas como por ejemplo:
No pueden iniciar con números: no se puede 123variable.
No pueden tener espacios (utilice guiones_al_piso mejor).
No pueden tener símbolos extraños como asterisco (*).
Las mayúsculas importan: no es lo mismo r que R.
Para bautizar o nombrar los objetos con variables se utiliza el símbolo <- que quiere decir “creado a partir de”,
con espacios a cada lado así:
nombre_de_variable <- objeto.de.R
Entonces cuando tenemos un objeto de R (números, palabras, vectores, etc.) al que le hemos bautizado (utilizando
el <-) con un nombre, tenemos una variable.
5.2.1. Números
Los objetos numéricos en R o numeric son simplemente los números. No importa si son enteros o decimales.
Creemos algunas variables con números en la consola de R:
> edad <- 15
> velocidad <- 50.2
Noten que el punto decimal (.) es un punto y no una coma.
5.2.2. Palabras
Los objetos de caracteres o de palabras son todos los que puedan escribirse con un teclado. Estos tienen que ir
encerrados entre comillas (") y pueden ser tan largos como se quiera y contener espacios. A estos también se les
llama de tipo string porque son vistos como cadenas o secuencias de letras. Creemos algunas variables de tipo
string en la consola de R:
> nombre_completo <- "Helio Argemiro Otiundo Palmira"
> mensaje_bienvenida <- "Bienvenido al mundo de programar"
Comprobemos que efectivamente hemos creado estas variables, escribiendo sus nombres en la consola de R y
presionando “Enter” para que nos muestre qué representan o qué contienen:
> edad
[1] 15
> velocidad
[1] 50.2
> nombre_completo
[1] "Helio Argemiro Otiundo Palmira"
8
5.2.3. Vectores
La palabra vector en este contexto simplemente quiere decir colección ordenada de objetos. Estos pueden ser
numéricos o de palabras, pero solo pueden contener objetos de un solo tipo: todos son números o todos son
palabras. Se construyen con la función c() que sirve para coleccionar objetos. Dentro de esta función, cada uno
de los objetos se separa con comas (,). Creemos dos vectores en la consola de R, uno de caracteres y otro de
números:
Si escribimos el nombre en la consola, esta nos muestra los contenidos del vector (sin las comas):
> puntos
[1] 21 18 15 12
Algo importante sobre los vectores, es que son colecciones ordenadas, esto quiere decir que a cada elemento
de la colección se le asigna una posición dentro del vector. Las posiciones en R comienzan contando desde 1.
Para acceder a cada una de las posiciones se utiliza un índice que va entre corchetes luego del nombre de la
variable. Por ejemplo si quisieramos imprimir en la consola el tercer equipo en la variable equipos, lo haríamos
así:
> equipos[3]
[1] "Millonarios"
También se pueden especificar varios índices, en el caso de que se quieran varios elementos:
> equipos[c(1,2,4)]
[1] "Nacional", "Medellín", "América"
Noten que los índices tuvieron que especificarse en un pequeño vector de números utilizando la función c().
Además pueden especificarse índices negativos, que quieren decir “excepto esta posición”:
> equipos[-2]
[1] "Nacional", "Millonarios", "América"
Pero además de utilizar índices para acceder a cada posición, en los vectores podemos utilizar operadores boo-
leanos (igual, no igual, menor que, mayor que) para seleccionar algunos elementos particulares. Para esto se
especifica entre los corchetes la condición deseada:
Esta manera “inteligente” de seleccionar fracciones de vectores puede sernos muy útil más adelante, pero por
ahora no entraremos en más detalles.
9
Notemos que aquí es importante que los vectores que se utilicen en el data frame deben tener el mismo número
de elementos (4 en este caso). Además veamos cómo a cada uno de los vectores se les ha asignado un nombre
distintivo: “Equipo” para el vector de equipos y “Puntaje” para el vector de puntos. Veamos cómo queda la variable
tabla:
> tabla
Equipo Puntaje
1 Nacional 21
2 Medellín 18
3 Millonarios 15
4 América 12
Vemos que R le ha asignado automáticamente a cada uno un número de fila y ha relacionado los elementos de
los dos vectores según su posición en ellos. Ahora, para acceder a cada una de las columnas de un data frame,
es decir a cada uno de los vectores, se utiliza el operador $ seguido del nombre que tenga la columna así:
> tabla$Puntaje
[1] 21 18 15 12
> tabla$Equipo
[1] Nacional Medellín Millonarios América
Levels: América Medellín Millonarios Nacional
Notemos que para el vector numérico, R imprimió solo los valores, como si fuera un vector cualquiera. En cambio
para el vector de palabras que es tabla$Equipo, imprimió las palabras sin comillas (") y además imprimió algo
que es Levels. No entraremos en mucho detalle aún, de pronto más adelante lo explicaremos mejor, pero basta
decir que R por instinto piensa que las variables de palabras son categorías y las considera algo que se llaman
factores, y los niveles o levels son las distintas categorías de ese factor.
10
6.2. Instalar librerías usando la interfaz gráfica
Si está en su computador personal, inicie R haciendo clic derecho en el ícono de escritorio y seleccione “Ejecutar
como administrador”. Si no es su computador personal, entonces simplemente ejecute R como lo haría normal-
mente. A continuación vamos al menú “Paquetes” y seleccionamos “Instalar paquete(s)...”. Lo primero que va a
aparecernos es una ventana de selección del mirror o sitio de Internet de donde queremos descargar el paquete.
Como el Internet ya es tan rápido, no es muy importante escoger el de Colombia, y puede dejarse el 0-Cloud que
aperece predeterminado. Luego de que uno escoge el lugar, debe seleccionar el nombre del paquete a instalar.
En nuestro caso queremos instalar primero ggplot2, así que buscamos este nombre en la lista desplegada y pre-
sionamos “Ok”. Ahora pueden suceder varias cosas, porque ahora se trata de escoger dónde en el computador
va a instalarse la librería: si es su computador personal y ustedes iniciaron R con permisos de administrador, no
preguntará nada e instalará la librería en el C:. En cambio si ustedes no tienen permiso, y no existe una carpeta
en Mis Documentos que R reconozca como su librería, va a preguntarles que escojan una carpeta para instalar la
librería. O si ya existe dicha carpeta en Mis Documentos, entonces el programa no preguntará nada e instalará la
librería allí. Una vez instalen ggplot2, procedan a instalar pastecs.
> install.packages("ggplot2")
Noten que las comillas son importantes. Una vez se ejecuta ese comando, el programa seguirá la misma ruta
utilizando la interfaz gráfica como se explicó en la sección anterior.
> library(ggplot2)
Luego de este comando, tendremos acceso a todas las funciones útiles que tiene la librería. Este comando por lo
general debe ir al inicio de cualquier script. Más adelante lo veremos al inicio de todos los nuestros.
7. Lectura de datos
La información la miden muchos tipos de instrumentos. Muchas personas además en el mundo se encargan de
procesar datos medidos. Existen muchas variables qué medir. Todo esto hace que en últimas, la información
nunca se encuentre de la manera que nosotros la necesitamos. Mucho menos la información se encuentra ya
lista para ser leída con R. Existen muchos formatos y tipos de archivos. Si todos en el mundo utilizáramos R, de
pronto entonces sería muy fácil leer los datos y procesarlos. Pero no es así, porque existen muchas herramientas
y la gente es toda diferente. Aún así, existe un tipo de archivo muy sencillo que muchas personas utilizan y que
es útil para nosotros en R: archivos de texto plano con Valores Separados por Comas o CSV en inglés. Se tratan
de pequeños archivos de texto con la extensión .csv que se pueden ver en un “Bloc de notas” o en un Microsoft
Word y que simplemente tienen una tabla con los datos y las columnas están separadas por comas. Los CSV
en Windows generalmente están asociados al programa Microsoft Excel, pero no podemos olvidarnos de que no
se trata de libros de Excel (que tienen la extensión .xls o .xlsx).
La ventaja de este formato CSV es que no solo es útil para R, sino también para MATLAB, Python, y cuanto
lenguaje de programación o herramienta estadística exista. Además es bastante útil para nosotros que podamos
utilizar Excel para ver los datos y de pronto corregir rápidamente errores antes de iniciar el procesamiento de los
datos con R. Si tenemos un archivo de Excel, que es un punto común para muchas personas en el mundo, fácil-
mente podemos crear un archivo CSV en la opción “Guardar como”. El siguiente es un ejemplo de los contenidos
de un CSV. El archivo se llama tabla_posiciones.csv:
11
Posición,Equipo,Puntos,Jugados,Victorias,Derrotas,Empates
1,La Equidad,9,3,3,0,0
2,Junior,7,3,2,0,1
3,Independiente Medellín,7,3,2,0,1
4,Once Caldas,7,3,2,0,1
5,Alianza Petrolera,6,3,2,1,0
Noten que no hay ningún espacio entre las columnas, solo comas. Así pues, a pesar de que R está diseñado
para leer muchos tipos de archivos, no exclusivamente CSV, nosotros en este curso trabajaremos con estos
archivos por las razones anotadas. A veces pasa que Excel no guarda adecuadamente el archivo CSV y utiliza
otro separador, como un punto y coma (;) en vez de la coma. Para evitar cualquier problema, lo mejor siempre
es revisar el archivo guardado como CSV con el “Bloc de Notas” de Windows. Simplemente se hace clic derecho
en el archivo CSV y se escoge “Abrir con” y se selecciona el “Bloc de Notas”. Si al ver el archivo, se nota que el
separador no son comas, entonces se puede ir al menú “Edición” y seleccionar “Reemplazar”, para reemplazar el
separador que sea por las comas. A continuación entonces aprenderemos lo básico de leer un archivo CSV en R.
> getwd()
[1] "C:/Users/Mateo/Documents"
Esto quiere decir que nuestra consola de R está parada en la carpeta de mi cuenta de usuario “Mateo” y en
“Documents” (o “Mis Documentos”). A este tipo de “palabra” que comienza con una C: (el nombre del disco
duro) y separa los nombres de carpetas con slashes o diagonales al frente (/) se le llama ruta. Las rutas son
importantes porque nos permiten navegar entre los archivos del sistema. Es por esta razón que un sinónimo de
carpeta es directorio, porque en verdad los nombres de carpetas simplemente sirven para cambiar la ubicación de
los archivos, a manera de direcciones en la ciudad. ¿Qué significa la expresión “la consola está parada”? Significa
que R es capaz de ver todos los archivos que están al interior de esa carpeta. Que puede ubicarlos fácilmente solo
escribiendo su nombre. Para ver los contenidos de la carpeta en la que estamos, podemos utilizar otra función de
la consola que es dir(). Hagámoslo a continuación:
> dir()
[1] "archivos" "birbran"
[3] "catedra" "Clase_3.xlsx"
[5] "Custom Office Templates" "desktop.ini"
[7] "drive" "libros"
[9] "maestria" "My Music"
[11] "My Pictures" "My Videos"
[13] "R" "software"
[15] "Zoom"
Pueden ver muchas carpetas y algunos archivos como por ejemplo Clase_3.xlsx. Entonces R puede ver estas
ubicaciones en el sistema. Pero lo ideal no es trabajar en esta ubicación, sino en el lugar donde tenemos nuestros
archivos de interés, aquellos que vamos a procesar. Supongamos entonces que tenemos nuestros archivos en
una carpeta específica para nuestra asignatura, o que estamos usando una memoria USB en la que tenemos
todos nuestros archivos y queremos que R vaya hasta allá para que pueda leer nuestros archivos. Para esto
utilizamos la función setwd(), para decirle a la consola de R su lugar de trabajo, donde debería encontrar los
archivos necesarios y donde debería guardar cualquier archivo que generemos. La función es muy fácil de utilizar,
la dificultad está en saber escribir la ruta de manera adecuada. La verdad no es complicado, simplemente se
comienza con el nombre de un disco duro: por ejemplo C: si es el computador con Windows, o D: si es una
memoria USB a la que se le ha asignado la letra D (a veces es F: o G: según el número de memorias que se
inserten). Y luego se continúa con las carpetas separadas por slashes (/) hasta llegar a la ubicación deseada.
12
Supongamos entonces que queremos que la consola se “pare” en la carpeta R, que está dentro de la carpeta
clase, dentro de la carpeta estadística que he creado en mi memoria USB a la que Windows le ha asignado la
letra D:, luego:
> setwd("D:/estadistica/clase/R/")
Y ahora R puede ver el contenido de esa carpeta donde tenemos nuestros archivos de trabajo.
> dir()
[1] "tabla_posiciones.csv"
¡Oh sorpresa! Es nuestro archivo CSV con la tabla de posiciones de la emocionante liga de fútbol local. Vamos
entonces a leerlo en la consola, creando una variable tipo data frame que llamaremos tablapos:
> tablapos
Posición Equipo Puntos Jugados Victorias Derrotas Empates
1 1 La Equidad 9 3 3 0 0
2 2 Junior 7 3 2 0 1
3 3 Independiente Medellín 7 3 2 0 1
4 4 Once Caldas 7 3 2 0 1
5 5 Alianza Petrolera 6 3 2 1 0
> tablapos$Equipo
[1] La Equidad Junior Independiente Medellín
[4] Once Caldas Alianza Petrolera
5 Levels: Alianza Petrolera Independiente Medellín Junior ... Once Caldas
Vemos que sí imprime los nombres. De nuevo, no se preocupen por lo de Levels, que simplemente es porque la
variable es de caracteres entonces R cree que son diferentes categorías o niveles (level en español).
13
8.1. Los datos: pruebas de choques de carros
La seguridad vial es fundamental para la industria automotriz. Por eso hay gente que se dedica a estrellar carros de
prueba contra paredes para estimar la posibilidad de lesiones en situaciones reales. Ninguno de nosotros quiere
sufrir accidentes graves de carretera, pero en el peor de los casos, al menos es bueno saber que el carro que
estamos manejando tiene alguna medida de seguridad para protegernos de fuertes impactos y serias lesiones.
No basta con que el carro tenga cinturones de seguridad y airbags, sino también la carrocería debe proveer algún
tipo de protección.
En este tipo de pruebas se utilizan muñecos (en inglés
dummies) llenos de sensores de fuerza que miden el
impacto recibido. El muñeco puede ubicarse en cual-
quier asiento del carro para la prueba. Con el muñeco
en posición, el carro es arrancado a distancia con con-
trol remoto y se estrella contra una pared u objeto a
una velocidad de 35 mph (alrededor de 55 km/h). En
la Figura 5 puede verse un ejemplo de una prueba de
estas (que en inglés se llama crash test) en la que se
tienen muñecos en el asiento del conductor y el del
pasajero.
Nos han entregado entonces un documento de Excel
(extensión .xlsx) que tiene información sobre diferen-
tes pruebas de choque para muchos modelos de ca-
Figura 5: Prueba de choque con muñecos en asientos
rro diferentes para muñecos que estaban sentados en
frontales. Tomada sin permiso de: Global NCAP.
el asiento del conductor. Nos dicen que estos datos
han sido tomados por la National Highway Traffic Sa-
fety Administration, la agencia que vela por la seguridad vial en todos los Estados Unidos, y que se pueden
descargar libremente de la Data and Story Library de la Universidad Carnegie Mellon del mismo país. Al ver
esta información en Excel, notamos que se tienen 9 columnas diferentes para diferentes medidas. Aunque aquí
no somos expertos en este tema, algo de investigación en Internet nos revela qué significa cada una de estas
columnas:
7. Número de puertas: coupe significa dos puertas y sedan significa cuatro puertas. Algunos vehículos como
minivans tienen puertas raras y no entran en estas categorías.
8. Peso del carro (lb): peso en libras del carro.
9. Tamaño: clasificación del tamaño según su diseño, para diferenciar entre autos deportivos, familiares, ca-
mionetas, etc. Las categorías son: mini, ligero, compacto, mediano, pesado, van, multipropósito (familiares)
y camioneta.
14
Aunque ha sido muy formal la persona que nos ha entregado este documento de Excel, y además nos ha entrega-
do la descripción de cada una de las columnas, esta persona no sabe que nosotros utilizamos R y que nos gusta
más el formato de archivos CSV. Así que lo primero que haremos será crear el archivo CSV, utilizando la función
de “Guardar como” de Excel, donde seleccionaremos la opción “CSV (Comma delimited)(*.csv)”. Al guardarlo, el
archivo en un bloc de notas queda viéndose así:
marca,modelo,lesion_cabeza,g_pecho,carga_femur_i,carga_femur_d,puertas,peso_lb,tamano
Acura,Integra,599,35,791,262,coupe,2350,ligero
Acura,Integra RS,585,NA,1545,1301,sedan,2490,ligero
Acura,Legend LS,435,50,926,708,sedan,3280,mediano
Audi,80,600,49,168,1871,sedan,2790,compacto
Audi,100,185,35,998,894,sedan,3100,mediano
BMW,325i,1036,56,865,NA,coupe,2862,compacto
Buick,Century,815,47,1340,315,sedan,2992,compacto
Buick,Elect. Park Ave,1467,54,712,1366,sedan,3360,mediano
Buick,Le Sabre,NA,35,1049,908,coupe,3240,mediano
[...]
Si al verlo con el bloc de notas, el archivo no se ve así, entonces es posible que Excel haya cometido errores al
guardarlo y debemos corregirlo manualmente. En estos casos la función “Buscar y reemplazar” es útil.
Noten que aquí no hemos puesto ni el símbolo > ni los colores. Esto es porque vamos a estar escribiendo en
el editor de scripts. Noten además los comentarios explicativos al finalizar cada comando. Aunque no es bueno
hacer esto siempre, porque llenamos todo de comentarios, sí es bueno hacerlo ahora al comienzo de las clases
para que nos quede bien claro el por qué de todo. Adicionalmente noten que no utilizamos tildes. Aunque esto
no es obligatorio, generalmente las tildes son problemáticas a la hora de programar porque casi todo ha sido
hecho por gente que habla inglés. Así que aunque no hay problema, vamos a dejar las tildes por fuera al menos
solo en nuestros códigos de R. Ahora necesitamos ubicar nuestro script en el mismo lugar del sistema donde
está guardado el archivo CSV con la información. Vamos a suponer que lo tenemos en alguna carpeta que hemos
creado para este ejercicio en “Mis Documentos”. Si tienen dudas sobre este paso, revisen las secciones anteriores
sobre las rutas en el sistema de Windows:
Ahora simplemente leemos los datos utilizando la función que vimos para archivos CSV. Recuerden que nuestros
datos tienen encabezado con los nombres de las columnas así que debemos especificar la opción header =
TRUE:
15
# Leemos los datos
datos_choques <- read.csv("choques_conductores.csv", header = TRUE)
Recordemos que estamos en el editor de scripts de R. Ahora es un buen momento para llevar nuestro código
a la consola, para que ejecutemos lo que llevamos hasta el momento y asegurarnos de que las librerías cargan
bien y no hubo problemas en la lectura del archivo. Así que seleccionemos todas las líneas con el mouse (o con
el atajo Ctrl + A) y luego corramos todas las líneas con el atajo Ctrl + R. ¿Tuvieron problemas? De pronto no
instalaron alguna de las librerías, o no especificaron bien la ruta y R no pudo encontrar su archivo. Revisen su
código y si es necesario pidan ayuda. En caso de que todo haya ido bien, miremos nuestro data frame con los
datos en la consola. Para esto utilicemos la función head() que nos muestra solo las primeras líneas de un data
frame solo para convencernos de que se han leído bien los datos:
> head(datos_choques)
marca modelo lesion_cabeza g_pecho carga_femur_i carga_femur_d puertas peso_lb tamano
1 Acura Integra 599 35 791 262 coupe 2350 ligero
2 Acura Integra RS 585 NA 1545 1301 sedan 2490 ligero
3 Acura Legend LS 435 50 926 708 sedan 3280 mediano
4 Audi 80 600 49 168 1871 sedan 2790 compacto
5 Audi 100 185 35 998 894 sedan 3100 mediano
6 BMW 325i 1036 56 865 NA coupe 2862 compacto
Ahora con datos reales en nuestras manos, podemos hacer algo de estadística descriptiva.
Lo primero que veremos es la obtención de estadísticos representativos, es decir números como la media, media-
na y la desviación estándar. Para esto es necesario que aprendamos a seleccionar aquella parte de los datos para
los que tienen sentido estas operaciones, que son los datos numéricos más no categóricos. A partir de ahora, una
habilidad importante será la de poder seleccionar información en los data frames. Creemos entonces un data
frame adicional que contenga solamente los datos de tipo numérico de nuestra base de datos:
Detengámonos un segundo y asegurémonos de que entendemos esta línea de código. Estamos creando una nue-
va variable de tipo data frame que se llama datos_numericos. La creamos con base en la variable datos_choques,
pero le estamos diciendo específicamente cuáles columnas nos interesan utilizando los índices entre los corche-
tes. Recuerden que el signo negativo (-) lo que quiere decir es “excepto la posición tal”, por lo que le estamos
diciendo a R que ignore las columnas 1, 2, 7 y 9, que si ustedes revisan la tabla, son las que tienen variables no
numéricas. Con esta nueva variable que tiene solo las columnas numéricas, ahora tiene sentido obtener todas las
cantidades representativas. Para esto vamos a hacer uso de la función stat.desc() de la librería que instalamos
previamente pastecs. Esta función nos hace un resumen de los valores representativos más comunes. Ejecute-
mos la última operación en el editor de scripts para crear en la consola la variable datos_numericos y en la misma
consola probemos la función:
> stat.desc(datos_numericos)
lesion_cabeza g_pecho carga_femur_i carga_femur_d peso_lb
nbr.val 1.750000e+02 173.0000000 1.710000e+02 1.700000e+02 1.760000e+02
nbr.null 0.000000e+00 0.0000000 0.000000e+00 0.000000e+00 0.000000e+00
nbr.na 1.000000e+00 3.0000000 5.000000e+00 6.000000e+00 0.000000e+00
min 1.850000e+02 35.0000000 1.200000e+02 1.030000e+02 1.590000e+03
max 3.665000e+03 97.0000000 2.930000e+03 2.856000e+03 5.619000e+03
range 3.480000e+03 62.0000000 2.810000e+03 2.753000e+03 4.029000e+03
16
sum 1.708310e+05 8936.0000000 1.734650e+05 1.362500e+05 5.157400e+05
median 9.030000e+02 51.0000000 9.960000e+02 6.740000e+02 2.855000e+03
mean 9.761771e+02 51.6531792 1.014415e+03 8.014706e+02 2.930341e+03
SE.mean 3.369263e+01 0.7300050 4.025612e+01 3.409219e+01 4.733956e+01
CI.mean.0.95 6.649886e+01 1.4409220 7.946625e+01 6.730140e+01 9.342994e+01
var 1.986589e+05 92.1929695 2.771149e+05 1.975871e+05 3.944219e+05
std.dev 4.457116e+02 9.6017170 5.264170e+02 4.445077e+02 6.280302e+02
coef.var 4.565889e-01 0.1858882 5.189365e-01 5.546151e-01 2.143198e-01
Como podemos ver, la función imprime los números en un formato algo maluco de leer. Para ver los números de
una manera más clara, vamos a redondearlos hasta 3 decimales utilizando la función round():
Ahora sí los números son más claros. Ahora miremos qué es lo que nos entrega esta función de resumen:
Guardemos entonces estos estadísticos en una variable para que luego podamos usarla para verlos:
Algunas de estas medidas ya son conocidas para nosotros, mientras que otras no tanto. La idea es que al final
de este curso entendamos todas ellas e incluso más. En este caso aprovecharemos para discutir la diferencia
entre los datos NULL y los datos NA. Los datos NULL son campos vacíos en nuestros archivos. Están relacionados
con “huecos” en los datos. Quizás ese día el instrumento estuvo en mantenimiento y no registró mediciones, o el
17
dato se perdió en algún momento. Ahora, lo normal es que no haya datos vacíos en nuestros datos, porque a los
computadores no les gustan los vacíos, es decir, una matriz de datos debe tener algún valor en todas sus celdas,
así el valor sea indeterminado. Es aquí donde aparecen los valores NA, que son datos que sabemos que son
faltantes pero que ponemos en la tabla de datos para que los computadores no tengan problemas procesando los
datos que sí se tienen. Es decir, lo ideal es que siempre la tabla tenga algún valor, así el valor sea indeterminado
o NA, por eso la gente creadora de R se ingeniaron el valor NULL que sirve para rellenar los huecos en las matrices
de manera automática. En términos prácticos, NULL y NA son muy similares, pero es importante que nosotros
entendamos la distinción de que los primeros son “huecos” que nadie se encargó de al menos rellenar con NA
para alertarnos de que faltan, mientras que NA quiere decir que la persona encargada de reportar los datos al
menos sí se tomó el trabajo de informarnos que ese dato por alguna razón no se tomó. Utilicemos la función
mean() para promediar para que veamos la importancia de los valores faltantes. Si promediamos por ejemplo la
columna de datos_choques$lesion_cabeza en la consola:
> mean(datos_choques$lesion_cabeza)
[1] NA
Vemos que R no se atreve a promediar datos que incluyen datos faltantes automáticamente. Esto porque se
quiere obligar al analista de los datos que sea consciente de que su información tiene defectos. Si queremos
promediar a pesar de la incertidumbre en ese dato particular (como lo hace automáticamente por nosotros la
función stat.desc()) hay que utilizar la opción na.rm = TRUE que le indica a R que ignore esos valores faltantes:
Comprueben que este fue el mismo valor que nos entregó la función stat.desc() para esta columna.
Hay varias cosas para explicar aquí. La primera es la manera de seleccionar filas y columnas. Esto es contrario
a lo que se mostró en clase (pido disculpas): a la hora de seleccionar los índices entre corchetes la estructura es
variable[filas, columnas]. Y para seleccionar filas y columnas hay distintas opciones. En la sección anterior vimos
cómo seleccionar algunas columnas numéricas, que también lo volvimos a hacer en esta ocasión, señalando
cuáles columnas no queríamos. Pero en este caso también hemos escogido las filas usando un condicional que
nos ayuda a filtrar solo las filas que cumplan la condición, en este caso que en la columna marca sean equivalentes
a Chevrolet. Si comparamos con la marca Toyota:
Podemos comparar los distintos estadísticos y concluir que en términos generales, la marca Toyota produce
carros más seguros (esta conclusión es a vuelo de pájaro, así que no se debe tomar seriamente). Otra forma de
seleccionar las filas es usando rangos de la manera inicio:final:
En fin, en R hay mil formas de hacer las cosas. Lo importante es que practiquemos y ganemos confianza a la hora
de seleccionar un subconjunto de datos que nos interese.
18
Figura 6: Todo gráfico con ggplot2 son capas una encima de otra. Adaptada sin permiso del libro de Andy Field.
No siempre se necesitan guardar los datos en archivos de texto, solo ver los números en la consola basta, pero
es importante saber al menos cómo se hace.
Ahora viene la parte divertida según John Tukey, una leyenda del análisis de datos y además inventor del mé-
todo numérico más rápido que existe. Y es cierto, en términos generales, dibujar es muy entretenido. Venden
exitosamente libros de mandalas por ejemplo. Ahora, seamos honestos, esto es programar y no tanto colorear
mandalas, pero aún así vamos a creer que estamos haciendo dibujos bonitos. Para esta parte hay muchas opcio-
nes. No existe una sola única forma de hacer gráficas en R y diferentes instructores podemos enseñar distintas
maneras. Ustedes en Internet pueden ver de pronto ejemplos de otras personas que utilizan métodos alternativos
al que presentaremos aquí. Eso está bien, en la variedad todo es mejor. Simplemente por limitaciones de espacio
y de tiempo, no vamos a enseñar todas las formas o hacer un discurso de por qué una es mejor o peor que otra.
Aquí utilizaremos la librería ggplot2 para hacer gráficas. Esta la instalamos en las secciones anteriores. ¿Por qué
ggplot2? Porque sí.
Lo primero que debemos entender en ggplot2 es que los dibujos se construyen a partir de capas, unas encima
de otras, al mismo estilo de la cebolla más cabezona. La Figura 6 muestra a qué nos referimos cuando hablamos
de las capas. Así que comenzamos con un lienzo en blanco y vamos a ir agregándole cosas encima para construir
finalmente un dibujo bonito.
19
8.4.1. El lienzo o fondo del dibujo
Nos referimos a lienzo como esa primera capa que hay que crear para hacer un dibujo. Es como el fondo blanco.
Para este paso se utiliza la función ggplot(), en la que debe especificarse el data frame que contiene los datos
que queremos dibujar. Aquí además se especifican las variables que van a ir en el dibujo. Estas se “empaquetan”
en algo que se llaman aes(), de la palabra en inglés aesthetics. Los aesthetics son las propiedades estéticas
que tiene cada capa que adicionemos. Pueden especificarse para todas las capas, o para alguna en específico.
Algunas propiedades son formas (shape), colores (colour ), tamaños (size) y posiciones (location). Entonces la
primera propiedad estética o aes() es la que se define desde la primera capa del dibujo, que corresponde a las
variables a dibujar. Si hay más de una variable, como cuando son x e y, se especifica así: aes(x = variable1,
y = variable2). En este primer ejemplo vamos a crear un histograma para la variable de lesion_cabeza, así que
el script comienza así:
¡Este es solo el comienzo del dibujo, todavía no está terminado! Si usted se acelera y ejecuta la línea de
código que acabamos de escribir, verá que no sucede nada. Apenas estamos comenzando a dibujar y solo
llevamos el fondo en blanco, que no vemos. Pero al menos ya le dijimos a R que vamos a dibujar una variable del
data frame datos_choques y que la variable es lesion_cabeza.
8.4.3. Histogramas
En este caso queremos dibujar un histograma, así que le añadiremos a nuestro comando inicial un geom_histogram()
con algunas opciones de colores. Las opciones más importantes a la hora de crear un histograma son la del nú-
mero de intervalos de clase, y el ancho del intervalo. Estas opciones pueden especificarse dentro del comando
geom_histogram() con las palabras bins para el número y binwidth para el ancho de cada uno. Por defec-
to, ggplot2 dibuja los histogramas con 30 clases y por ahora eso está bien para nosotros. Para agregar capas
utilizamos el símbolo de adición (+). Así:
Noten que estas líneas de código van a empezar a volverse largas. Una estrategia para que no se hagan muy
largas es partir las líneas después del símbolo de adición. Ahora, R no tiene ningún problema en que se partan
las líneas en algún lugar, pero entonces debemos recordar que para que la instrucción funcione hay que señalar
o seleccionar ambas líneas de código antes de usar el atajo Ctrl + R o F5. Los nombres de los colores pueden
buscarlos en Internet, son muchas las opciones, pero siempre deben ir en comillas. Puede que encuentren su
color favorito en la vida, si es que ya no tienen uno. La opción colour sirve para las líneas de los contornos,
mientras que fill se refiere al relleno de los rectángulos. Ahora sí puede ver el gráfico que estamos creando.
Ejecute esa última línea y luego vaya a la consola y escriba el nombre del dibujo:
20
Frecuencia absoluta
20 20
count
10 10
0 0
0 1000 2000 3000 0 1000 2000 3000
lesion_cabeza Criterio de lesión de cabeza
(a) (b)
Frecuencia absoluta
25
20
Frecuencia absoluta
20
15
10
10
5
0
0
0 1000 2000 3000
0 500 1000 1500 2000 2500 3000 3500
Criterio de lesión de cabeza Criterio de lesión de cabeza
(c) (d)
> histo_lesion
Entonces verá el histograma que se muestra en la Figura 7a. Aunque esta figura ya nos está mostrando infor-
mación valiosa, como que hay unos pequeños casos aislados de valores por encima de 2000, todavía le faltan
pequeños detalles. Por ejemplo, vamos a nombrar bien los ejes. Para esto hay que agregarle otra capa al dibujo.
Una que se utiliza la función labs(), que viene de la palabra labels en inglés que quiere decir etiquetas. Una vez
más, agreguémole esto al comando del dibujo:
Ahora volvemos a ejecutar el comanto histo_lesion en la consola para ver el nuevo dibujo y vemos el que
aparece en la Figura 7b.
Pero seguro hay alguno de ustedes que aún no está contento. Quizás ese fondo no les gusta. Para este problema
han creado unos temas que podemos utilizar para cambiar la apariencia general del dibujo:
21
theme_classic(): sin cuadrícula, solo líneas en los ejes.
Y hay más e incluso se pueden definir nuevos. Por ahora vamos a volver a lo clásico:
# Histograma para la variable lesion_cabeza
histo_lesion <- ggplot(datos_choques, aes(lesion_cabeza)) +
geom_histogram(colour = "Black", fill = "DodgerBlue") +
labs(x = "Criterio de lesión de cabeza", y = "Frecuencia absoluta") +
theme_classic()
El resultado ahora se ve en la Figura 7c. Finalmente, se demuestra aquí la manera en que pueden escogerse los
lugares donde van los tick marks que son esas rayitas pequeñas que aparecen en los ejes:
scale_x_continuous(): cuando se tiene una variable continua en el eje x, podemos escoger cada cuanto
van las rayitas y sus valores. Para esto se utiliza la opción breaks que recibe un vector con los lugares
donde queremos las rayitas. Lo usual es tener rayitas cada cierto número fijo de valores, para eso usamos
la función seq(inicio, fin, incremento) que nos permite crear vectores espaciados uniformemente desde el
inicio hasta el fin con un mismo incremento.
scale_y_continuous(): igual que el anterior pero para el eje-y.
A continuación vamos a definir que en el eje-y las rayitas vayan cada 5 desde 0 hasta 40 y que en el eje-x vayan
de 0 a 4000 cada 500:
# Histograma para la variable lesion_cabeza
histo_lesion <- ggplot(datos_choques, aes(lesion_cabeza)) +
geom_histogram(colour = "Black", fill = "DodgerBlue") +
labs(x = "Criterio de lesión de cabeza", y = "Frecuencia absoluta") +
theme_classic() +
scale_y_continuous(breaks = seq(0,40,5)) +
scale_x_continuous(breaks = seq(0,4000,500))
El resultado de esto último se ve en la Figura 7d. La conclusión al ver estos histogramas es que parece que hay
unos pocos datos muy grandes que nos están perjudicando la forma de campana que tienen las distribuciones
normales. Aunque ese tema todavía no lo manejamos.
22
● ●
2000 ●
● 2000 ●
●
●
● ● ●
● ●
1000 1000
Figura 8: Primeros boxplots con ggplot2: (a) sin utilizar la opción fill = puertas dentro del aes(), (b) utilizán-
dolo.
23
●
2000 ● ●
● ● ●
● ●
●
●
1000
3000
●
2000 ● ●
● ● ●
● ●
●
●
1000
Figura 9: Más boxplots con ggplot2. (a) sin utilizar la opción fill = tamano dentro del aes(), (b) utilizándolo.
24
Promedio de criterio de lesión de cabeza
1500
1000
500
Figura 10: Primer diagrama de barras usando stat_summary() para obtener los promedios y dibujarlos como
barras.
Esta figura es más para que vean qué podemos hacer con R, pero con histogramas y boxplots es suficiente. Más
adelante aprenderemos más funciones de ser necesario. La Figura 10 muestra el resultado de dicho comando.
Este ha sido solo un abrebocas. Las funciones para dibujar son demasiadas y apenas estamos comenzando. Por
ahora simplemente se han mostrado los resúmenes gráficos más importantes: histogramas y boxplots. En el nivel
que estamos es importante que al menos puedan utilizar estas dos herramientas. Los queremos motivar a que
intenten hacer todas estas mismas gráficas que hemos hecho aquí para las otras variables como carga_femur_i
y carga_femur_d y demás.
Recomendación aquí hemos escritos códigos de scripts a la loca para que ustedes vean cómo se hicieron los
gráficos. Pero es importante que ustedes sean inteligentes a la hora de escribir sus códigos. Traten de que cada
código tenga una sola función principal. Por ejemplo un solo script puede encargarse del resumen numérico con
stat.desc(), otro script puede encargarse de dibujar un solo histograma, y otro puede dibujar un solo boxplot. Es
decir, no intenten poner todo en un solo salchichón de código con muchos renglones porque entonces se vuelve
inmanejable.
25
Figura 11: Haciendo uso de múltiples ventanas de gráficos.
En la Figura 11 se muestra una sesión de R que se utilizó para producir las gráficas de esta sección. Noten que
hay muchas figuras que podemos observar al tiempo. Eso sucedió porque cada vez que se quería dibujar algo
nuevo, se ejecutó en la consola el comando:
> dev.new()
Ahora, para guardar las figuras solo es necesario tener enfocada alguna de las ventanas de gráficos e ir al menú
“Archivo” para elegir la opción “Guardar como”, donde los formatos que recomendamos aquí son primero PDF y
segundo PNG. Ambos son formatos livianos y muy portables como para enviar por correo o incluir en documentos
más elaborados. Lo bueno de guardar imágenes en PDF es que se conserva toda la información de la imagen
sin perder calidad (zoom infinito). Mientras que el formato PNG es como si la imagen estuviera impresa en papel
(solo que digital) así que algo de la calidad se perdió a la hora de imprimirla (borroso a partir de cierto zoom).
26