introducción a r utilizando rstudio server

90
1 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected]) Introducción a R utilizando Rstudio y Rstudio-server Por Edwin Aguiar INTA EEA Corrientes (Grupo Tics Corrientes) Esta obra está licenciada bajo la Licencia Creative Commons Atribución –No Comercial- Compartir Igual 3.0 Unported. Para ver una copia de esta licencia, visita http://creativecommons.org/licenses/by-nc-sa/3.0/.

Upload: edwin-aguiar

Post on 13-Aug-2015

584 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: Introducción a R utilizando Rstudio server

1 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Introducción a R utilizando

Rstudio y Rstudio-server

Por Edwin Aguiar

INTA EEA Corrientes (Grupo Tics Corrientes)

Esta obra está licenciada bajo la Licencia Creative Commons Atribución –No Comercial- Compartir Igual 3.0 Unported. Para ver una copia de esta licencia, visita http://creativecommons.org/licenses/by-nc-sa/3.0/.

Page 2: Introducción a R utilizando Rstudio server

2 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Índice Introducción, sentido y alcance 2

1 ¿Por qué no Excel? 2 2 ¿Qué se necesita para usar este manual? 3 3 Conocer la interfaz de Rstudio 5 4 Panel de script 5 5 Abrir un script 6 6 Crear un script 6 7 Panel consola (Console) 6 8 Panel espacio de trabajo (Workspace) 8 9 Panel de Archivos, Paquetes, Graficas y Ayuda 10

El lenguaje R y algunas funciones 11 1 Presupuestos básicos 11 2 Iniciando R 11 3 Objetos como entidades 13 4 operaciones con objetos 14

Algunos objetos en particular 15 1 introducción al tipo de datos 15

2 vectores (arrays o arreglos) 17 a. Una definición formal, creación y manipulación 17 b. Operación con vectores 19 c. Operaciones entre un vector, operadores y funciones 20 d. Operaciones entre vectores 21 e. Poner nombres al índice: una razón 22 f. Vectores de caracteres 22 g. Vectores lógicos, introducción a la lógica matemática 24

3 Factores: un ordenamiento categórico 24 4 Matrices: definiciones y operaciones 25

a. Operaciones elementales sobre matrices 25 b. Operaciones con filas o columnas en matrices 29 c. Un ejemplo real de trabajo con una matriz 31 d. Mas operaciones y funciones con matrices 32

5 Listas 33 a. Aplicando funciones a listas vectores y matrices 37

6. Series temporales 38 7. Dataframes 39 8. Operadores y funciones 41 a. Una noticia, varios ejercicios 43 b. Como hacer secuencias numéricas 45 9. Leer y guardar datos 46 a. Repositorio de datos 46 b. Para comenzar e iniciar sesión en Rstudio 46 c. Configurar directorio de trabajo 49 d. Errores 49 e. Lecturas desde archivos 50

Page 3: Introducción a R utilizando Rstudio server

3 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

f. Escritura hacia archivos 52 g. Desde la web 53 h. Excel y otros tipos de formatos 53 i. Conexiones ODBC, lectura y escritura en Bases de Datos 54 j. Introducción al mundo de las Bases de Datos Relacionales 56 k. R y MySql 57 l. Conductos ODBC 58 m. Como grabar datos en MySql 58 n. Otra forma de guardar en MySql 59

Creación de un proyecto partiendo de cero 60 a. Pasos del proyecto 62 b. Fuente de datos 62 c. Iniciando el proyecto 63 d. A escribir se ha dicho 64 e. Distancias (concepto) 65 f. Conclusión del dendograma 66 g. Guardando gráficos 66 h. Finalizando el proyecto 67

Librerías en R 68 a. Librerías precargadas 68 b. Librerías que no están cargadas ni instaladas 69 c. ¿Y si no tengo internet? 70 d. Repositorios de R 71

Graficas con R y Rstudio 73 a. Índice y ejemplos de algunas funciones graficadoras 73 b. Las distribuciones en 3D 74 c. Aspectos generales sobre gráficos 79 d. Ejemplos de plot() 79 e. Uso de barplot() 80 f. Realizar varios gráficos en una sola pantalla 80 g. Parámetros adicionales a los gráficos 81 h. Ejemplo de grafica bidimensional 81 i. Ejemplo de graficación multidimensional 85 j. Concluyendo 87

Bibliografia 89

Page 4: Introducción a R utilizando Rstudio server

4 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Introducción: sentido y alcances La intención de este documento no es ser un manual ni una guía de R, sino solo una exposición de algunos métodos para trabajar R mediante la interfaz de Rstudio, esta es una aplicación grafica (frontend) de R y un servidor de R que permite el uso desde cualquier punto de la red interna o externa que posea la capacidad de conexión a dicho servicio. Además tratamos sobre como se complementa con el acceso y trabajo en MySql, una base de datos relacional que nos permite cargar también remotamente los datos de nuestros trabajos/investigaciones y luego desde un script de R ejecutar las operaciones estadísticas, de calculo o de minería de datos que necesitemos.

1. ¿Por qué no Excel? Las ventajas de este sistema están dadas por varios factores. El primero es la seguridad (un servidor es mas seguro y eficiente en términos generales que una pc individual, ya que cuenta con sistemas de contingencias eléctricas, seguridad física y lógica, actualización y backup permanente, etc); la disponibilidad (porque al no estar físicamente en ningún lado pero si virtualmente en la nube o en una red LAN permite acceder desde cualquier punto conectado); la no instalación y mantenimiento de otro programa en una pc sobrecargada con el riesgo consiguiente de fallo o perdida de datos por colapso de dicha pc; el acceso seguro desde cualquier plataforma que integre la web (Android, Apple IOS, Linux, Windows) con independencia total del hardware que usted utilice y finalmente que esta configuración de servers de R y Mysql son de uso libre y gratuito (no poseen licencias de pago) y de uso intenso por investigadores y científicos de todas las universidades, organismos de investigación y desarrollo, gobiernos, empresas y particulares.

Al respecto sobre el uso de Excel como base de datos, nos advierte el Dr Duncan Golicher1

…”muchos estudiantes piensan que una hoja de cálculo como Excel es una base de datos. No lo es. Manejar Excel como una base de datos relacionada es posible, pero no es nada fácil, ni para usuarios expertos que saben programar en Visual Basic para aplicaciones. Para un usuario normal sin experiencia con bases de datos sería imposible manejar datos con una estructura jerárquica compleja en Excel. En cambio, muchas cosas que son difíciles en Excel son fáciles en una base de datos1. Además la exportación de datos de una base de datos a Excel para su procesamiento siempre es fácil. Hasta con ODBC se puede hacer una conexión directo para que Excel puede usar la potencia del “structured query language” directamente.

Es común encontrar una resistencia a tomar el camino del uso de bases de datos entre usuarios con algo de experiencia intermedia con Excel. Al tener contacto con una base de datos de verdad como Access, MySQL o PostgreSQL usuarios quienes han encontrado sus propios métodos de lograr resultados en Excel frecuentemente se quejan que el programa no les deja estructurar y capturar

1 “Como mantener tus datos de investigación ordenados” Duncan Golicher, February 13, 2008

Nota 1

Aunque este documento verse sobre Rstudio server y su uso a través del navegador web, es perfectamente aplicable a un Rstudio instalado en su pc.

Page 5: Introducción a R utilizando Rstudio server

5 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

los datos como quieren. ¡Exactamente! Muy bien. Esta es precisamente su mayor ventaja. Si quieres mantener tus datos con una estructura que no es posible en una base de datos, entonces estas ciertamente pensando en una estructura equivocada para tus datos. Por todo lo lógico que te parezca, tu estructura casi siempre va a ser difícil de comunicar a los demás y probablemente va a causarte muchos problemas al largo plazo.”

En la imagen lateral podemos apreciar el software RStudio corriendo desde un navegador WEB en un entorno Windows 7. En el detalle de la consola se aprecia que R corre en un servidor Linux (Debian). En el escritorio de Windows también se aprecian avanzadas herramientas de investigación botánica(“Plants vs Zombies”).

La creación de un servidor con Debian (Linux), la instalación y funcionamiento del servidor de bases de datos MySql, la creación de conductos ODBC, la instalación y configuración de Rstudio server, la administración de usuarios que acceden a R la dejaremos para otro documento, ya que se requieren conocimientos específicos sobre varias cuestiones anexas, en esta guia solo nos enfocaremos en el usuario, un técnico o profesional de otras ciencias que requiera el uso de R dentro de un entorno institucional o en su propio sistema.

2. ¿Que se necesita para utilizar este manual? La lista de requerimientos:

• Una pc, con acceso a internet • Conocimientos sobre estadísticas y matemáticas

acordes a su profesión • Quizás 1500 cc de masa encefálica, aunque esto

puede ser optativo

Partimos del presupuesto básico que el usuario posee las nociones de estadística básicas, distribuciones, etc., que incluso haya utilizado Infostat, este software es en realidad un frontend de R. Es decir que el núcleo de Infostat es R. De hecho R es una consola de comandos, lo que hacen programas como RComander, Rstudio e Infostat es presentar una interfaz amigable para evitar pasos intermedios o el tipeo de una serie de parámetros que son quienes ejecutan las

Nota 2

¿Por qué Debian? Rstudio server puede ser adaptado para cualquier distribución de Linux, en Debian ya ha sido ajustada (compilada) para trabajar con solo dos clics. En Windows no es posible correr el server de Rstudio, salvo, claro esta, que virtualicemos con VirtualBox (Oracle) el mencionado Debian. Esto solo tendría sentido en una red lan en la que varias maquinas utilicen Rstudio, si es solo una individual Rstudio (no server) corre en Windows y Linux sin mas tramite que instalar R previamente.

Page 6: Introducción a R utilizando Rstudio server

6 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

sentencias y provocan las salidas de pantalla. De todas maneras si no posee experiencia en Infostat o R este manual tratara de guiarlo mediante un esquema de conocimiento basado en un crecimiento secuencial mediante la practica del texto.

No tema meter manos en Rstudio, siga las indicaciones de los ejemplos y profundice con sus propias necesidades las lagunas que necesariamente contiene este documento.

3. Conocer la interfaz de Rstudio En la imagen vemos que hay cuatro paneles iniciales, los dos verticales de la derecha y dos de fondo oscuro a la izquierda. En todos ellos es posible configurar pestañas que a su vez contienen otros elementos. Sus nombres, de izquierda a derecha verticalmente, son:

• Panel de script o de “source” o código fuente del script, arriba a la izquierda. • Panel de consola o salida de R, abajo a la izquierda. • Panel de Espacio de trabajo, variables o historia; arriba a la derecha. • Panel de ayuda, salida grafica, paquetes etc; abajo a la derecha

4. Panel de Script Este primer panel es donde cargamos desde un archivo con extension “.r”, por ejemplo “script_algo.r” o creamos el codigo que deseamos que ejecute R (y luego guardamos). Para cargar un script ya existente se hace desde el menu

File Open File o desde la carpeta debajo de iconos del menu. Tambien existe un atajo de teclado CTRL+O que abre el menu de donde seleccionamos el script que necesitamos. Estos, como mencionamos en un parrafo anterior, se distinguen por su extension es “.R” En el ejemplo de la imagen el script guardado es “script_conexionDB.R”.

Los nombres de sus script los determina ud, debe tener en cuenta que tengan una nomenclatura que le recuerde el objeto del mismo y su version. Es muy comun despues de un tiempo olvidarse para que era tal o cual, o como se llamaba ese que esta buscando. Tambien a ese respécto es una buena idea comentar el codigo que se escribe, con aclaraciones sobre el objeto de cada paso.

Page 7: Introducción a R utilizando Rstudio server

7 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Tambien es usual que se usen varios scripts en un solo proyecto, ya que ellos realizarian un trabajo determinado cada uno; de esta forma es posible reutilizar los mismos en varias cosas sin tener necesidad de escribir un solo script largo y complejo. En programacion a esto se le denomina “dividir para vencer”, resolver el problema por partes sencillas que conforman una solucion general.

5. Abrir un script Al seleccionarlo aparece el panel de script (si no estaba) y el codigo. En este ejemplo es un conector a una base de datos para obtener una variable llamada “bruto” desde una tabla “Datos”. Para simplificar hemos restringido los datos a solo 100, ya que la “Datos” posee mas de 15mil registros.

Mas adelante veremos como seleccionar datos desde nuestras tablas, particularizando lo que se denomina “query”, consulta en lenguaje sql.

No se preocupe si en este momento no comprende el código o le es confuso, mas adelante lo explicaremos en detalle, por ahora nos concentraremos en la lógica de trabajo de Rstudio, luego pasaremos al lenguaje R.

6. Crear un script nuevo Desde el menú FILE selecciona NEW y de allí la opción R Script, también con el icono debajo de FILE que posee un signo + en un circulo verde y por supuesto con el atajo de teclado CTRL+SHIFT+N

Al darle la opción de guardar a su script, le podrá colocar el nombre que desee al mismo. También es relevante que configure un directorio en donde guardara sus scripts, archivos, proyectos y salidas, tema que también trataremos mas adelante en el texto.

7. Panel de Consola En este panel se obtienen las salidas de los scripts, pero también es el sitio en donde se puede escribir código directamente para ver resultados. Lo que escriba aquí no se guardara en el script, es una salida de prueba o transitoria.

Nota 3

¿Qué es una base de datos relacional y MySql? Una base de datos es una colección de tablas que contienen registros y se hallan relacionadas entre si por algún tipo de índice. A diferencia de una planilla de calculo están diseñadas para contener registros y realizar operaciones ABM (Altas, bajas y modificaciones) o CRUD (en ingles). MySql es una de las más populares en el mundo web (la usa Google y Facebook por ejemplo) y es libre y gratuita.

Page 8: Introducción a R utilizando Rstudio server

8 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Sin embargo es posible guardar el estado de esta pantalla (y también el panel de variables e historia) en un archivo de “workspace” (espacio de trabajo) el cual es posible cargar posteriormente o indicar por defecto uno en especial. Este espacio se guardará cuando al salir del programa le interrogara si desea preservarlo o no. En la imagen vemos como se rescata parte del código de “history” y se vuelve a ejecutar en la consola de comandos:

¿Cómo se carga desde history el código fuente? Copiando y pegando a la consola de comandos o utilizando el botón “To Console” como vemos en la imagen; también es posible copiar al script con el otro botón de “To Source”

¿Cómo se trabaja en la consola? Escribiendo las funciones y sus parámetros. En general casi todo aquí son funciones que realizan determinados cálculos en base a parámetros que usted introduce. Un ejemplo:

tipee en la consola 2+3 y [enter], la salida será 5.

Ha efectuado una simple suma. Si corremos el script de la primera pantalla nos saldrá el resultado de la imagen. Si tenemos una variable llamada “P” y la llamamos nos dará una pantalla de números, pero no así si llamamos a “p”. R es “case sensitive” o sea sensible a las mayúsculas. No es lo mismo “p” que “P”

Hagamos una salida y probemos: en la pantalla de script cargamos un código, ahora pinte con el cursor parte del texto. Luego con esta selección pulse Run en la parte superior derecha de Script. Esto ejecutara el script en la

Nota 4

¿Por qué escribir “;” al final de la línea de código? Es una convención de programación que indica que se ha llegado al final de la instrucción. Sin embargo puede escribir el final de la línea sin el punto y coma, el script o comando funcionara aunque la buena práctica es colocarlo ya que evitaría posibles mal interpretaciones y errores de ejecución.

Page 9: Introducción a R utilizando Rstudio server

9 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

consola (y hará otras cosas mas). La línea seleccionada tendrá una salida por consola indicando el estatus y si todo este bien, que no falten otras variables, funciones etc:

El resultado será el de la pantalla que ilustra este apartado, constatamos que en el panel de “Workspace” existe “P” y no “p”, panel que describiremos en el próximo ítem.

Observemos ahora al vector “P”, por consola extraemos su información mediante el uso de funciones.

Las funciones son una serie de códigos que se hallan implícitos en las librerías de R y que al llamarlas con un nombre, cargar uno o más parámetros, realizan una operación determinada. Esas funciones son en realidad una compleja serie de códigos que alguien ha programado y puesto a disposición de los usuarios.

En este ejemplo usaremos varias funciones de un solo parámetro que nos dará información relevante, que podemos ver en la imagen.

• length(P) nos dara la longitud del vector • sum(P) es la sumatoria de los valores que componen el vector • mean(P) es el promedio matemático del vector • median(P) es la mediana del vector y • sort(P) es el ordenamiento del vector de menor a mayor.

Para finalizar este apartado, si usted llena la consola y desea limpiarla solo debe pulsar CTRL+L y despejara la vista.

Page 10: Introducción a R utilizando Rstudio server

10 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

8. Panel de Workspace e History

El panel de “Espacio de trabajo e historia”2 nos remite a donde se pueden visualizar las distintas variables que se van generando, en la primera imagen vemos las variables que se han capturado al correr el script: Allí observamos “apellidos” que consiste en una matriz de 100x2 elementos. Mas tarde volveremos a ella para visualizar sus valores. En la segunda imagen del apartado tenemos la historia de los distintos comandos que hemos ido introduciendo durante una ejecución.

Este historial se puede eliminar por completo al pulsar la escobilla o eliminar selectivamente en partes señalando las

líneas y utilizando el botón con la equis roja. Al salvar el Workspace guardara también, además de las variables, este historial depurado.

9. Panel de Files, Plots, Packages, Help El panel de archivos, salidas graficas, paquetes y ayuda es muy versátil y útil. En sus distintas pestañas encontramos utilidades de navegación por directorios donde tengamos archivos, salidas graficas que podemos exportar a varios formatos o visualizar en una pantalla aparte con un zoom, la instalación de librerías (paquetes) que nos permiten ampliar las funciones de Rstudio (como el ejemplo del script que requiere Rodbc) mediante el acceso directo a los repositorios en la Internet o desde un archivo que hayamos

descargado y copiado a nuestro sistema si estamos fuera de línea y las ayudas. El repositorio que

2 Suena igual a un ONG de alguna cosa ¿No?

Page 11: Introducción a R utilizando Rstudio server

11 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

por defecto utilizamos es “Argentina (La Plata) - Universidad Nacional de La Plata” aunque también podemos optar (dentro de nuestro país) por “Argentina (Mendoza) Conicet Mendoza” o por cualquiera de los 86 repositorios en varios países y universidades del mundo. En el menú TOOLS -> OPTIONS opción CRAN MIRROR se selecciona desde donde obtener los paquetes y actualizar R.

En la consola trabajamos con “P” y tomamos varias medidas estadísticas utilizando funciones de R y graficando el vector “P” que esta ordenado de menor a mayor:

En la imagen mas pequeña realizamos la desviación estándar “a mano”: raíz cuadrada de varianza sqrt(var(P))

Como se podrá el valor “40” que es predominante en este análisis con una frecuencia de 45% del total de las

muestras y en la graficación de barras es comprobable visualmente:

Como colofón a este breve ejercicio de uso de consola, ayuda y graficas, comprobamos que la sumatoria de las frecuencias sea correcta, con sum(prop.table(x)) y cuyo resultado 1 es el 100% de las muestras.

Page 12: Introducción a R utilizando Rstudio server

12 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Para comprender que significan prop.table() sum() y otras funciones recuerde que esta la ayuda, en dicha pestaña puede introducir el termino que desea conocer o navegar entre los paquetes (pestaña packages) y allí encontrara las explicaciones al respecto; sin embargo si aun así no halla lo que desea (por ejemplo como realizar determinado calculo o dudas sobre funciones) posee la lista de R en español en cuyo ámbito científicos y técnicos de todas las disciplinas intercambian información y ayuda desinteresadamente.

Con esto hemos llegado al resumen de los paneles de Rstudio, de los que en el menú podrá también acceder y realizar operaciones desde los numerosos submenús.

El lenguaje R y algunas funciones

1. Presupuesto básico Estimamos que Ud. posee conocimientos de estadística, por lo que omitiremos los conceptos inherentes a, si en cambio como realizar las operaciones y procedimientos para alcanzar el manejo fluido de Rstudio-server (o Rstudio en su pc). También en necesario poseer nociones de matemáticas.

En este apartado nos introduciremos en el lenguaje de scripts de R y en el manejo de algunas funciones genéricas (y no tanto) como ejemplos de trabajo. Posteriormente trabajaremos en la adquisición de datos mediante varias formas (archivos excell, csv, DB etc)3.

2. Iniciando R Cuando arranca RStudio aparece en la consola una leyenda explicativa:

R version 2.14.1 (2011-12-22) Copyright (C) 2011 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-pc-mingw32/x64 (64-bit) R es un software libre y viene sin GARANTIA ALGUNA. Usted puede redistribuirlo bajo ciertas circunstancias. Escriba 'license()' o 'licence()' para detalles de distribucion. R es un proyecto colaborativo con muchos contribuyentes. Escriba 'contributors()' para obtener más información y 'citation()' para saber cómo citar R o paquetes de R en publicaciones. Escriba 'demo()' para demostraciones, 'help()' para el sistema on-line de ayuda, o 'help.start()' para abrir el sistema de ayuda HTML con su navegador.

3 "por mí se va hasta la ciudad doliente, por mí se va al eterno sufrimiento, por mí se va a la gente condenada. La justicia movió a mi alto arquitecto. Hízome la divina potestad, el saber sumo y el amor primero. Antes de mí no fue cosa creada sino lo eterno y duro eternamente. Dejad, los que aquí entráis, toda esperanza." Dante Alighieri Divina Comedia, Canto III; aunque se sospecha que lo plagio de la entrada a la catedra de Estadísticas de la Facultad de Ciencias Exactas de …

Nota 5

Para suscribirse a la lista de R en español debe darse de alta en la dirección https://stat.ethz.ch/mailman/listinfo/r-help-es

Page 13: Introducción a R utilizando Rstudio server

13 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Escriba 'q()' para salir de R. [Workspace loaded from ~/.RData] Loading required package: sp Mensajes de aviso perdidos package ‘sp’ was built under R version 2.14.2 >

En ella nos informa que versión de R se esta ejecutando en Rstudio (en este caso la ultima de R al redactar estas líneas es 2.15.n.n, por lo que la que corremos esta un poco desfasada); la licencia aplicada (GNU); algunos comandos –funciones- y algunos mensajes sobre paquetes. El símbolo final “>” es el prompt. Se llama prompt o cmd al carácter o conjunto de caracteres que se muestran en una línea de comandos para indicar que está a la espera de órdenes. Es una herencia de la época en que los sistemas se basaban en ventanas de comandos. Los programas como VwMaxima (calculo matemático y simbólico, también libre y gratuito) y R utilizan la consola para introducir los datos directamente, a diferencia de otros programas que poseen interfaz (SAS, SPSS, Infostat, etc) que utilizan elementos gráficos para dicha función.

En resumen: aquí, en el prompt, escribiremos nuestras funciones.

• Un detalle a tener en cuenta: cada línea termina en “;” cuando se desea finalizar la instrucción. Si no lo hace la consola esperara a que termine en la próxima, el prompt agregara un “+” indicando que son varias líneas a ejecutar. No se olvide de colocar “;” al final de cada instrucción tanto en el script como en la consola.

• Para limpiar la consola pulse CTRL+L, despejara la misma. • R es un lenguaje que trabaja en base a “objetos”, esto en programación significa que las

formulas, funciones, datos etc consisten en una entidad que poseen ciertas características, por ejemplo un parámetro: sqrt(n) quiere decir que hay un objeto “raíz cuadrada” que recibe un parámetro (un numero) “n” y nos da una salida x.

• Esta funcionalidad es muy potente, ya que usted no necesita saber como funciona sino solo que parámetros requiere para obtener el resultado. Otro ejemplo, con dos parámetros:

o > n<-c(1:10) o > n o [1] 1 2 3 4 5 6 7 8 9 10

Arroja un vector llamado “n” que concatena valores del 1 al 10. Como se puede apreciar en esta breve formula hay varios conceptos juntos (la concatenación, el vector, la serie de 1 a 10) todas ellas funciones. Esto nos permite suponer que las funciones se pueden agregar, y esta en lo correcto si piensa asi.

• Un ultimo ejemplo de esta afirmación anterior: o > alfa<-rnorm(10) o > alfa o [1] 0.81861407 -2.18540730 1.12167243 -2.12783387 -0.17183908 0.09290526 0.88798608 -0.11830396 -

0.46704494 o [10] 0.23676978 o > sort(alfa) o [1] -2.18540730 -2.12783387 -0.46704494 -0.17183908 -0.11830396 0.09290526 0.23676978 0.81861407

0.88798608 o [10] 1.12167243 o

Page 14: Introducción a R utilizando Rstudio server

14 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

o > #------ ahora probamos las dos funciones juntas mas una tercera, multiplicar ----------------------- o > sort(beta<-rnorm(10))*10 o [1] -6.5524348 -5.0647560 -2.8489841 -1.9426385 -0.6655324 -0.0572295 5.7592122 7.7804564

9.0297206 31.236577

En este ejemplo creamos una variable “alfa” a la cual cargamos una serie de 10 números aleatorios creados de una distribución normal (rnorm) y luego los ordenamos en orden creciente (sort), sin embargo en la ultima sentencia sort(beta<-rnorm(10))*10 hacemos las tres cosas juntas: crear los números aleatorios en un vector “beta”,

ordenarlos y multiplicarlos por 10. La simplicidad y la potencia de calculo de R es su mayor ventaja, la sencillez del lenguaje y uso también es una gran ventaja. Finalmente para cerrar esta breve explicación de objetos en R tenga en cuenta que las funciones siempre poseen un juego de parentesis“()”: sort(), sqrt(); rnorm(); quit() y sus argumentos dentro de los paréntesis los parámetros van separados por “,”:

o > sort(alfa, decreasing=TRUE) o [1] 1.12167243 0.88798608 0.81861407 0.23676978 0.09290526 -0.11830396

-0.17183908 -0.46704494 -2.12783387 o [10] -2.18540730 o > sort(alfa, decreasing=FALSE) o [1] -2.18540730 -2.12783387 -0.46704494 -0.17183908 -0.11830396 0.09290526

0.23676978 0.81861407 0.88798608 o [10] 1.12167243

En el ejemplo superior, la función sort() posee dos parámetros, la variable a ordenar y el sentido de la misma (creciente o decreciente) separados por la coma.

3. Los objetos como entidades Los objetos en R pueden ser cadenas de texto, números, funciones, vectores, matrices etc. Poseen intrínsecamente dos atributos comunes: tipo y longitud.

• mode(x) nos devolverá el tipo de objeto, por ejemplo “numeric”, “carácter”, “complejo” o “lógico”.

• Length(x) su longitud, por ejemplo en alfa = 10 (elementos en el vector), o en el caso de una cadena de caracteres: x<-"El tipo de la cosa" el resultado será 1 (cadena), una expresión lógica será TRUE o FALSE.

• Si obtiene un resultado N/A el significado no es “nulo” sino “no disponible” es decir que no se sabe que tipo de dato es. NaN por otra parte es cuando el resultado o el valor no es numérico. Muchas veces las funciones fallan cuando toman datos N/A o NaN, hay que tener en cuenta esto al procesarlos porque son fuente de error en muchos casos.

Nota 6

¿Cómo saber usar una función? En la ventana de ayuda escriba el nombre de la función y le aparecerá el manual, o en la consola: > help(sort) help() también es una función!

Nota 7

¿Cómo reconocer una función? Recuerde que las funciones poseen paréntesis ( ) en cuyo interior los argumentos, si hay mas de uno, van separados por comas. Se pueden anidar (meter adentro) funciones en las funciones, por ejemplo

sort(sqrt(rnorm(10)))

Page 15: Introducción a R utilizando Rstudio server

15 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

4. Operaciones con objetos Los objetos son creados, usados y eventualmente eliminados. Para crear un objeto solo basta dar la orden antecedida del nombre que tendrá

> obj1<-c(1,2,3,2,3,2,2,1,3,3,3,1,3,4,4,1,0) > mode(obj1) [1] "numeric" > length(obj1) [1] 17 > obj1 [1] 1 2 3 2 3 2 2 1 3 3 3 1 3 4 4 1 0 > objects() [1] "a" "alfa" "b" "beta" "c" "cartografia" "datos_manies" [8] "n" "obj1" "par" "x" "z" >

En la representación superior podemos advertir que creamos un objeto “obj1” que es un vector numérico de 17 elementos. Obtenemos su tipo y longitud y mas abajo listamos TODOS los objetos del workspace que venimos trabajando. Se puede observar que los “a”, “alfa”, “beta” etc corresponden a los anteriores ejercicios (y otros que veníamos utilizando y que también quedaron cargados en la memoria de R como “cartografia”, “datos_manies” etc).

Debemos recordar que estos objetos pertenecen al workspace específico que venimos trabajando desde antes y hemos salvado. Si desea eliminar objetos hay dos maneras:

• Eliminar todo: en el panel Workspace -> clear all (elimina todos los datos del entorno)

• Objetos en particular: mediante rm(objeto), Listamos los objetos y removemos n, par y x. Volvemos a listar para comprobar.

Los objetos creados en una sesión se guardan en el workspace al salir del programa (si usted así lo determina) también se guarda el historial de comandos, por lo que en la próxima sesión (tal como hemos visto en el listado de objetos) se recuperan automáticamente. Por ello es buena práctica guardar workspaces distintos según el proyecto que vaya realizando. Esos datos de sesión se almacenan en un archivo “.RDATA”

Por defecto en el server de Linux (Debian) se guardara en /home/ y en Windows (instalación local de escritorio) en Mis Documentos; si no especifica una carpeta de proyecto específica.

Nota 8

En el presente manual al trabajar casi excluyentemente sobre la consola no hemos utilizado los “;” finales. No se olvide de colocarlos en los scripts.

Page 16: Introducción a R utilizando Rstudio server

16 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Algunos objetos en particular

1. Introducción a tipos de datos Ya hemos visto generalidades de los objetos, ahora profundizaremos en algunos de ellos que resumen la filosofía de uso de R.

R trabaja los datos mediante un esquema o estructura de datos que es interesante conocer para poder aplicar su potencia. En estructura de Datos, una materia de programación, se suelen dividir estos en dos vertientes:

• Datos primitivos (numéricos de distinta índole, lógicos, caracteres y enumeraciones) • Datos estructurados (una mezcla mas o menos variable de distintos tipos)

En estos últimos, los datos estructurados, para no extendernos, solo mencionaremos que cuando los datos se agrupan en un tipo de estructura de un solo tipo, según sus “dimensiones” se llaman vectores o matrices; si son de dos o mas tipos se denominan listas, registros, conjuntos.4

En los próximos párrafos examinaremos estos conceptos desde el punto de vista operacional y como utilizarlos, las definiciones académicas deberá profundizarlas en la medida que estime sean de necesidad para su aplicación particular. Tenemos las siguientes estructuras de datos:

Como datos primitivos: números, caracteres, valores lógicos (de comparación y de evaluación)

• numeric: (numéricos) número real con doble precisión. Los podemos escribir como enteros (3, -2), con fracción decimal (3.27) o con notación científica (3.12e-47).

• complex: números complejos de la forma a+bi. • character: (Caracteres) Cadenas alfanuméricas de texto. • logical: variables lógicas. Puede ser TRUE o FALSE, también

valores lógicos de comparación (mayor, menor igual etc) que establecen TRUE o FALSE

Hay también un valor que consiste en un no valor, llamado NA

• En algunos casos los datos componentes de un objeto pueden no ser completamente conocidos.

• Cuando un elemento o valor es “not available” le asignamos el valor especial NA. • En general una operación con elementos NA resulta NA, a no ser que mediante una

opción de la función, podamos omitir o tratar los datos faltantes de forma especial, como por ejemplo na.omit(), na.exclude(), na.action() etc.

• La opción por defecto en cualquier función es na.rm=FALSE (que indica que NO elimina los NA), que da como resultado NA cuando existe al menos un dato faltante. Por el contrario con la opción na.rm=TRUE, la operación se efectúa con los datos válidos.

4 “Algoritmos + estructuras de datos = programas” Niklaus Wirth, ed. Del Castillo, 1984

Page 17: Introducción a R utilizando Rstudio server

17 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

También hay valores especiales: INF y NAN

• En la mayoría de los casos, no debemos preocuparnos de si los elementos de un objeto numérico son enteros, reales o incluso complejos. Los cálculos se realizarán internamente como números de doble precisión, reales o complejos según el caso.

• Para trabajar con números complejos, deberemos indicar explícitamente la parte compleja.

• En determinadas ocasiones los cálculos realizados pueden llevar a respuestas con valor infinito positivo (representado por R como Inf) o infinito negativo (-Inf). Es posible realizar y evaluar cálculos que involucren Inf.

• Sin embargo, a veces, determinados cálculos resuelven expresiones que no son números (representados por R como NaN's, del inglés 'not a number').

En la imagen lateral podemos apreciar la diferencia entre 0, infinito y valores NAN. En la ultima expresión hemos utilizado la función ABS(), absoluto de… para eliminar el signo negativo y obtener una salida normal (1.414214), el primer numero irracional que tantos dolores de cabeza dio y que al menos causo

la muerte de algún griego5, por suerte hoy es posible extraer la raíz de cualquier numero sin mayores consecuencias que el redondeo en caso de irracionales.

Como datos estructurados, en R existen:

1. Vectores, llamados arreglos o arrays (en ingles) 2. Factores 3. Matrices 4. Series temporales 5. Hojas o Marcos de datos (dataframes en ingles) 6. Listas

En el cuadro se resumen las características de cada tipo de estructura de datos “estructurados”, por seguir la denominación de Cairo y Guardati. Se pueden apreciar que la composición de cada cual admite no solo los datos primitivos o atómicos, sino también a su vez otros datos estructurados.

5 Hipasos de Metaponto descubrió en el siglo V a.c (paradójicamente mediante el teorema de Pitágoras) que ningún número natural, ni ninguna relación de otros números naturales podía explicar el resultado: la raíz cuadrada de 2, que es 1,4142135... seguido de infinitos números sin ninguna regla o patrón. Esto convulsiono a los Pitagóricos, una sociedad de matemáticos y filósofos que fundaban todo en la armonía de los números y la placidez espiritual. Hipasos exultante por su brillantez e inteligencia para meter en problemas a todos corrió a mostrar su descubrimiento, que implicaba derrumbar los fundamentos de la Sociedad Pitagórica y demostraba que lo de inteligente no lo hacia en las relaciones sociales. Porque en lugar de recibir la gloria y los halagos de todos sus pitagóricos colegas; por alguna extraña razón estos se ofendieron y echaron espuma por la boca, al grito de “Nos arruinaste el estofado”. Fue desterrado de la Sociedad, y el acto de destierro incluía una ceremonia de funeral, con entierro de cajón (sin el tipo adentro) y colocación de una lápida que simbolizaba la muerte del hereje para la Sociedad. Otros aseguran que su muerte no fue tan metafórica sino a garrotazo limpio y factiblemente orinando sobre su lapida, postmorten. ¿Quién dijo que las ciencias duras son solo para gente sin sangre en las venas?

Page 18: Introducción a R utilizando Rstudio server

18 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

2. Vectores

Una definición formal, creación y manipulación: Los arreglos (llamados arrays en lenguajes de programación) consisten en una colección finita, homogénea y ordenada de datos. Esto es un solo tipo de datos en todos sus componentes para todos los índices6.

Una colección finita y homogénea significa que posee un principio y un fin, con datos todos del mismo tipo y ordenada debido a que los vectores se consideran como celdas cuyo contenido están referenciados por un índice que inicia en 1 y termina –por ejemplo- en 10. Así la “celda” 1 contiene el valor n, la 2 otro… hasta el final del array.

En esta representación vemos una celda que posee un índice llamado 17 con un valor 1993, El índice también puede ser nominal, por ejemplo

“bananas” y el valor numérico, caracteres o lógicos.

Un ejemplo de código y algunas aclaraciones:

> a<-c(1,2,3,4,5,6,7,8,9,10); # creamos un vector de 10 elementos del 1 al 10 > length(a); # obtenemos su longitud [1] 10 > a[11]<-11 # agregamos un valor 11 en la posición 11 > length(a); # obtenemos su longitud nuevamente [1] 11 > a # listamos todos los elementos del vector [1] 1 2 3 4 5 6 7 8 9 10 11 > a[12]<-c("A"); # agregamos a la posición 12 un carácter “A” > a # listamos nuevamente # se observa que el vector no posee valores numéricos sino de caracteres [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "A" > mode(a); # comprobamos el tipo de datos [1] "character" # cargamos un valor en a[11] > a[11]<-11; # forzamos a datos numéricos: > as.numeric(a); [1] 1 2 3 4 5 6 7 8 9 10 11 12 # como no nos identifica nada los índices, cambiamos a uno con nombres: > names(a)<-c("peras","manzanas","tornillos","clavos","bayas","bellos","vellos"); > a; # listamos el vector peras manzanas tornillos clavos bayas bellos vellos <NA> 1 2 3 4 5 6 7 8 <NA> <NA> <NA> <NA> 9 10 11 12 # observamos que hay índices que no poseen denominación, son NA, debemos crear # un vector de nombres igual al vector de índices: 12 posiciones. > names(a)<-c ("peras", "manzanas", "tornillos", "clavos", "bayas", "bellos", "vellos", "bollos", "balas", "berros", "oxímoron", "cosas") > a peras manzanas tornillos clavos bayas bellos vellos 1 2 3 4 5 6 7 bollos balas berros 8 9 10

6 “Estructura de Datos” de Osvaldo Cairo y Silvia Guardati.

Índice=17 Valor=1993

Page 19: Introducción a R utilizando Rstudio server

19 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

oximorones cosas 11 12 # cargamos un nuevo valor en a[1] o como se denomina ahora a[“peras”] > a[peras]<-33 Error en a[peras] <- 33 : objeto 'peras' no encontrado # el error es porque el índice debe estar con comillas al ser un nombre > a["peras"]<-33 > a peras manzanas tornillos clavos bayas bellos vellos 33 2 3 4 5 6 7 bollos balas berros oxímoron cosas 8 9 10 11 12

En la primera línea creamos un array llamado “a” que concatena 10 números enteros, valores del 1 al 10, de manera tal que el valor numérico de la celda 1 es 1, el de la 2 es 2 y así sucesivamente coincidiendo con el índice, aunque no siempre es así. Comprobamos la longitud del vector con lenght(a) que devuelve 10 elementos. El cambio de índice a nombre es agregando un vector de nombres (función names() ), de uso extendido y común en muchas otras funciones. En la definición de arrays dijimos que eran una colección finita, sin embargo en R esta colección no esta cerrada ya que es posible agregar más celdas con valores solo referenciando a que celda pertenecen. Así cargamos el valor numérico entero 11 en la posición 11, comprobamos que hay 11 elementos ahora.

Hemos comprobado que si mezclamos tipos, cambia el tipo de datos del vector. Al cargar en la posición 12 un carácter “A” y al comprobar que tipo de array es vemos que ya no es numérico sino de caracteres. Esto es concordante con la definición del vector, que no permite mezclar tipos distintos. Por ende al introducir un carácter el vector cambia de numérico a caracteres. Los valores ya no referencian números sino caracteres.

Esta operación se llama cast (moldeado) o conversión de tipos y es fuente de errores, ya que no es posible hacer operaciones aritméticas o matemáticas con caracteres. > a*5 Error en a * 5 : argumento no-numérico para operador binario

Una simple multiplicación lo demostrara. Para salvarnos el momento existe una función llamada “as.numeric()”7, no exenta de cierta consecuencia:

> a [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "A" > a<-as.numeric(a) Mensajes de aviso perdidos NAs introducidos por coerción8 > a [1] 1 2 3 4 5 6 7 8 9 10 11 NA > a*5 [1] 5 10 15 20 25 30 35 40 45 50 55 NA

7 También existen otras: as.nnnn que pueden consultar en la ayuda de RStudio 8 Valores por coerción: a la fuerza nomas…

Page 20: Introducción a R utilizando Rstudio server

20 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Se observa que la celda 12 cuyo contenido era el carácter “A” al ser convertido a numero es un valor desconocido, un NA (not available). Cualquier operación que se haga sobre esta celda arrojara en consecuencia un NA; pero en ciertos casos arrojara errores porque suelen haber funciones que no trabajan sobre la carencia de un dato. Este atento ¿Cómo se soluciona esto? Lo mas simple es cargar un valor 0 en dicha celda o utilizar funciones na.omit() como en este ejemplo:

> a [1] 1 2 3 4 5 6 7 8 9 10 11 NA > na.omit(a) * 5 [1] 5 10 15 20 25 30 35 40 45 50 55 attr(,"na.action") [1] 12 attr(,"class") [1] "omit"

Al utilizar na.omit(a) en la multiplicación se omitió el valor NA y el vector resultante contiene solo valores enteros correctos. La ayuda del Rstudio9 es muy explicita: Na.omit:

Trata sobre valores perdidos en objetos Descripción Estas funciones genéricas son útiles para trabajar con AN en, por ejemplo, marcos de datos. na.fail devuelve el objeto si no contiene valores perdidos, y señala un error contrario. na.omit devuelve el objeto con casos incompletos eliminados. na.pass devuelve el objeto sin cambios.

Se recomienda leer siempre las ayudas ya que resuelven muchas de las dudas o usos inadecuados de las funciones.

Operaciones con vectores Como se habrá advertido es posible efectuar operaciones matemáticas con vectores, hay esencialmente dos grandes divisiones:

• Operaciones de un vector con una función o número

• Operaciones entre vectores A esto se le llama aritmética vectorial e intervienen

nociones de algebra lineal y mas adelante matricial, pero en este caso R simplifica las cosas mediante el uso de funciones y de su propia flexibilidad. No ahondaremos en los conceptos intrínsecos de vectores pero veremos algunas de sus operaciones más usuales.

9 En ingles

Nota 9

Observe atentamente que no haya valores NA si va a realizar cálculos, muchas funciones no trabajan con ellos

Page 21: Introducción a R utilizando Rstudio server

21 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Operaciones de un vector con una función u operador Cuando trabajamos con un vector con una operación o función, esta se aplica a cada

elemento por separado. El conjunto de datos es afectado por este calculo, una serie de ejemplos:

>a<-c(1,3,6,8,9,9,2,3,3,3,3,3,2,1,0) # creamos el vector “a” > a/3 # dividimos por 3 a cada termino del vector “a” [1] 0.3333333 1.0000000 2.0000000 2.6666667 3.0000000 3.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000 [12] 1.0000000 0.6666667 0.3333333 0.0000000 > a-1 # restamos a cada termino de “a” - 1 [1] 0 2 5 7 8 8 1 2 2 2 2 2 1 0 -1 > a+1 # sumamos +1 a cada termino del vector “a” [1] 2 4 7 9 10 10 3 4 4 4 4 4 3 2 1 > log(a) # hallamos el logaritmo de cada termino de “a” [1] 0.0000000 1.0986123 1.7917595 2.0794415 2.1972246 2.1972246 0.6931472 1.0986123 1.0986123 1.0986123 1.0986123 [12] 1.0986123 0.6931472 0.0000000 -Inf > log(1/a) # hallamos el logaritmo de cada termino inverso de “a” [1] 0.0000000 -1.0986123 -1.7917595 -2.0794415 -2.1972246 -2.1972246 -0.6931472 -1.0986123 -1.0986123 -1.0986123 [11] -1.0986123 -1.0986123 -0.6931472 0.0000000 Inf > abs(a) # hallamos el valor absoluto (sin decimales ni signo) de cada termino de “a” [1] 1 3 6 8 9 9 2 3 3 3 3 3 2 1 0 > a^a # hallamos el exponencial de cada termino de “a” elevado a si mismo. [1] 1 27 46656 16777216 387420489 387420489 4 27 27 27 27 [12] 27 4 1 1 >

(los números al inicio de la línea entre corchetes [] indican el numero del índice del vector al inicio del renglón) En el cuadro al inicio de este apartado hay una serie de funciones comunes para los vectores. Algunas funciones estadísticas las podemos realizar de la manera clásica (desarrollando la formula) o utilizando funciones ad hoc, los ejemplos: > a # el vector”a”. [1] 1 3 6 8 9 9 2 3 3 3 3 3 2 1 0 > min(a) # hallamos el minimo de “a”. [1] 0 > max(a) # hallamos el maximo de “a”. [1] 9 > sum(a) # hallamos la sumatoria de los terminos de “a”. [1] 56 > length(a) # hallamos la cantidad de componentes de “a”. [1] 15 > sum(a)/length(a) # hallamos la media aritmetica de “a”. [1] 3.733333 > mean(a) # usamos la función media en “a”. [1] 3.733333 > a # el vector”a”. [1] 1 3 6 8 9 9 2 3 3 3 3 3 2 1 0 > a[15/2+0.5] # buscamos la mediana de ”a” mediante formula. [1] 3 > median(a) # usamos la función mediana en ”a”. [1] 3 >

Page 22: Introducción a R utilizando Rstudio server

22 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Operaciones entre vectores Son similares a las anteriores, en el caso que cada vector sea igual en cantidad de términos (longitud) que el anterior, el cálculo se efectúa completo. En caso que uno de ellos sea menor, se repiten los valores en el cálculo hasta completar el faltante. > alfa<-c(1,2,3) > beta<-c(1,2,3,4,5,6,7,8,9) > alfa * beta [1] 1 4 9 4 10 18 7 16 27

La lógica de la multiplicación es la siguiente: El primer array multiplica al segundo desde la posición 1 a la 3 los valores del segundo desde la posición 1 a la 3; luego repite del 1 al 3 con los valores de beta de la posición 4 a la 6, y la tercera repetición hasta finalizar. Es de destacar que ambos vectores son de longitudes tal que el vector beta es múltiplo del alfa; si no fuera así R nos daría un error del tipo > beta[10]<-10 # agregamos un valor en la posición [10] > alfa * beta [1] 1 4 9 4 10 18 7 16 27 10 Mensajes de aviso perdidos

In alfa * beta : longitud de objeto mayor no es múltiplo de la longitud de uno menor

Pese al mensaje de error, R igual realiza el cálculo y exhibe el resultado: 1 * 10 = 10 Un ejemplo de trabajo entre vectores con funciones de correlación, varianza y covarianza: # creamos valores aleatorios de una distribución normal > vector1<-c(round(rnorm(10),2)) > vector1 [1] -1.29 -0.47 -0.57 -0.19 -0.50 0.88 0.56 0.03 1.20 0.88 # los valores de vector1 y vector2 se han redondeado con round a 2 decimales > vector2<-c(round(rnorm(10),2)) > vector2 [1] 0.40 0.30 -0.58 -0.08 0.04 1.01 -1.06 0.96 -0.15 -1.93 # correlacion entre vectores > cor(vector1, vector2) [1] -0.2818315 # varianza entre vectores > var(vector1, vector2) [1] -0.2030922 # covarianza entre vectores > cov(vector1,vector2) [1] -0.2030922

El tema de operaciones entre vectores cobra mayor fuerza en el apartado sobre matrices, donde las condiciones según el tipo de operación que se realice depende si estas son de formas correctas, es decir si son matrices cuadradas, rectangulares, de igual cantidad de dimensiones. En el próximo capitulo abordaremos esta cuestión que se inicia aquí, ya que los vectores son esencialmente matrices de una sola dimensión.

alfa beta resultado 1 1 1 2 2 4 3 3 9 1 4 4 2 5 10 3 6 18 1 7 7 2 8 16 3 9 27

Page 23: Introducción a R utilizando Rstudio server

23 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Poner nombre a los índices, una razón: El acceso a un vector es mediante un índice, a[1]=1, a[2]=3, a[5]=9 etc. También podemos cambiar el índice a nombres mediante la adición del vector de índices con nombres al array, tal como vimos anteriormente, a estos vectores se les dice que están indexados ordinalmente10:

Esto es muy útil porque muchas veces debemos tener referencias concretas, por ejemplo en un grafico (imagen inferior) o en una salida de pantalla (imagen superior) para identificar mejor que es lo que estamos procesando:

Por supuesto que los nombres de índice del vector son solo un ejemplo y además en la graficación hay otros métodos para poner labels (etiquetas) en los ejes. En realidad representan una comodidad para el investigador para que no se pierda en el análisis de los datos.

Vectores de caracteres Los vectores también pueden ser de caracteres, estos se diferencian de los anteriores porque el número de operaciones es más reducido y además no aplican las operaciones matemáticas. Los términos de un vector de caracteres se escriben entre comillas, sean caracteres,

palabras o frases. En el ejemplo lateral creamos un vector “b” asignándole una palabra, luego asignamos a la segunda posición de “b” otra palabra y finalmente a la tercera posición de “b” una frase completa. Si deseamos unir dos vectores de caracteres en uno solo debemos utilizar la función paste() pero si desean mantener esos dos vectores separados y solo unirlos para una salida que no desea

10 Ordinal porque no sigue un índice de cardinalidad sino algún tipo de organización de orden, en nuestro ejemplo tipos de cosas.

Page 24: Introducción a R utilizando Rstudio server

24 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

guardar en el workspace, solo bastara con concatenarlos: e<-c(b,c,d) donde “e” es el vector final de la copia y pegado de b,c,d con la función c()

Vectores lógicos: breve introducción a la lógica simbólica Otro tipo de vectores son los que están constituidos por valores lógicos, TRUE o FALSE (1, 0) que son propios de la lógica simbólica y en cuya “tabla de verdad” resumimos el concepto fundamental que exponemos a continuación como introducción:

conectivo símbolo enunciación Ejemplos y observaciones / estados lógicos (*) negación ¬ ¬p (“no p”) “no” / NOT

conjunción ∧ p∧q “y”, eventualmente “pero, además, aunque” / AND

Disyunción inclusiva

∨ p∨q “y/o” de carácter inclusivo, “este y aquel”. / OR

Disyunción exclusiva

⊻ p⊻q “o” de carácter excluyente, “este o este” / XOR

Implicación o condicional

→ p→q “entonces”, es reemplazable por una coma “,”o también por “es suficiente”, “es una condición suficiente”, ”solo si”, “es necesario”, La primera enunciación es la hipótesis de la implicación y la segunda su conclusión.

Doble implicación o bicondicional

↔ p↔q “si y solo si”, “es necesario y suficiente para” , se puede abreviar “sii” (si y solo si)

Tabla de verdad, en donde las proposiciones atómicas “p” y “q” son sometidas a distintos operadores (o conectores) lógicos y sus resultados. 0 equivale a falso y 1 a verdad. 11

La aplicación de esto en un ejemplo con dos vectores lógicos en los que sometemos a estos términos a distintas operaciones. La utilidad es que permiten realizar condiciones específicas cuando trabajamos con estados lógicos (“si tal condición es falsa, entonces hago o no hago tal cosa”). Esto es en el ámbito de vectores lógicos compuestos de valores T o F Para ello también hay operadores lógicos pero que aplican a vectores numéricos por comparacion (igual, distinto, mayor que, menor que, etc).

11 “Matemáticas Discretas y Combinatoria” Ralph P. Grimaldi ed. 2000 s/d. pag. 53, “Introducción a la Lógica” Irving Copi Eudeba 1969

p q ¬p p∧q p∨q p⊻q p→q p↔q 0 0 1 0 0 0 1 1

0 1 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 1

Page 25: Introducción a R utilizando Rstudio server

25 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Algunos ejemplos con operadores lógicos: > a [1] TRUE > b [1] FALSE > c [1] TRUE > d [1] FALSE > e<-(a || b && c) > e [1] TRUE > e<-((a || b)&& c) > e [1] TRUE > e<-b || d > e [1] FALSE > vectorLog<-c(a,b,c,d,e) > vectorLog [1] TRUE FALSE TRUE FALSE FALSE

Algunos ejemplos con operadores de comparación > a<-10 > b<-5 > c<-c(1,12,2,3,7,4,65) > c<=a [1] TRUE FALSE TRUE TRUE TRUE TRUE FALSE > a>=c [1] TRUE FALSE TRUE TRUE TRUE TRUE FALSE > a==c [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE > a<c [1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE

La aplicación de vectores (o valores) lógicos a estos últimos operadores es automática. Hay aun una serie de características que son de interés sobre el uso de vectores, para ello remitimos al texto “Introduccion a R” del R Development Core Team; descargable gratuitamente del sitio de R en el link http://cran.r-project.org/ en la sección “contributed documentation” entre otra documentación en español e ingles.

3. Factores: un ordenamiento categórico Un factor es un vector utilizado para una clasificación discreta (donde el valor se cuenta no se mide) en el cual a su vez puede ser nominal u ordinal. En la salida de pantalla creamos un ejemplo de un Factor por categorías y posteriormente en ordinal: # creamos una lista de localidades de un ficticio grupo politico correntino en el orden en # que van llegando a la reunión, cada acrónimo es una localidad. >distritos <- c("ctes" , "ctes" , "ctes" , "sala" , "riach" , "empe" , "sanl" , "sanl" , "ctes" , "sanl" , "riach") # Ingresamos cuantos representantes acuden con sus credenciales *a razón de uno por orden) > congresales<-c(1,1,1,1,1,1,1,1,1,1,1) # creamos el vector FACTOR que contiene el orden categórico “localidades” > CongresoPartidario <-factor(distritos) # echamos un vistazo a como quedo conformado el FACTOR

Page 26: Introducción a R utilizando Rstudio server

26 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

> CongresoPartidario [1] ctes ctes ctes sala riach empe sanl sanl ctes sanl riach Levels: ctes empe riach sala sanl # Ahora aplicamos la cantidad de ingresantes con las localidades, el vector de congresales # debe ser de igual longitude que el de distritos!!! > representantes<-tapply(congresales, distritos, sum) > representantes ctes empe riach sala sanl 4 1 2 1 3 # ordenamiento en FACTOR ORDINAL > ordered(representantes) ctes empe riach sala sanl 4 1 2 1 3 Levels: 1 < 2 < 3 < 4

También podemos apreciar la grafica, que la podemos ordenar con un par de funciones en el siguiente ejemplo: barplot(sort(representantes)) Como se aprecia en la segunda grafica, la hegemonía De la capital Correntina es de cierto peso pero no determinante. Para ganar una moción no solo deben votar en bloque todos los representantes capitalinos sino que deben captar al menos dos votos de la segunda mayoría o de las minorías para obtener una decisión. Como la cifra es impar, difícilmente el presidente de este ficticio congreso pueda hacer valer su voto doble. Sutilezas del estatuto.

4. Matrices: definición y operaciones Las matrices son definidas como arreglos bidimensionales (o “n” dimensiones más) aunque las mas usuales son las de 2 y 3 dimensiones. En el entorno R se les suele definir como “variables indexadas” . A continuación un divertido repaso de algebra lineal para entrar en materia12

En palabras mas simples, Una matriz es un conjunto rectangular de datos ordenados dispuestos en una serie de filas y columnas, su “orden”. Decir que la matriz B33 significa que dicha matriz posee 3 filas de 3 columnas.

B=11 12 13

21 22 23

31 32 33

2 3 41 2 14 5 3

a a aa a aa a a

− = −

Operaciones elementales sobre matrices Sumas y restas

Se pueden sumar y restar las matrices si estas SON IGUALES. El concepto del orden de la matriz cuadrada o rectangular es la igualdad entre las filas y columnas. Si ambas matrices no son iguales

12 Cortesía del autor, no agradezcan.

Esta matriz de orden 3x3 está representada por las letras que indican Fila,Columna y una representación numérica de una matriz cargada con datos.

Page 27: Introducción a R utilizando Rstudio server

27 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

en su orden no es posible la operación. Las sumas y las restas son algebraicas y se hacen de término a término:

1 10 1 2 2 82 1 8 4 6 5

3 1 2 7 1 66 5 3 1 9 6

− − + = − −

− − − − − = − − −

Multiplicación de matrices

La regla de oro es C=F13. Esto quiere decir que las Columnas de la matriz A deben ser iguales a las de las Filas de la matriz B. Si no se da esta condición no se pueden multiplicar las matrices.

Por un escalar

7 4 21 123. 2 4 6 12

3 2 9 6b+ + − − − − + = + − − − + +

Un par de ejemplos en R:

> m1<-matrix(1:25, nrow=5, ncol=5) # creamos una matriz de 5 x 5, secuencia de 25 # elementos secuenciales

> m1 # exhibimos por pantalla el resultado [,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25 > -3*m1 # multiplicamos el escalar -3 x |m1| [,1] [,2] [,3] [,4] [,5] # resultado [1,] -3 -18 -33 -48 -63 [2,] -6 -21 -36 -51 -66 [3,] -9 -24 -39 -54 -69 [4,] -12 -27 -42 -57 -72 [5,] -15 -30 -45 -60 -75 > m2<-matrix(round(rnorm(25),2),5,5) # creamos una matriz de numeros aleatorios > m2 [,1] [,2] [,3] [,4] [,5] [1,] -0.29 1.35 -1.25 -0.05 -0.81 [2,] -0.02 -1.73 0.75 2.07 -0.96 [3,] -1.78 -3.08 -0.29 -0.64 1.95 [4,] -0.86 -0.35 -1.39 0.79 -0.48 [5,] -0.85 -0.43 0.95 -0.06 -0.27

13 C=F: columnas igual a filas (N del A)

Hay que tener en cuenta que en el caso de la resta el signo delante de la matriz cambia los signos internos. En la segunda matriz de la resta en lugar de -2 7 3 -1 quedan 2 -7 -3 1.

La multiplicación de la matriz por el escalar es termino a termino poniendo atención al signo del multiplicador y del multiplicando para el resultado final. La matriz B se ha multiplicado por -3

Page 28: Introducción a R utilizando Rstudio server

28 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

> m1*abs(m2) # multiplicamos |m1| * el absoluto de valores de |m2| [,1] [,2] [,3] [,4] [,5] # resultado> valores positivos [1,] 0.29 8.10 13.75 0.80 17.01 [2,] 0.04 12.11 9.00 35.19 21.12 [3,] 5.34 24.64 3.77 11.52 44.85 [4,] 3.44 3.15 19.46 15.01 11.52 [5,] 4.25 4.30 14.25 1.20 6.75 > m1*m2 # multiplicamos |m1| x |m2| [,1] [,2] [,3] [,4] [,5] # resultados con signos [1,] -0.29 8.10 -13.75 -0.80 -17.01 [2,] -0.04 -12.11 9.00 35.19 -21.12 [3,] -5.34 -24.64 -3.77 -11.52 44.85 [4,] -3.44 -3.15 -19.46 15.01 -11.52 [5,] -4.25 -4.30 14.25 -1.20 -6.75

Ambas matrices |m1| y |m2| son iguales en filas y columnas, pero tenemos el caso mas usual, matrices diferentes en CyF:

1 11 2 3

. 2 21 2 3

3 3a b x

+ − + + + = + − − − − + −

Para simplificar realizamos esta operación grafica:

A * B

1 2 31 2 3+ + + − − −

1 12 23 3

+ − + − + −

11 12 13

21 22 23

31 32 33

c c cc c cc c c

Las flechas rojas explican gráficamente la mecánica de la multiplicación, la cual se repite para cada fila y columna hasta completar la matriz C3x3 que resulta de Fa x Cb es decir que de A32 x B 23 = C33 La multiplicación (producto) de un vector columna por una matriz o la de un vector fila respetan el mismo criterio que se menciono en líneas superiores Ca=Fb siendo el resultado Fa x Cb

Debemos atender a la regla Ca=Fb (Columna ‘a’ igual a Fila ‘b’= en este caso a= 3 filas y b= 3 columnas. Si se diera el caso que las filas de ‘b’ fueran mas, o las columnas de ‘a’ fuesen mas no importa porque la condición es Ca=Fb

C11= (a11*b11) + (a12*b11)

C12= (a11*b12) + (a12*b22)

C13= (a11*b13) + (a12*b23)

C21= (a21*b11) + (a22*b21)

C22= (a21*b12) + (a22*b22)

C23= (a21*b13) + (a22*b23)

Page 29: Introducción a R utilizando Rstudio server

29 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

En este caso R no efectúa operación alguna ya que solo trabaja con matrices cuadradas o rectangulares de iguales dimensiones.

Peculiaridades de la multiplicación de vectores por matrices

Un vector fila por una matriz:

( )1 2 3

. 1,2,3 4 5 67 8 9

a b x =

a.b

1 2 34 5 67 8 9

( )1,2,3 30 36 42

Si usted ha seguido atentamente esta explicación y esta pensando seriamente en dedicarse a las ciencias sociales (lo mas opuesto posible a esto); despreocúpese, en R todo es mas simple. El algebra de matrices es tan simple como trabajar el concepto de vectores.

En R el resultado es esencialmente simple. Si el vector es igual en sus componentes a la fila o columna de la matriz dara el resultado sin problemas, sino el vector rellenara los componentes faltantes repitiendo la secuencia tal como vemos en el ejemplo siguiente:

> n1<-matrix(1:10,5,2) # creamos una matriz > n1 [,1] [,2] # exhibimos la matriz en la pantalla [1,] 1 6 [2,] 2 7 [3,] 3 8 [4,] 4 9 [5,] 5 10 > vector1<-c(1,2,3) # creamos un vector de 3 elementos ≠ filas o columnas de |n1| > vector1*n1 [,1] [,2] [1,] 1 18 [2,] 4 7 [3,] 9 16 [4,] 4 27 [5,] 10 10 Mensajes de aviso perdidos # realizara la operación pero dará un mensaje de error In vector1 * n1 : longitud de objeto mayor no es múltiplo de la longitud de uno menor

a11: 1+8+21=30

a12: 2+10+24=36

a13: 3+12+27=42

Page 30: Introducción a R utilizando Rstudio server

30 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

> vector1[4]<-4 # completamos el vector con un valor 4to > vector1[5]<-5 # completamos el vector con un valor 5to > vector1*n1 # ahora el vector == columna de |n1| [,1] [,2] [1,] 1 6 [2,] 4 14 [3,] 9 24 [4,] 16 36 [5,] 25 50 # no hay error > vector2<-c(7,9) # creamos un vector2 con 2 elementos == filas |n1| > vector2*n1 [,1] [,2] [1,] 7 54 [2,] 18 49 [3,] 21 72 [4,] 36 63 [5,] 35 90 # no hay mensajes de error, Si C o F |n1| == elementos Vector

Operaciones de filas o columnas con matrices en R Como se ha definido anteriormente, una matriz es un arreglo rectangular de números, o sea una variable vectorial con al menos dos índices. Como el número de dimensiones puede ser infinito (e irrepresentable en nuestra mente) lo usual es dos y tres dimensiones.

La forma más simple de crear una matriz en R, es mediante la función matrix():

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)

la cual posee cinco argumentos. El primero, data, es opcional y debe ser un vector que corresponderá a los elementos de la matriz: x=vector, el segundo y tercero de los argumentos son para declarar el número de filas y columnas de la matriz:

nrow=número de-filas y ncol=número de columnas, el cuarto argumento sirve para definir cómo se completará los elementos de la matriz, o por columnas, o si no se define nada, se completa la matriz por filas: byrow=True-False y por último, dimnames=nombre columnas y filas.

Pero no es la única manera de crear matrices, también se pueden construir a través de la unión de vectores con iguales números de componentes, sean filas o columnas :

• Mediante adicción de vectores en columnas: cbind(a,b,c,d) • Mediante adicción de vectores en filas: rbind(a,b,c,d)

> a<-c(1,1,1,1,1,1) # creamos un vector > b<-c(2,2,2,2,2,2) # creamos un vector > c<-c(3,3,3,3,3,3) # creamos un vector > d<-c(4,4,4,4,4,4) # creamos un vector > x<-rbind(a,b,c,d) # creamos una matriz por columnas con los vectores anteriores

Page 31: Introducción a R utilizando Rstudio server

31 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

> x # listamos la matriz |x| [,1] [,2] [,3] [,4] [,5] [,6] a 1 1 1 1 1 1 b 2 2 2 2 2 2 c 3 3 3 3 3 3 d 4 4 4 4 4 4 > w<-rbind(a,b,c,d) # creamos una matriz por filas con los vectores anteriores > w # listamos la matriz |w| [,1] [,2] [,3] [,4] [,5] [,6] a 1 1 1 1 1 1 b 2 2 2 2 2 2 c 3 3 3 3 3 3 d 4 4 4 4 4 4 >

La creación de una matriz mediante la función de concatenación empleando los parámetros de los vectores a,b,c,d (que dan la matriz |w|):

> w<-matrix(c(a,b,c,d),ncol=6,nrow=6, byrow=TRUE, dimnames=list(c("fila 1","fila 2","fila 3","fila 4","fila 5","fila 6"), c("col 1","col 2","col 3","col 4","col 5","col 6"))) > w col 1 col 2 col 3 col 4 col 5 col 6 fila 1 1 1 1 1 1 1 fila 2 2 2 2 2 2 2 fila 3 3 3 3 3 3 3 fila 4 4 4 4 4 4 4 fila 5 1 1 1 1 1 1 fila 6 2 2 2 2 2 2

Obsérvese que los vectores poseen 6 elementos, por lo que la matriz cuadrada es la repetición de dos filas (5 y 6), para crear la matriz similar al ejercicio anterior solo hay que cambiar nrow=4 y eliminar las etiquetas de filas 5 y 6. Si faltan elementos según la declaración, se completan repitiendo los existentes en el orden secuencial de la expresión ‘a,b,c,d’

También hemos usado una función llamada list() –lista- que explicaremos en breve. Como siempre la función “c()” es la que concatena miembros en la lista y vectores. Otro detalle: si el argumento byrow=FALSE (para crear la matriz |x|) el resultado seria:

> x<-matrix(c(a,b,c,d),ncol=6,nrow=6, byrow=FALSE, dimnames=list(c("fila 1","fila 2","fila 3","fila 4","fila 5","fila 6"), c("col 1","col 2","col 3","col 4","col 5","col 6"))) > x col 1 col 2 col 3 col 4 col 5 col 6 fila 1 1 2 3 4 1 2 fila 2 1 2 3 4 1 2 fila 3 1 2 3 4 1 2 fila 4 1 2 3 4 1 2 fila 5 1 2 3 4 1 2 fila 6 1 2 3 4 1 2

El parámetro Byrow establece como se ordena por filas o columnas o por filas según sea FALSE o TRUE. Byrow es “por filas”

Page 32: Introducción a R utilizando Rstudio server

32 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Por consiguiente la traspuesta de |x| seria la |w| o al revés, según tomemos a una u otra como original. Con el parámetro byrow estamos creando una transpuesta a la matriz, pero existe una función específica para esto, y mas practica. Con una función t(x) hallamos la transpuesta:

> t(x) fila 1 fila 2 fila 3 fila 4 fila 5 fila 6 col 1 1 1 1 1 1 1 col 2 2 2 2 2 2 2 col 3 3 3 3 3 3 3 col 4 4 4 4 4 4 4 col 5 1 1 1 1 1 1 col 6 2 2 2 2 2 2

El acceso a los datos de una matriz es siguiendo la notación |matriz| [fila, columna]:

> w col 1 col 2 col 3 col 4 col 5 col 6 fila 1 1 1 1 1 1 1 fila 2 2 2 2 2 2 2 fila 3 3 3 3 3 3 3 fila 4 4 4 4 4 4 4 fila 5 1 1 1 1 1 1 fila 6 2 2 2 2 2 2 > w[1,5] [1] 1 > w[2,3] [1] 2

Para acceder a todos los elementos de una fila:

> w[3,] # se omite el valor de columna col 1 col 2 col 3 col 4 col 5 col 6 3 3 3 3 3 3

Y para leer todos los resultados de una columna:

> w[,3] # se omite el valor de fila fila 1 fila 2 fila 3 fila 4 fila 5 fila 6 1 2 3 4 1 2

Un ejemplo real de trabajo con una matriz En uno de nuestros scripts analizamos datos correspondientes a las temperaturas en cierta zona del Pacifico Norte y su correlación en ríos de la provincia de Corrientes, mediante herramientas de minería de datos. La primera tarea fue el armado de una matriz:

Page 33: Introducción a R utilizando Rstudio server

33 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

# Red neuronal con AMORE para correr correlación hídrica entre ICG y rio Corrientes # Junio de 2012. Armando Taie / Edwin Aguiar # Instituto Nacional de Tecnologia Agropecuaria (INTA) # Estacion Experimental Agropecuaria Corrientes / Mineria de Datos #================================================================================== # CONEXION A LA DB #================================================================================== library(RODBC) ch <- odbcConnect("database", "usuario", "contrasena") odbcGetInfo(ch) #================================================================================== # detalle de tablas especificas de la DB: # Cod_afo (codigos de aforo), Cod_med (codigos de mediciones), son tablas parseadas # relacionadas para RIOS, la tabla objetivo de las consultas. #---------------------------------------------------------------------------------- # crudos, pledesma, mirinay, sroquito son tablas obsoletas de datos RIOS, sin uso. #---------------------------------------------------------------------------------- # nomenclatures es la tabla relacionada con denominacion de indicadores de la tabla # parseada INDICATORS, con los valores de estos indicadores oceanicos y objeto de la consulta #================================================================================== # CREACION y CARGA DE VECTORES EN MATRIZ #================================================================================== # detalle de la nomenclatura> P: vector, '1'numero de indicador, 'a,b,c' year, month, # value, los tres vectores se indexan en una matriz 'N' # M: matriz de 3x744 '1' numero de indicador #----------------------------------------------------------------------------------- #----> creamos vectores indicador 1 y matriz de “year, month y value”: P1a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 1 " , sep="")))); #M<-P; P1b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 1 " , sep="")))); #M<-P; P1c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 1 " , sep="")))); #M<-P; M1<- matrix(nrow = 744, ncol = 3); M1<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 2: P2a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 2 " , sep="")))); #M<-P; P2b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 2 " , sep="")))); #M<-P; P2c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 2 " , sep="")))); #M<-P; M2<- matrix(nrow = 744, ncol = 3); M2<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 3: P3a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 3 " , sep="")))); #M<-P; P3b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 3 " , sep="")))); #M<-P; P3c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 3 " , sep="")))); #M<-P; M3<- matrix(nrow = 744, ncol = 3); M3<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 4: P4a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 4 " , sep="")))); #M<-P; P4b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 4 " , sep="")))); #M<-P; P4c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 4 " , sep="")))); #M<-P; M4<- matrix(nrow = 744, ncol = 3); M4<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 5: P5a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 5 " , sep="")))); #M<-P; P5b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 5 " , sep="")))); #M<-P; P5c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 5 " , sep="")))); #M<-P; M5<- matrix(nrow = 744, ncol = 3); M5<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 6: P6a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 6 " , sep="")))); #M<-P;

Page 34: Introducción a R utilizando Rstudio server

34 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

P6b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 6 " , sep="")))); #M<-P; P6c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 6 " , sep="")))); #M<-P; M6<- matrix(nrow = 744, ncol = 3); M6<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 7: P7a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 7 " , sep="")))); #M<-P; P7b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 7 " , sep="")))); #M<-P; P7c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 7 " , sep="")))); #M<-P; M7<- matrix(nrow = 744, ncol = 3); M7<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 8: P8a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 8 " , sep="")))); #M<-P; P8b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 8 " , sep="")))); #M<-P; P8c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 8 " , sep="")))); #M<-P; M8<- matrix(nrow = 744, ncol = 3); M8<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 9: P9a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 9 " , sep="")))); #M<-P; P9b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 9 " , sep=""))));#M<-P; P9c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 9 " , sep=""))));#M<-P; M9<- matrix(nrow = 744, ncol = 3); M9<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 10: P10a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 10 " , sep="")))); #M<-P; P10b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 10 " , sep="")))); #M<-P; P10c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 10 " , sep="")))); #M<-P; M10<- matrix(nrow = 744, ncol = 3); M10<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 11: P11a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 11 " , sep="")))); #M<-P; P11b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 11 " , sep=""))));#M<-P; P11c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 11 " , sep="")))); #M<-P; M11<- matrix(nrow = 744, ncol = 3); M11<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 12: P12a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 12 " , sep="")))); #M<-P; P12b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 12 " , sep="")))); #M<-P; P12c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 12 " , sep="")))); #M<-P; M12<- matrix(nrow = 744, ncol = 3); M12<-cbind(P1a,P1b,P1c); #-----> lo mismo, indicador 13: P13a<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `year` FROM `indicators` where `indicator` = 13 " , sep="")))); #M<-P; P13b<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `month` FROM `indicators` where `indicator` = 13 " , sep="")))); #M<-P; P13c<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE, paste("SELECT `value` FROM `indicators` where `indicator` = 13 " , sep="")))); #M<-P; M13<- matrix(nrow = 744, ncol = 3); M13<-cbind(P1a,P1b,P1c); #================================================================================= # creamos una superMatrix #================================================================================= N<-matrix(nrow=744, ncol=39); N<-cbind(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13); # USO> N[a,b] donde a: fila y b: columna, las filas son 744 valores y las columnas # sets de tres valores (year, month, value), P1a,P1b,P1c hasta P13a, P13b, P13c. # llamar a valor de abril de 1963 del indicador 13 =====> N[200,37] -> year (1963), # N[200,38] -> month (4) y el valor: N[200.39] nos dara 0.14. # Esta matrix es solo a efectos de constatar valores en caso de requerir una vista # rapida del total general. Solo imprimira 10.000 numeros salvo que se modifique # el parametro getOption("max.print")

Page 35: Introducción a R utilizando Rstudio server

35 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

#********************************************************************************* # CREACION DE LA MATRIZ DE ENTRADA A LA RED NEURONAL # #********************************************************************************* # se concatenan los vectores p1c al p13c (vectores de valores), para seleccionar # eliminar los vectores no deseados. Eliminar P1a y P1b para salida de 10K. #--------------------------------------------------------------------------------- # X<-cbind(P1a,P1b,P1c,P2c,P3c,P4c,P5c,P6c,P7c,P8c,P9c,P10c,P11c,P12c,P13c); X<-cbind(P1c,P2c,P3c,P4c,P5c,P6c,P7c,P8c,P9c,P10c,P11c,P12c,P13c);

Es posible que de entrada no comprenda demasiado de este código. No se preocupe, sin embargo es fácil de interpretar si lo analiza desde una óptica guiada.

• Lo azul son comentarios que sirven para comprender lo que se ha programado, es una buena practica hacerlo, ya que al tiempo es muy usual que se olvide que quiso hacer en esa parte del script en su oportunidad, además al compartir sirve de guía a terceros. El carácter # al inicio de la línea indica que eso es un comentario y no una instrucción al programa.

• La primera parte es la carga de una librería para conectar a una base de datos MySql, ya hablaremos de ello mas adelante.

• La segunda es la obtención de los datos de esa base de datos y la creación de varios vectores P1a…P13c con datos específicos para el análisis

• Luego los vectores se van uniendo en matrices |Mn| y confluyen en una gran matriz |X|

El resultado es una matriz de 744 filas por 13 columnas que en parte reproducimos aquí:

Esto luego será ingresado para su análisis en una red neuronal. Es destacable que la mayoría del trabajo de R es repetitivo. Si se observa con detenimiento el ejemplo se advertirá que es simplemente la repetición de pocos pasos, trece veces, con una configuración específica a cada situación, pero en definitiva si observamos el “alma” es un trabajo sencillo.

Page 36: Introducción a R utilizando Rstudio server

36 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Las funciones que Ud. lea en el script y que no comprenda recuerde de buscarlas en la ayuda, en poco tiempo dominara la mayoría de las posibilidades de R.

Más Operaciones y funciones con matrices Regresando a las matrices, hay varias operaciones y funciones que permiten un trabajo fluido en R. En el primer cuadro, las operaciones básicas. En el segundo las funciones más usuales. 14

No son las únicas, ya que existen tantas como para “hacer dulce”; para ampliar o conocer más

posibilidades consulte la ayuda de R en Rstudio.

14 Extraídos de www.unbarquero.blogspot.com.ar/2009/03/r-matrices.html

Page 37: Introducción a R utilizando Rstudio server

37 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

5. Listas Una lista es una colección ordenada de datos, como un vector, pero con la diferencia del vector, puede contener tipos de datos diferentes.

Los elementos que integran la lista se denominan “componentes”, tal como se menciono arriba, estos componentes pueden ser valores numéricos, cadenas de caracteres, valores lógicos e incluso vectores o matrices. La función que crea y maneja las listas es list(). Su sintaxis en un ejemplo es:

> agenda<-list(nombre="Juan",apellido="Perez",codigo="101",categoria="a") > agenda $nombre [1] "Juan" $apellido [1] "Perez" $codigo [1] "101" $categoria [1] "a"

Donde las etiquetas (nombre, apellido, código y categoría) poseen un valor asignado. Si por ejemplo quisiéramos agregar un vector o matriz solo deberíamos incluirlo en uno de los campos, o agregar esta lista a una lista que contenga dichos elementos.

El acceso a los componentes se efectúa mediante el índice numérico o por su nombre:

> agenda$nombre[1] "Pedro"

> agenda$categoria [1] "a" > agenda$apellido [1] "Rodriguez" > agenda[1] $nombre [1] "Pedro" > agenda[[1]] [1] "Pedro" > agenda[["nombre"]] [1] "Pedro" >

Supongamos que no le hemos puesto nombres a los componentes de la lista, en el ejemplo siguiente vemos como hacerlo:

> agenda<-list(1, "ahora", T, c(23,34,45)) > agenda [[1]] [1] 1 [[2]] [1] "ahora" [[3]] [1] TRUE [[4]] [1] 23 34 45

> names(agenda)<-c("estado", "cuando", "funciona", "variables") > agenda $estado [1] 1 $cuando [1] "ahora" $funciona [1] TRUE $variables [1] 23 34 45

Page 38: Introducción a R utilizando Rstudio server

38 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Primero hemos creado la lista y después le hemos colocado los nombres a los componentes. Si deseamos agregar un nuevo campo solo debemos colocarlo en la posición siguiente (u otra) de la lista, por ejemplo en este caso en la 5ta con una instrucción de asignación nombrando al nuevo elemento:

> agenda$nombre_perro<-"Sultan" > agenda $estado [1] 1 $cuando [1] "ahora" $funciona [1] TRUE $variables [1] 23 34 45 $nombre_perro [1] "Sultan"

Si por algún motivo deseamos eliminar un componente de la lista, aplicamos agenda[posición en numero]=NULL y se corren todos los elementos de dicha lista, si los hubiera detrás del eliminado. También se puede renombrar un componente utilizando names(lista)[nro componente]<-‘nuevo nombre’:

> names(agenda)[5]<-"Nombre_del_jefe" > agenda $estado [1] 1 $cuando [1] "ahora" $funciona [1] TRUE $variables [1] 23 34 45 $Nombre_del_jefe

[1] "Sultan"

Aplicar funciones a listas, vectores y matrices Se pueden realizar muchas funciones sobre una lista(vectores y matrices) con la función lapply(), útil en casos de valores numéricos. Primero creamos una lista con un vector X y una matriz W

# observe como se crea la secuencia de números > x<-c(1:15) > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) # observe como se crea la secuencia de números, filas y columnas) > w<-matrix(12:23, 3,4> w [,1] [,2] [,3] [,4] [1,] 12 15 18 21 [2,] 13 16 19 22

Page 39: Introducción a R utilizando Rstudio server

39 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

[3,] 14 17 20 23 # creamos la lista conteniendo el vector y la matriz > lista<-list(vector=x,matriz=w) # listamos por pantalla el resultado > lista $vector [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $matriz [,1] [,2] [,3] [,4] [1,] 12 15 18 21 [2,] 13 16 19 22 [3,] 14 17 20 23

Ahora que ya tenemos una lista podemos aplicar algunas de las funciones de R al conjunto de datos. Por ejemplo una media, sumar un término, raíz cuadrada etc:

> lapply(lista, mean) $vector [1] 8 $matriz [1] 17.5

> lapply(lista, "*",5) $vector [1] 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 $matriz [,1] [,2] [,3] [,4] [1,] 60 75 90 105 [2,] 65 80 95 110 [3,] 70 85 100 115

> lapply(lista, sqrt) $vector [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 3.000000 3.162278 3.316625 [12] 3.464102 3.605551 3.741657 3.872983 $matriz [,1] [,2] [,3] [,4] [1,] 3.464102 3.872983 4.242641 4.582576 [2,] 3.605551 4.000000 4.358899 4.690416 [3,] 3.741657 4.123106 4.472136 4.795832

Algunas funciones para lappy()

La función lapply() es el acrónimo de list-apply (aplicar a lista), para extender la usabilidad del comando es conveniente consultar la ayuda de R. Para finalizar el ítem de listas es posible concatenar varias en una grande utilizando el comando c(): GranLista<-c(lista1,lista2,…,lista’n’)

6. Series temporales La función ts crea un objeto de clase "ts" (serie de tiempo) a partir de un vector (serie de tiempo única) o una matriz (serie multivariada). Las opciones que caracterizan un objeto de este tipo son: ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getOption("ts.eps"), class, names)

Donde: data es un vector o una matriz start el tiempo de la primera observación ya sea un número o un vector con dos enteros end el tiempo de la ´ultima observación especificado de la misma manera que start frequency el número de observaciones por unidad de tiempo deltat la fracción del periodo de muestreo entre observaciones sucesivas (ej. 1/12 para datos mensuales); únicamente se debe especificar o frequency o deltat, no ambos ts.eps tolerancia para la comparación de series. Las frecuencias se consideran iguales si su diferencia es menor que ts.eps class clase que se debe asignar al objeto; por defecto es "ts" para una serie univariada, y c("mts", "ts") para una serie multivariada.

Page 40: Introducción a R utilizando Rstudio server

40 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

names para una serie multivariada, un vector de tipo carácter con los nombres de las series individuales; por defecto los nombres de las columnas de data, o Serie 1, Serie 2, . . .

Ejemplo simple:

> ts(1:10, start=1963) Time Series: Start = 1963 End = 1972 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 > ts(1:47, frequency=12, c(1963,2)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1963 1 2 3 4 5 6 7 8 9 10 11 1964 12 13 14 15 16 17 18 19 20 21 22 23 1965 24 25 26 27 28 29 30 31 32 33 34 35 1966 36 37 38 39 40 41 42 43 44 45 46 47

Ejemplo de un objeto ts multivariado, creando los datos y asignándoles las fechas de inicio y finalizacion: z <- ts(matrix(rt(200 * 8, df = 3), 200, 8),start = c(1961, 1), frequency = 12)

Salida de pantalla del objeto z

Los 8 vectores de 200 elementos conforman una matriz generada por la funcion de densidad df, desde enero de 1961 hasta agosto de 1977 (200 meses), para llegar a diciembre de 1977

hubieramos modificado el valor 200 por 204 en ambos parametros de la matriz, ya que esta (o el vector) da el parametro end del objeto ts:

Aug 1977 0.344485638 0.10038734 0.4793899037 0.938980707 0.51215920 -0.652676989 -4.201032383 0.19732965 Sep 1977 -0.017276507 -0.58275948 1.2765019418 -0.587473105 -1.27479022 -0.735514614 -0.593461925 -1.20529338 Oct 1977 -0.400361565 -0.70152649 0.3270212261 0.846609274 -0.09344580 -0.073988515 -2.013691343 1.43581177 Nov 1977 -1.047250442 -3.63683123 -1.7609765624 -1.418322486 -0.30770078 -0.261224369 0.186109543 -0.22609936 Dec 1977 0.508033325 -0.22636919 -0.0945126165 -0.416216730 -1.58260960 -1.234875595 -0.065235039 -2.31813237

Por ultimo un ploteo del ejemplo de la ayuda de R que utilizamos para explicar el código anterior:

El código completo:

> ## Multivariate > z <- ts(matrix(rt(204 * 8, df = 3), 204, 8), + start = c(1961, 1), frequency = 12) > plot(z, yax.flip = TRUE) > plot(z, axes = FALSE, ann = FALSE, frame.plot = TRUE,mar.multi = c(0,0,0,0), oma.multi = c(1,1,5,1)) > title("plot(ts(..), axes=FALSE, ann=FALSE,

Page 41: Introducción a R utilizando Rstudio server

41 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

frame.plot = TRUE, mar..., oma...)") > > z <- window(z[,1:3], end = c(1977,12)) > plot(z, type = "b") # multiple > plot(z, plot.type="single", lty=1:3, col=4:2)

Los parámetros en rojo son los modificados para que la graficación llegue a diciembre de 1977.

7. Dataframes El objeto data.frame, en español “hojas de datos”, es similar a una matriz pero con el concepto de listas, ya que a diferencia de las primeras, admite datos de distinto tipo. Hay algunos que la definen como una colección indexada de listas, otros como el objeto más eficiente para el análisis de datos15

Los objetos data.frame se pueden construir de varias maneras:

• Mediante la instrucción data.frame() • Mediante la lectura de una tabla almacenada en un archivo, con read.table() • Mediante la adicción y forzado a la condición data.frame de otros elementos con la

instrucción as.data.frame() esto acopla los vectores, factores, listas o matrices.

Las condiciones del objeto data.frame Estas ofician de restricciones y son las siguientes según explica la documentación del sitio oficial de R16:

• Los componentes deben ser vectores (numéricos, cadenas de caracteres, o lógicos), factores, matrices numéricas, listas u otras hojas de datos.

• Las matrices, listas, y hojas de datos contribuyen a la nueva hoja de datos con tantas variables como columnas, elementos o variables posean, respectivamente.

• Los vectores numéricos y los factores se incluyen sin modificar, los vectores no numéricos se fuerzan a factores cuyos niveles son los únicos valores que aparecen en el vector.

• Los vectores que constituyen la hoja de datos deben tener todos la misma longitud, y las matrices deben tener el mismo tamaño de filas

A continuación un ejemplo para crear un data.frame a partir de otros elementos:

> pelaje<-factor(c("blanco","cafe","negro","blanco")) > peso<-c(2.45,1.90,2.00,1.95) > conejos<-data.frame(Pelaje=pelaje,Peso=peso,Crias=c(8,6,8,7)) > conejos > conejos Pelaje Peso Crias 1 blanco 2.45 8 2 cafe 1.90 6 3 negro 2.00 8 4 blanco 1.95 7

15 “Métodos Estadísticos con R y RComander” (versión 2.1) Prof. Dr. Antonio José Sáez Castillo. Universidad de Jaén, 2010 (pg 22) 16 “Introducción a R”, Core Team, pg 35

Page 42: Introducción a R utilizando Rstudio server

42 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

En azul la salida de pantalla del data.frame, integrando el factor pelaje, el vector peso y el vector añadido crías. Las matrices, al igual que casi todos los objetos, pueden ser forzadas. En este caso a hoja de datos mediante as.data.frame:

> secuencia<-matrix(1:30, 5,6) # creamos una matriz secuencial 1 a 30 > secuencia # imprimimos en pantalla [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 6 11 16 21 26 [2,] 2 7 12 17 22 27 [3,] 3 8 13 18 23 28 [4,] 4 9 14 19 24 29 [5,] 5 10 15 20 25 30 > hoja_calculo_1<-as.data.frame(secuencia) # convertimos a data.frame > hoja_calculo_1 # imprimimos en pantalla V1 V2 V3 V4 V5 V6 1 1 6 11 16 21 26 2 2 7 12 17 22 27 3 3 8 13 18 23 28 4 4 9 14 19 24 29 5 5 10 15 20 25 30

Observe que las columnas se enumeran V1, V2 …Vn si deseamos ponerles un nombre especifico debemos crear un vector de nombres mediante names:

> names(hoja_calculo_1)<-c("Uno","Dos","Tres","Cuatro","Cinco","Seis") > hoja_calculo_1 Uno Dos Tres Cuatro Cinco Seis 1 1 6 11 16 21 26 2 2 7 12 17 22 27 3 3 8 13 18 23 28 4 4 9 14 19 24 29 5 5 10 15 20 25 30

Algunas formas de llamar a la hoja y a sus datos:

> conejos Pelaje Peso Crias 1 blanco 2.45 8 2 cafe 1.90 6 3 negro 2.00 8 4 blanco 1.95 7 > conejos$Pelaje [1] blanco cafe negro blanco Levels: blanco cafe negro > conejos$Pelaje[3] [1] negro Levels: blanco cafe negro > conejos$Peso[4] [1] 1.95 > conejos$Crias[1] [1] 8

Nota 10

¿Cómo saber que objetos tenemos? Con el comando ls() lista los objetos en memoria del workspace. Si deseamos saber que tipo de objeto se trata, con is.data.frame(), is.matrix() o is.vector() nos responderá:

> ls() [1] "lista" "w" "x" > is.list(lista) [1] TRUE > is.data.frame(w) [1] FALSE > is.vector(x) [1] TRUE

Page 43: Introducción a R utilizando Rstudio server

43 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

8. Operadores y funciones Como todo programa y entorno de programación (R es un lenguaje interpretado, no compilado17), posee una vasta colección de operadores. En las dos tablas que se adjuntan, se exponen algunos

de ellos. Los operadores se suelen clasificar en unarios, binarios etc., según la cantidad de parámetros que intervienen en su expresión.

El uso general es variable_1 operador variable_2

A != B (dará TRUE o FALSE) A + B (dará la adicción de ambos) A & B (dará TRUE o FALSE según la tabla de verdad) La asignación no debe utilizarse con el signo “=” sino con “<-”: C<-A+B (C recibe la suma de A y B) La igualdad (comparación) es “==”

Las funciones en general reciben uno o más parámetros de una o más variables. En la segunda tabla observamos que sum(x) o prod(x) [sumatoria y productorio] reciben un vector, matriz o variable unidimensional, en el ejemplo c=7 y d es un vector de 1 a 10:

> prod(c) [1] 7 > d<-c(1:10) > prod(d) [1] 3628800 > sum(c) [1] 7 > sum(d) [1] 55 > factorial(d) [1] 1 2 6 24 120 720 5040 40320 362880 3628800

En el ejemplo vemos también que el factorial “d” es igual al productorio “d”, dos formas de realizar lo mismo. Por supuesto hay muchas mas funciones, y cada día se agregan mas en numerosos paquetes que se van compartiendo en los repositorios. Estos sitios son de donde descargamos paquetes específicos para ciertos tipos de cálculos o necesidades.

17 Es decir que no genera ejecutables o aplicaciones independientes de su propio entorno.

Page 44: Introducción a R utilizando Rstudio server

44 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Una noticia, varios ejercicios de cálculo Hace un tiempo, en una revista matemática en España, una joven logro emular la proeza de Gauss cuando era niño; me refiero a la sumatoria de los 100 primeros números. Usualmente para realizar este ejercicio se suman los términos (n1+n2+n3+…nn ), simbolizados asi:

�(𝑥𝑖)𝑛

𝑖=1

Esto significa “sumar los términos de x desde 1 hasta n”

Si no disponemos de una pc o una calculadora científica puede ser engorroso sino imposible (las calculadoras en general no poseen memoria suficiente para almacenar esta larga suma en una sola operación). Si tenesmo una calculadora científica o un pc es mas sencillo.

En R la sumatoria es sum(), la maquina realiza las iteraciones (repeticiones) una y otra vez. La joven de la noticia, lo resolvió con una simple formula que solo utiliza operadores comunes matemáticos: n(n+1)/2

Nuestro ejercicio: Si quisiéramos saber cual es la sumatoria de los primeros mil números…. ¿Cual es el resultado y como lo haría?

> sum(1:1000) # utilizando la función sumatoria de n [1] 500500 > 1000*(1000+1)/2 # Haciendo el calculo de la joven española [1] 500500

Otro ejemplo de calculo: El cologaritmo18 de un número es el logaritmo de su inverso, por tanto el cologaritmo de un número es el opuesto de su logaritmo ¿Cómo lo haríamos en R?

> log(10) [1] 2.302585 > log(1/10) # el inverso de n = 1/n [1] -2.302585

El logaritmo es definido como “El logaritmo de un número, en una base dada, es el exponente al cual se debe elevar la base para obtener el número”19 Si tenemos un logaritmo de base 2 (binario):

> log2(3) [1] 1.584963 # este es el logaritmo de 3 > 2^1.584963 # si potenciamos la base (2) por el logaritmo ¿Qué tendremos? [1] 3.000001 # su antilogaritmo! (¿se anima a hacerlo con un logaritmo natural?) > log(8) [1] 2.079442 > 2.7182807066232140698591273860753^2.079442 # base de log naturales o neperianos [1] 7.999997

En estos ejercicios lo que interesa es que comprenda como utilizar la consola, funciones y parámetros. Pruebe realizar toda serie de cálculos, explorando las posibilidades de R y leyendo la ayuda. Eso le dará ductilidad en el manejo de expresiones (así se llaman las líneas de programa) para intentar cosas mas complejas o comprenderlas.

18 Se denomina cologaritmo de un número a su inverso 1/N, de manera tal que log(n) + log(1/n)=0 19 “Elementos de matemáticas” Kutuzov, ed Mir 1980

Page 45: Introducción a R utilizando Rstudio server

45 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Como hacer secuencias20 Habrá advertido que a lo largo del texto hemos salido del paso cuando necesitamos generar datos para trabajar o demostrar, lo hacíamos con secuencias. Aquí veremos algunas

• Secuencias regulares • Secuencias aleatorias

Las secuencias regulares como su nombre lo indican, consisten en aquellas que siguen un orden. Hay varias maneras de crearlas:

La primer manera es indicar el rango desde hasta con 1:30, expresión muy usada para crear vectores: a<-c(1:30)

La segunda es la función seq() (de sequence:

secuencia) que consta de un primer parámetro que es desde, el segundo hasta, el tercero el paso (“by”) que indica la escala y un cuarto que establece una condición de conclusión. 21 En la captura de pantalla se puede ver que incluso se pueden generar secuencias hacia atrás (recuerde que el parámetro By debe tener signo negativo).

Las secuencias aleatorias están compendiadas en la siguiente tabla22 El uso de cada cual depende de los parámetros propios de cada tipo de distribución. Ejemplos:

> rnorm(19) [1] -0.38907028 -1.16947999 0.14250125 -0.43886069 -1.24466640 -0.12730233 1.01931524 -0.10994081 -0.77472142 0.18728813 -0.33068797 -0.56841233 1.02925734 0.49822730 0.68306228 -0.09419181 -0.11362381 1.67033036 0.41387123 > rpois(14,10) [1] 9 7 12 16 9 8 6 12 12 5 13 15 10 9

Por comodidad solemos usar rnorm() o rbinom() pero al tener varios decimales, para usos sencillos es algo engorroso, por eso también utilizamos round() que establece dos parámetros: dato a redondear y decimales, por ejemplo c<-round(rnorm(20),2) que nos dará 20 números aleatorios redondeados a dos decimales.

20 En matematicas a estas secuencias se les denomina “sucesiones” 21 Una tercer manera es concatenar un vector “en crudo”: vector<-c(1,2,3,4,5,6,7,8,9,10) 22 “R para principiantes” Prof. Emmanuel Paradis (Universidad de Montepellier II), traducción de Jorge A. Ahumada (Universidad de Hawaii) pg. 17 y ssgtes

Page 46: Introducción a R utilizando Rstudio server

46 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

9. Leer y guardar datos El sentido y objeto de R es procesar datos en un entorno estadístico que con el tiempo se han ido incluyendo más disciplinas como por ejemplo minería de datos, concepto que involucra muchos procedimientos nuevos como las redes neuronales, los arboles de decisión, etc., esto acarrea volúmenes mayores de datos para ingresar, procesos intermedios y las salidas consecuentes.

Lejos estamos de la época que para hacer un estudio estadístico o un análisis bastaba teclear una docena o dos de datos.

Por esto es evidente que a la hora de procesar datos para obtener información relevante, no vamos a entrar uno a uno cada dato; para eso tenemos algún tipo de repositorio23 de datos que accedemos para tomar selectivamente o a granel lo necesario y procesarlo. Lo mismo para la salida, un repositorio que permita guardar esos datos elaborados (información) de manera tal que podamos leerlos para extraer las conclusiones pertinentes.

Por ejemplo en algunas de nuestras bases de datos albergamos algunos datos “crudos”:

• Clima: 558.775

• Germoplasma 1: 11.900

• Telecomunicaciones: 159.140

¿No es una tentación para cualquier estadístico o explorador de datos? Aun así, no son grandes bases, pero el potencial de análisis es grande.

a. Repositorios de datos Para poder trabajar los datos se suelen importar a R mediante varios tipos de repositorios; a la inversa, los resultados o pasos intermedios se suelen exportar también. Esencialmente pueden ser repositorios:

• Archivos de texto plano (CSV) delimitados por comas, punto y coma o tabulaciones

• Archivos de planillas de calculo Excell • Bases de datos (MySql y otras) • Direcciones de Internet. • Desde el teclado24

b. Para comenzar: iniciar sesión en Rstudio La primera operación que se debe realizar antes de cargar o guardar material desde R es determinar el directorio por defecto. La manera de hacerlo en Rstudio es por consola de comandos, por script o por la interfaz grafica. 23 Repositorio es un archivo o sistema que permite guardar los datos sin procesamiento alguno (crudos) tal como se han medido o contado. No confundir con fuente, que puede ser, por ejemplo, un termómetro, un anemómetro, una encuesta, es decir los instrumentos generadores. 24 El único procedimiento existente en Rstudio es scan(), la función data.entry() no esta implementada en Rstudio pero si en R.

Nota 11

También puede ingresar desde el teclado “en vivo” valores mediante scan():

> scan() 1: 23 2: 33 3: 44 4: 55 5: Read 4 items [1] 23 33 44 55

Finaliza con una entrada de carácter nulo (enter)

Page 47: Introducción a R utilizando Rstudio server

47 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

• Pero esto depende del entorno de trabajo que se halle. Si utiliza Rstudio-server el path (dirección del directorio de trabajo) lo determina Debian, el servidor donde este alojado Rstudio server. Usualmente es “/home/<usuario> “

• En una instalacion local de Rstudio, el directorio por defecto es “C:/Users/<usuario> /Documents”

• En ambos casos la recomendación es que para cada proyecto se utilice una carpeta diferente, guardando no solo los scripts sino también el workspace y los archivos que necesite.

Si usted va a correr una versión de Rstudio-server, debe primeramente conocer la IP (dirección “internet Protocol”, un grupo de cuatro secuencias de tres números) y el puerto donde se accede

al server. En nuestro ejemplo es: 192.168.0.102:8787

Donde 8787 es el puerto de acceso y la secuencia previa la “dirección”. Abrimos el navegador web (aconsejamos Chrome Google) y escribimos esa secuencia (o la que su administrador de red le de). En la imagen vemos el acceso a Rstudio –server con el navegador Chrome, detalles de la dirección IP y del panel de acceso (login) en los detalles.

En el caso de una instalación local (solo en su pc) no hay acceso, solo debe púlsar el icono en el escritorio o en la barra de programas y accede.

Page 48: Introducción a R utilizando Rstudio server

48 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Arriba: Rstudio server a través de una interfaz en el navegador WEB, abajo: Rstudio versión local

Como se advierte son idénticas ambas pantallas. Solo difieren en algunos aspectos menores (la interfaz web requiere validación como usuario con contraseña) no así en las funcionalidades y elementos.

Una vez abierto el programa en cualquiera de sus dos modalidades, para comenzar y configurar su directorio de trabajo debe saber donde esta. Con la función getwd() obtiene la ruta por defecto en donde guardara sus archivos. En las dos imágenes siguientes se podrá ver la misma en dos

Page 49: Introducción a R utilizando Rstudio server

49 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

entornos distintos, en el Server (que corre un Linux Debian)25 y en una instalación local en un Windows 7

En la imagen de la izquierda se aprecia que es la instalación del servidor, la URL es visible. En la información de versión también nos lo indica. El directorio por defecto es /home/usuario

En la imagen de la derecha se

visualiza que la instalación es local, en un Windows 7 y el directorio por defecto es /users/usuario/documentos Las funciones versión y getwd() son las utilizadas para determinar esta información.

c. Configurar directorio Para hacerlo por consola basta con utilizar el comando setwd(ruta):

En instalación local Windows Errores: > getwd() [1] "C:/Users/Edwin/Documents" > setwd("C:/Users/Edwin/Documents/articulos/proyecto") Error en setwd("C:/Users/Edwin/Documents/articulos/proyecto") : no es posible cambiar el directorio de trabajo > setwd("C:/Users/Edwin/Documents/articulos/proyecto") > getwd() [1] "C:/Users/Edwin/Documents/articulos/proyecto"

No existe el directorio “proyecto”

En servidor Debian Errores: > getwd() [1] "/home/edwin" > setwd("/home/edwin/r/proyecto") Error in setwd("/home/edwin/r/proyecto") : cannot change working directory > setwd("/home/edwin/R/proyecto") > getwd() [1] "/home/edwin/R/proyecto"

Case sensitive: no es “r” sino “R” el directorio (ver imagen)

d. Errores: debe tener en cuenta que el directorio al cual ubicara su proyecto debe necesariamente existir. Si no es asi, desde el panel de “files” (archivos) puede crear una nueva carpeta (“folder”) e incluso

25 Rstudio server se instala sobre Linux exclusivamente, hasta este momento. Las distribuciones que ya están adecuadas para su instalación sin mayores compilaciones, son Debian, CentOs y Ubuntu. Utilizamos Debian debido a su facilidad, sus repositorios y su manejo. Ubuntu y CentOs no le van a la zaga. Las demás distribuciones requieren de compilación de las fuentes y eso a veces si no se es conocedor se suele dificultar un poco. Si va a instalar Rstudio Server le recomendamos Debian

Page 50: Introducción a R utilizando Rstudio server

50 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

asignarla como directorio de trabajo por defecto en el mismo menú grafico, tanto en la instalación del server como en la local. En la imagen se puede apreciar este trabajo.

En la primera de la izquierda creamos la carpeta, en la segunda asignamos como directorio de trabajo por defecto.

• También es posible hacerlo desde el menú “ToolsSet working directory” si no le agrada hacerlo con la consola.

e. Lectura desde archivos26 La clase “utils” posee varias funciones que permiten leer varios cuyas funciones inician con “read”, tenemos read.table(), read.csv(), read.swf(), read.csv2(), read.delim() y read.delim2().

Un ejemplo de read.csv()

#configuramos donde setwd("D:/mapas/apellidos/") # obtenemos la matriz 100*3 apellidos apellidos <- read.csv("apellidos.csv", header=F) #View(apellidos) # descomentar para que aparezca la ventana con los apellidos # array de nombres de apellidos nombres<-as.array(apellidos$V1) cifras<-as.array(apellidos$V2)

En la imagen lateral: un ejemplo con read.table(). El directorio sobre el cual esta posicionado contiene el

archivo “resultados”, que es una tabla. Si no fuera asa en el parámetro deberá indicar la ruta absoluta: (“c:/users/usuario/documentos/artículos/proyecto/resultados”). Se recomienda leer la ayuda de Rstudio para comprender los parámetros necesarios para la apertura de estos archivos. En el caso del CSV suele ser necesario indicar el tipo de delimitador (comas, espacios, tabulador,

26 Para escribir en archivos se utiliza la función write() que no explicaremos aquí dado que es muy similar a read(), pero se puede consultar en el manual de R

Page 51: Introducción a R utilizando Rstudio server

51 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

punto y coma) además si el header (encabezado o vector con los nombres) se carga. En la tabla adyacente se pueden observar las configuraciones de los parámetros para read.table()27

Un detalle a tener en cuenta es que Excel genera archivos CSV que suelen presentar problemas si no se advierte que los separadores (delimitadores) entre campos no siguen una norma estandarizada.

Para abrir estos CSV se sugiere revisar con un block de notas (no con Word) y observar cual es la

separación entre campos. De todas maneras la interfaz grafica de carga de Rstudio permite ver en detalle el proceso de importación y cargar los parámetros visualmente, e inclusive copiándolos de la consola, incorporarlos a un script. En las imágenes vemos la operatoria:

En el panel de Workspace, la pestaña “import Dataset” seleccionamos desde un archivo de texto. Navegamos entre los directorios y seleccionamos –por ejemplo- Resultados, la tabla que hemos

salvado. Al seleccionarla se abrirá la ventana de la imagen, allí vemos dos vistas, la original y la que se importara si utilizamos los criterios de separator (delimitador), en este caso es “espacio en blanco”, Decimal y Quote, que referencian a los formatos de números y textos. Finalmente heading es el encabezado con el vector de nombres, que se puede captar o no según se seleccione si o no. Es correcto tratar de levantar distintos tipos de archivos (txt, csv) para comprender el mecanismo. Si las opciones están bien configuradas debería ver el resultado similar a la ventana inferior del ejemplo.

Al aceptar esta configuración abrirá la consola con un comando que puede copiar para guardar (copy y paste) desde la consola a la ventana de scripts. Es un buen recurso para cuando hay dudas en cuanto a como escribir correctamente los parámetros de la función read.table(). El ejemplo con la imagen correspondiente:

27 “R para principiantes” o. cit. Tabla de pagina 11

Page 52: Introducción a R utilizando Rstudio server

52 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

> resultados <- read.table("~/articulos/proyecto/resultados", header=T, quote="\"")

El comando view() nos abre una ventana en el panel de scripts con el archivo, para inspeccionar.

f. Escritura hacia archivos Tanto como leer datos es importante saber guardarlos. La función por excelencia para escribir es write(). La función simple es write(“datos”, file=”archivo.extension”) que guardara en el directorio de trabajo (o en la ruta si la incorpora al nombre de archivo) su objeto de datos. Las opciones a este comando permiten determinar el numero de columnas, si el archivo es rescrito o agregado, si no existe crearlo, etc. El cuadro debajo ilustra sobre dichas opciones y su uso28

La función write.table guarda el contenido de un objeto en un archivo. El objeto es usualmente un data.frame, pero puede ser cualquier otro tipo de objeto que el usuario determine (vector, matriz, lista etc. ). Los argumentos y parámetros son:

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

Write.table incorpora sep=”” que indica como van delimitados los datos, por ejemplo por tabulador (“\t”), coma (“,”), punto y coma(“;”) tambien la indicacion de EOL (final de linea) con un salto de linea ("\n"); etc. Debe prestar atención que parámetros elegirá para salvar sus datos, ya que existen varios tipos de codificaciones que varían entre sistemas y programas (es proverbial la

28 “R para principiantes” op. Cit.

Nota 12

La mejor manera de importar datos a Rstudio, en realidad a R, es crear desde el programa que utilice, un archivo de texto plano (CSV) e importarlo con la interfaz grafica de Rstudio, así podrá supervisar el proceso y detectar si hay delimitadores o marcas de formato que impidan la correcta adición de datos a su script.

Page 53: Introducción a R utilizando Rstudio server

53 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

manía de Microsoft Office para cambiar estos valores por defecto, a fin de tener un estándar propio).

Por supuesto los mismos argumentos que utiliza write, se aplican a write.table. También se pueden guardar en otros formatos (bases de datos, csv, Excel, consulte la ayuda de las librerías especificas para tal propósito)

g. Desde la web Si quisiéramos tomar un archivo de la web existe el comando download.file() La sintaxis que nos da la ayuda es la siguiente:

download.file(url, destfile, method, quiet = FALSE, mode = "w",cacheOK = TRUE, extra = getOption("download.file.extra"))

h. Excel y otros tipos de formatos Los archivos con extensión de Excel XLS pueden ser abiertos instalando el paquete “gdata” y utilizando la función read.xls() aunque es algo difícil de utilizar y además requiere la instalación adicional de python.

Con el paquete “XLConnect” existe una función readWorksheetFromFile() que permite leer los archivos xlsx de excel 2007 – 2010, cuyo ejemplo vemos en la imagen adjunta, la instrucción:

data2<-readWorksheetFromFile("excel2010.xlsx",sheet=1)

Carga en data2 la table de excel. Los archivos anteriores de excel (xls) también se pueden cargar via ODBC con el paquete RODBC, que sirve también para cargar datos

desde bases de datos como MySql y otras.

“R no es particularmente bueno importando datos generados por otros programas. No obstante, el paquete recomendado es foreign que lee ficheros en formatos propios de, entre otros, SPSS, SAS, Minitab, Stata, Epi y S. Hay que destacar que los formatos pueden presentar ligeras variaciones de unas versiones a otras (típicamente, las versiones posteriores leen ficheros producidos mediante las precedentes, pero no al revés). Podemos así encontrar que foreign nos permite leer, por ejemplo, \worksheets" de Minitab de una versión determinada y las anteriores, pero no las posteriores. Se impone por tanto también la prueba.”29

Sin embargo dentro de las opciones evite usar Excel ya que es muy comun que según la version del mismo (97, 2000, 2003, 2007, 2010) haya variaciones que hagan la lectura dificil. En parte porque al cambiar el parametro XLM entre el 2003 y 2007, se suelen dar problemas de compatibilidad al leerlos. Conviertalos a CSV y lea o grabe desde ese formato

29 “Lectura, manipulación y análisis de datos en R”, F. Tusell, actualización 2007 pag. 3; http://www.et.bs.ehu.es/~etptupaf

Page 54: Introducción a R utilizando Rstudio server

54 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

i. Conexiones ODBC y lectura-escritura en bases de datos La lectura y escritura en bases de datos es la mejor opción de trabajo para maximizar la potencia de R, ya que la naturaleza de una DB (base de datos) es almacenar datos. Existe la costumbre de utilizar Excel como repositorio de datos. A ese respecto hay una publicación del investigador especializado en ecología de bosques, Dr (PhD) Duncan Golicher:30

“No sería una exageración decir que la mayoría de los errores en la captura y mantenimiento de datos tienen la misma causa. Es el uso casi universal de hojas de cálculo para la captura de datos. Las ventajas de hojas de cálculos son aparentes.

1. Su lógica es fácil de entender y usar.

2. Son universalmente disponibles en cualquier computadora.

3. Tienen herramientas potentes integradas para procesar y graficar datos.

4. La estructura de los datos es visualmente aparente y transparente

5. Usuarios avanzados de hojas de cálculo pueden usar una hoja de cálculo como si fuera un base de datos sofisticada.

Efectivamente, mientras que sean correctamente utilizados las hojas de cálculo son herramientas potentes. Sin embargo las fortalezas de hojas de cálculo están relacionadas con sus debilidades principales. La flexibilidad que hace hojas de cálculo tan atractivas al mismo tiempo causa su mal uso y abuso. Al abrir una hoja de calculo el usuario esta presentado con una hoja en blanco sin estructura. Entonces hay mucha tentación de inventar una estructura de datos particular para cada problema. El resultado es caótico.

Una forma de evitar la mayoría de los problemas comunes es sencilla. Siempre asegurar que se puede entrar los datos en ...... ¡una base de datos! Suena trivial y hasta tautológico aconsejar que se use software diseñado para mantener datos para mantener datos! Sin embargo muchos estudiantes piensan que una hoja de cálculo como Excel es una base de datos.

No lo es. Manejar Excel como una base de datos relacionada es posible, pero no es nada fácil, ni para usuarios expertos que saben programar en Visual Basic para aplicaciones. Para un usuario normal sin experiencia con bases de datos sería imposible manejar datos con una estructura jerárquica compleja en Excel.

En cambio, muchas cosas que son difíciles en Excel son fáciles en una base de datos1. Además la exportación de datos de una base de datos a Excel para su procesamiento siempre es fácil. Hasta con ODBC se puede hacer una conexión directa para que Excel puede usar la potencia del “structured query language”31 directamente.

Es común encontrar una resistencia a tomar el camino del uso de bases de datos entre usuarios con algo de experiencia intermedia con Excel. Al tener contacto con una base de datos de verdad como Access, MySQL o PostgreSQL usuarios quienes han encontrado sus propios métodos de lograr resultados en Excel frecuentemente se quejan que el programa no les deja estructurar y capturar los datos como quieren. ¡Exactamente! Muy bien. Esta es precisamente su mayor ventaja. Si quieres mantener tus datos con una estructura que no es posible en una base de datos, entonces estas ciertamente pensando en una estructura equivocada para tus datos. Por todo lo lógico que te parezca, tu estructura casi siempre va a ser difícil de comunicar a los demás y probablemente va a causarte muchos problemas al largo plazo.”

Excel, es bueno recordarlo, es una planilla de cálculos, mientras que una base de datos es lo que su nombre indica, una base de datos. Es algo preparado para soportar grandes volúmenes de datos, procesarlos para servir consultas, filtrados, operaciones ABM (altas, bajas, modificaciones), etc. Es una buena práctica que los datos se guarden siempre en una DB. Hay muchos tipos de base

30 “Como mantener tus datos de investigación ordenadas” Duncan Golicher 2008, 31 SQL: lenguaje estructurado de consultas, lenguaje de manejo y administración de DB

Page 55: Introducción a R utilizando Rstudio server

55 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

de datos, pero en general se definen entre relacionales y no relacionales. La diferencia esta dada en que las primeras poseen índices en una tabla que refieren a otras tablas. Así por ejemplo un código en una tabla refiere a datos más extensos que están contenidos en una segunda tabla. El mantenimiento de la segunda tabla es independiente de la primera, que solo utilizara estos índices para indicar ciertas condiciones dadas por esa codificación.

En la imagen vemos un diagrama EER, esto es un diagrama o modelo entidad-relación (a veces denominado por sus siglas en inglés, E-R "Entity relationship", o del español DER "Diagrama de Entidad Relación") es una herramienta para el modelado de datos que permite representar las entidades relevantes de un sistema de información así como sus interrelaciones y propiedades. En el caso de las relaciones en una base de datos científica, como la del ejemplo32, tenemos que:

Los registros de la tabla “ríos” nos refieren a las distintas relaciones, por ejemplo “cod_rios” (código de ríos) involucra una forma de enumeración por cada rio (en tablas separadas) Para agregar un nuevo rio solo hace falta agregar el código en cod_rios y crear la tabla especifica; también vemos la relación entre cod_med (códigos de medición) que refiere a distintas medidas que se cargan también en las tablas de ríos. Este esquema da flexibilidad y permite crear consultas (“query”) muy especificas o filtradas que serian imposibles en un entorno excel. En R utilizando tan solo la consulta adecuada se puede disponer de los datos con la granularidad deseada: muy genéricos o muy específicos, pasando por toda la gama intermedia.

32 Base de datos “Flamenco” en la que analizamos la relación existente entre ríos de Corrientes y determinados puntos del Pacifico Norte, con el Investigador del Instituto de Clima y Agua INTA Castelar Dr Eduardo Flamenco. El EER es solo demostrativo, no refleja el estudio en minería de datos con R que se esta efectuando al escribir estas líneas. (N del A)

Page 56: Introducción a R utilizando Rstudio server

56 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

j. Introducción al mundo de las bases de datos Las bases de datos difieren en un funcionamiento y forma en que están programadas, pero poseen una generalidad que las hace universales, es el SQL o lenguaje estructurado de consultas que hace que una operación sea mas o menos universal en todas las bases de datos.

Por ejemplo “SELECT * FROM tabla_equis” nos traerá la información contenida en la totalidad de la “tabla_equis”; “SELECT id,especie,f_siembra,f_emergencia,f_cosecha FROM

tabla_equis WHERE condición=x” tendrá una salida selectiva en cuanto a los datos y su cantidad.

Un par de capturas de una DB MySql, la primera mediante un software que oficia de manejador de la base de datos33, llamado phpmyadmin (especifico para MySql):

En la ventana de comando introducimos una instrucción sql, el resultado (4 registros) se aprecian en la ventana grande de fondo. Si por el contrario usted posee acceso directo al servidor MySql puede acceder también por consola, es un método más laborioso pero rápido.

En este ejemplo corremos un server de MySql local (dentro de la propia pc), también es posible acceder a un server MySql en red LAN o en la Internet, colocando en la llamada el parámetro –h (host) que es donde esta el servidor de MySql, por ejemplo en 192.168.0.101; en nuestro ejemplo el server esta ubicado en la propia pc, el server se llama “localhost” o 127.0.0.1, lo que no requerirá el parámetro –h en la llamada.

En un par de imágenes puede ver como es el trabajo con esta modalidad, la preferida de la mayoría de los programadores ya que la pantalla de comandos es menos amigable. El programa cliente de la base de datos se llama: mysql –u root –p [enter] desde la consola de comandos de su sistema

33 Los sistemas de gestión de bases de datos o mejor conocidos como SGBD (en inglés database management system, abreviado DBMS) son un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan.(Wikipedia)

Page 57: Introducción a R utilizando Rstudio server

57 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

La consulta sql de la consola es la misma que la efectuada en phpmyadmin, la salida es la misma: 4 registros identificados con el Id (IdMani1) 12, 80, 156, 170

En definitiva el uso de la interfaz grafica o de la consola dependerá de las preferencias del investigador, para ambas deberá consultar con su administrador de red puesto que se requieren crear servers de DB, Apache y Php (estos dos últimos en caso de utilizar phpmyadmin). Una solución local (en su pc) es el programa XAMPP que instala todo esto en una sola aplicación.

k. R y MySql En R se puede incorporar una consulta SQL mediante una serie de instrucciones:

1 library(RODBC) 2 ch <- odbcConnect("telip", "root", "entropia") 3 odbcGetInfo(ch) 4 P<-as.real(as.matrix(sqlQuery(ch, as.is=TRUE,

paste("SELECT bruto FROM datos where id <101" , sep=""))));

La explicación de este script es la siguiente:

En la línea 1 se carga una librería especifica para conectar mediante ODBC (un objeto del sistema que se especializa en la conexiona bases de datos). Este OBDC oficia de conducto entre la base de datos y el programa, llevando las consultas y devolviendo el resultado. ODBC existe en Windows, Linux y otras plataformas.

En la segunda línea se crea un objeto “ch” que posee los parámetros de conexión a ODBC y el usuario y password

de la base de datos.

La tercera línea nos devuelve un informe sobre la DB y nos indica que la conexión posee un status exitoso.

Finalmente la cuarta línea nos extrae una consulta que se carga en un vector “P” de 100 elementos. Existe una línea final que “plotea” un grafico que vemos a la derecha inferior de la imagen:

Page 58: Introducción a R utilizando Rstudio server

58 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

l. Conducto ODBC Una parte importante de la conexión ODBC es el conducto. En el caso que nos ocupa es un driver que se descarga del sitio oficial de MySql, al momento de esta redacción es el 5.3. Este driver se debe instalar en el server de Rstudio o en la instalación local (depende como se use Rstudio) y se configura en Debian mediante una herramienta llamada UnixODBC, en Windows en

las “herramientas administrativas”

existe el gestor de “Administración de orígenes ODBC”, ambas imágenes en las capturas.

Para instalar y crear los conductos ODBC consulte con su administrador de red, ya que existen

algunos conceptos que pueden resultar difíciles para un usuario que desconozca sobre redes, direcciones IP y servidores de datos. Ante cualquier duda no dude en consultarnos. Finalmente en Windows existen nativamente drivers de ODBC para Access y Excel.

Page 59: Introducción a R utilizando Rstudio server

59 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

m. Como guardar nuestros datos en MySql No solo se trata de tomar los datos. Una vez elaborados debemos guardarlos de alguna manera. La librería RODBC también posee las herramientas para realizar esta acción.

sqlSave(channel, dat, tablename = NULL, append = FALSE,rownames = TRUE, colnames = FALSE, verbose = FALSE,safer = TRUE, addPK = FALSE, typeInfo, varTypes, fast = TRUE, test = FALSE, nastring = NULL) sqlUpdate(channel, dat, tablename = NULL, index = NULL,verbose = FALSE, test = FALSE, nastring = NULL,fast = TRUE)

Si esto es demasiado técnico para usted, no se preocupe, haremos un ejemplo esclarecedor (eso esperamos) Tenemos una tabla llamada “resultados” cuya imagen adjuntamos. Esta compuesta de 10 campos, los cuales 9 son utilizados (el primero es el índice único de cada registro, no se repite). El código:

#================================================================================== # GUARDAR DATOS EN RESULTADOS #================================================================================== library(RODBC) ch <- odbcConnect("germoplasma", "jefe", "123456789") odbcGetInfo(ch) #================================================================================== sqlTables(ch) #lista las tablas existentes #================================================================================== valores<-c(round(rnorm(10),2)) # creamos valores para guardar mejoresto<-data.frame("casos"=valores); # creamos un data.frame sqlSave(ch,"resultados", mejoresto, rownames=FALSE, addPK=FALSE);

Este script guardara los datos del dataframe en su base de datos MySql. Como es costumbre le aconsejamos que revise la bibliografía de la librería, ya que de versión en versión pueden haber diferencias sutiles que ocasionen algún que otro dolor de cabeza;

de todas maneras si guardar en una base de datos se le complica, guarde en CSV, desde MySql es posible importar estos datos con seguridad utilizando PhpMyAdmin.

Page 60: Introducción a R utilizando Rstudio server

60 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

n. Otras maneras de guardar datos en MySql Por supuesto, al igual que en la matemática, no hay un único camino para hacer las cosas. Si deseamos a toda costa y pese a los errores y avisos que emita Rstudio, la forma mas simple de guardar nuestros datos es la misma manera en que se han rescatado: mediante una query. Una sentencia “pura” de MySql en lugar de una función de RODBC. ¿Cómo? Utilizando la expresión propia del lenguaje SQL para ello y usando la función sqlQuery que ya utilizáramos al llamar los datos de una tabla. Veamos el proceso.

#================================================================================== # PRIMERA PARTE: CONEXION A LA DB #================================================================================== library(RODBC) ch <- odbcConnect("germoplasma", "mi_usuario", "mi_password") odbcGetInfo(ch) #================================================================================== sqlTables(ch) #lista las tablas existentes #==================================================================================

Esta salida nos dará las tablas existentes, solo a los fines de detallar y realizar la inserción correctamente, la salida por consola:

TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS 1 germoplasma mani1 TABLE 2 germoplasma resultados TABLE > #================================================================================

Tenemos dos tablas, una de la cual hemos extraído datos en el ejercicio de creación de un script, y la tabla “resultados” que esta creada en el ítem anterior, para guardar los resultados de nuestros cálculos. En SQL la orden de guardar datos es la siguiente:

INSERT INTO “tabla_donde_guardar” VALUES (valor1,valor2, …, valorN)

Donde “valor1…N” es el valor en el tipo de datos especifico que guardara la tabla. En la imagen del ítem anterior observamos que la tabla Resultados posee tipo numérico decimal 12,2; significa que admite números de hasta 12 dígitos con dos decimales. Si requiere mas precisión en ellos, debe cambiar a, por ejemplo, 12,4 etc.

Un ejemplo nos permite cargar datos a la Base:

sqlQuery(ch, as.is=TRUE, paste("INSERT INTO resultados(valor1, … , valorN) VALUES(valor[1],… valor[N],)"));

Sin embargo a veces no resultan (sqlSave ni sqlQuery) debido a complejidades propias de los lenguajes R y sql, especialmente por el tema de los caracteres que se utilizan en uno y otro entorno. Si llegan a producirse problemas o incompatibilidades, consulte la

ayuda de RODBC.

Page 61: Introducción a R utilizando Rstudio server

61 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Creación de un proyecto partiendo de cero Un proyecto en Rstudio, como toda tarea sistemática y metodológica, exige algunos pasos previos que hacen al resultado final. Estos pasos se pueden resumir en dos o tres conceptos generales:

• Trace un plan de trabajo sobre que va a hacer, desde donde parte, con que elementos cuenta para los análisis y como los va a procesar para obtener una salida y de allí la conclusión que permita darle sentido a su trabajo.

• Lo ideal es hacer este plan o esquema de trabajo en un papel, dividiendo las etapas de manera clara y concisa, por ejemplo “adquisición de datos por csv”, “creación de vectores de análisis”, “análisis de vectores con matriz de correlaciones”, etc., hasta llegar al final que usualmente es un despliegue de datos (en forma de matriz, dataframes o vectores) y gráficos.

• Corroborar todos los pasos intermedios y resultados finales, revisando no solo los datos y sus procesos, sino también las funciones aplicadas. Muchas veces se utilizan mal funciones que dan obviamente resultados erróneos o funciones no adecuadas para el caso. Un defecto común es por ejemplo no normalizar valores cuando tenemos muchas variables disimiles, mezclar tipos de variables (continuas, discretas, categóricas etc.) o usar un método que quizás no sea el mas adecuado (por ejemplo en agrupamientos –clustering- se utilizan distancias. Hay seis o siete tipos de distancias ¿Cuál es la adecuada para su caso específico?)

Lo bueno del caso es que R posee una gran comunidad científica y técnica que comparte conocimientos en listas de correos, si posee dudas y no tiene a quien recurrir, la suscripción (gratuita) a estas listas será fuente de conocimiento. Plantear su duda en ella es un procedimiento habitual, ya que la lista de paquetes y funciones de R siguen creciendo día a día y estar al tanto de todos los paquetes y actualizaciones es un trabajo ingente y nadie puede abarcar todo el conocimiento por si mismo.

Nota 13

Para suscribirse a la lista de R en español debe darse de alta en la dirección https://stat.ethz.ch/mailman/listinfo/r-help-es

Ejemplo de lista:

Envíe los mensajes para la lista R-help-es a [email protected] Para subscribirse o anular su subscripción a través de la WEB https://stat.ethz.ch/mailman/listinfo/r-help-es O por correo electrónico, enviando un mensaje con el texto "help" en el asunto (subject) o en el cuerpo a: [email protected] Puede contactar con el responsable de la lista escribiendo a: [email protected] Si responde a algún contenido de este mensaje, por favor, edite la linea del asunto (subject) para que el texto sea mas especifico que: "Re: Contents of R-help-es digest...". Además, por favor, incluya en la respuesta sólo aquellas partes del mensaje a las que está respondiendo. Asuntos del día: 1. Re: correr modelos no lineales (Roy Vera) 2. Re: correr modelos no lineales (Jorge I Velez) 3. Re: Gráfico con varias variables (Carlos Ortega) 4. Re: Gráfico con varias variables (M. Monsalvo) ------------------------------------------------------------------

Page 62: Introducción a R utilizando Rstudio server

62 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Leer las ayudas de R es otra fuente de conocimientos que reditúa. No deje nunca de consultar y aun de practicar los ejemplos propuestos, haciendo un “copy y paste” en la consola, ya que ver como funcionan las cosas ayuda a su comprensión.

En las próximas páginas vamos a abordar un proyecto sencillo, con la idea que se familiarice con el entorno y su manejo. No se preocupe si no comprende los comandos. Los conceptos son más importantes.

a. Pasos del proyecto El siguiente trabajo es un ejemplo de la metodología que aplicaremos, los resultados en este caso son irrelevantes por cuanto es simplemente un ejercicio, una prueba de concepto.

Caso: tenemos una lista de los 100 apellidos mas usuales en Argentina, deseamos ver que grado de cercanías hay entre ellos, y como agruparían en un clúster imprimiendo una salida en un dendograma.

Materiales: apellidos.csv34

Procedimientos: Preparación del espacio del proyecto, adjuntar archivos de datos al espacio, instalar y carga de librerías si fueran necesarias, importación de datos del CSV, transformación de los datos aplicando “distancias” y procesándola finalmente en “clústeres”, impresión del dendograma resultante.

b. fuente de datos El CSV es un archivo de texto plano en el que hay dos columnas por cien filas, con campos separados por comas simples, aquí copiamos en una tabla que usted puede copiar y pegar en un bloc de notas35 en una sola columna doble de 100 filas:

Gonzalez, 568.240 Rodriguez, 483.212 Gomez, 426.253 Fernandez, 411.462 Lopez, 393.704 Diaz, 346.271 Martinez, 336.094 Perez, 294.527 Garcia, 290.821 Sanchez, 271.351 Romero, 256.397 Sosa, 187.974 alvarez, 173.055 Torres, 166.497 Ruiz, 160.483 Ramirez, 154.248 Flores, 140.829 Acosta, 135.893 Benitez, 133.599 Medina, 132.625 Suarez, 130.607 Herrera ,129.372

Gimenez ,123.938 Molina ,119.674 Silva ,118.825 Castro ,118.106 Rojas ,116.775 Ortiz ,107.835 Nunez ,104.668 Luna ,104.581 Juarez ,100.092 Cabrera, 99.884 Rios ,98.761 Ferreyra, 96.761 Godoy ,96.228 Morales ,95.628 Dominguez, 94.781 Moreno, 94.537 Peralta, 92.707 Vega ,92.127 Carrizo ,91.365 Quiroga, 89.583 Castillo ,88.398 Ledesma, 88.394

Vera ,79.882 Vazquez ,75.365 Villalba, 74.107 Cardozo, 73.932 Navarro, 73.907 Ramos ,73.458 Arias ,71.587 Coronel ,71.534 Cordoba, 70.713 Figueroa, 70.092 Correa ,70.055 Caceres, 69.720 Vargas, 69.447 Maldonado, 68.510 Mansilla, 66.763 Farias, 66.535 Rivero, 66.461 Paz ,66.457 Miranda ,66.138 Roldan, 65.375 Mendez ,63.575 Lucero ,63.367

Paez, 60.580 Blanco, 59.333 Mendoza, 58.956 Barrios, 58.811 Escobar, 58.604 avila ,57.990 Soria ,57.192 Leiva ,55.633 Acuna, 55.515 Martin ,55.310 Maidana, 54.806 Moyano ,54.009 Campos, 52.282 Olivera ,51.972 Duarte, 51.493 Soto ,50.657 Franco, 50.613 Bravo, 50.588 Valdez, 49.717 Toledo, 49.645 Andrada-Andrade, 49.543 Montenegro, 49.291

34 Extraído del INDEC 35 Recomendamos calurosamente el Notepad++ (va por la versión 6) el preferido por los programadores.

Page 63: Introducción a R utilizando Rstudio server

63 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Aguirre ,126.822 Pereyra ,125.009 Gutierrez, 124.550

Munoz ,81.343 Ojeda, 80.233 Ponce, 80.050

Cruz, 63.226 Hernandez, 63.157 Aguero ,62.727

Leguizamon ,48.602 Chavez ,48.355 Arce, 47.344

Es importante que no agregue ni quite nada, por eso se debe usar el bloc de notas y no otros programas que agregan marcas ocultas de formato. Este archivo lo debe guardar como “apellidos.csv”; la extensión CSV también es importante. También debe eliminar los caracteres acentuados, ya que suelen presentar problemas cuando están presentes.

c. Iniciamos el proyecto

Al iniciar Rstudio “limpio” (sin variables ni historial cargado) vamos al ítem Proyecto en Menú y seleccionamos la opción de nuevo proyecto, si ya tuviese uno activo puede abrirlo en “open Project” o echar un vistazo en “Recent Projects” para ver el listado de proyectos anteriores.

Como estamos haciendo un proyecto de R desde cero es de suponer que no tenemos aun nada en la lista de recientes. Al pulsar "New Project” nos aparece la ventana de selección de nuevo directorio, directorio existente y control de versión de proyecto.

• Nuevo directorio permite crear el sitio especifico para este proyecto

• Abrir uno existente es la segunda opción • Control de versión es una herramienta para

chequear que los archivos que hemos creado colaborativamente (y almacenados en algún lugar de la web) estén actualizados.

Seleccionamos la primera opción y completamos los datos requeridos. Esto creara una carpeta “Apellidos” con un archivo “apellidos.r” que contendrá el workspace y otra información relevante

Page 64: Introducción a R utilizando Rstudio server

64 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

adjunta. Cada vez que salgamos se guardaran los datos en dicho lugar, además de poder llamar a todos los elementos desde proyectos recientes.

Quizás parezca trivial, pero a la hora de revisar y cargar los scripts además de variables y espacio de trabajo es realmente muy útil, especialmente si llevamos varios proyectos paralelamente.

Si tenemos el archivo de datos “apellidos.csv” lo guardamos en dicha carpeta, donde inmediatamente aparecerá en el panel de “files” (archivos). Así estará disponible para cuando configuremos el script y la ruta de aplicación para su lectura.

d. A escribir se ha dicho Es inevitable, esta es la hora de escribir código. Para evitar que aumente significativamente la tasa de suicidios, comentaremos el mismo en rojo, estas explicaciones tienen por objeto familiarizarse con el código y su escritura.

#================================================== # Dendograma con apellidos, una prueba #================================================== # File-Name: apellidos.R # Date: 04/10/2012 # Author: Edwin Aguiar -INTA TICs Corrientes Desarrollo y Bases de Datos # Email: [email protected] # Data: datos de la web (INDEC) #================================================== # NO configuramos porque el proyecto ya lo hizo y # no permitirá la instrucción, dando error: setwd("apellidos") # obtenemos la matriz 100*3 apellidos apellidos <- read.csv("apellidos.csv", header=F) # si desea ver la tabla apellidos, descomente: #View(apellidos) # creamos el array de apellidos y de valores nombres<-as.array(apellidos$V1) cifras<-as.array(apellidos$V2) #================================================== # DISTANCIAS, CLUSTERING y PLOTEOS: HCLUST=COMPLETE #==================================================

Nota 14

¡Sea el alma de las fiestas!

-Yo uso R con Rstudio, y trabajo en el INTA- -¡Cásate conmigo!- …..

En poco tiempo es posible hacer trabajos interesantes y presumir ante sus amistades enseñándoles estas incomprensibles cosas; pero tenga en cuenta que para que todo funcione según sus expectativas dependerá de sus conocimientos de la materia (estadística o minería de datos) y no de la magia negra o el poder de las pirámides!

Page 65: Introducción a R utilizando Rstudio server

65 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

# Distancias y metodos: ver nota mas abajo distancias1<-dist(apellidos,method="manhattan") # agrupamiento: cluster, crea el mapa de las distancias cluster<-hclust(distancias1) #imprime el resultado en una grafica plot(cluster,main="Metodo Manhatan",labels=nombres) el grafico resultante:

Una depuración del código para graficar:

Page 66: Introducción a R utilizando Rstudio server

66 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Código agregado:

hc<-hclust(dist(apellidos,"manhattan")) plot(hc, hang=-1) , labels=nombres) plot(hc, hang=-2) , labels=nombres) rect.hclust(hc,3, border="green") rect.hclust(hc,5, border="red") rect.hclust(hc,10, border="blue")

Como se advierte en la segunda parte del código (la modificación) la inclusión de unas líneas mas crean cajas de colores para agrupamientos de 3,5 y 10 grupos. La aplicación de distancias y clústeres se ha hecho en una sola línea, comprimiendo el código anterior. Esto demuestra la potencia de R que permite concatenar funciones de manera muy eficiente y sencilla.

e. Distancias: Es la cuantificación del grado de proximidad entre dos o más puntos en un espacio de dimensión {d} que tradicionalmente en matemáticas se ha asociado al concepto de “métrica” o “distancias”.

Una métrica es una función que a cada par de puntos x,y ϵ Rd (x e y pertenecen al conjunto de números reales) les asocia un valor positivo de modo que cuando mayor es, mas distantes son.

La función “δ” definida en el espacio producto Rd x Rd debe verificar algunos axiomas para decir que es una métrica:

• No negativa d(x,y)≥0 • Un punto dista 0 de si mismo d(x,y)=0 • Simetría d(x,y) = d(y,x) • Desigualdad triangular d(x,z) ≤ d(x,y) + d(y,z)

El agrupamiento es una cualificación de ese grado de proximidad, es juntar con un criterio determinado (existen varios tipos de clústeres) que abarcan distintos tipos de conceptos (single, completo, Ward etc)

f. Conclusiones del dendograma Mas allá de la veracidad de las conclusiones (que los Gonzales y los Rodríguez forman un poderoso agrupamiento de primer nivel con un peso preponderante; por lo que no aconsejamos disputar con miembros de tales familias) podemos apreciar la simpleza de trabajo en R y como con unas pocas funciones es posible realizar un trabajo mas complejo y serio; que posteriormente la investigación comprobara hipótesis y establecerá como valedera.

g. Guardando gráficos Ahora que hemos realizado el script, sin fallos, que la salida grafica ha sido creada, debemos guardar el grafico. En el panel de “Plots” (graficas) podemos seleccionar la opción “export” y guardarla en una variedad de formatos

Page 67: Introducción a R utilizando Rstudio server

67 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

gráficos usuales. También en dicha ventana podemos seleccionar que dimensión tendrá (recordar marcar que conserve la proporción la imagen) y elegir el directorio en el cual guardara la imagen. Esta le servirá para incluir en sus trabajos de investigación, junto con las tablas que genere (que deberá también guardar o copiar y pegar en un documento que este redactando). En la próxima imagen podemos apreciar el proceso completo de guardar gráficos:

Los formatos: PNG, JPEG, TIFF, BMP, METAFILE, SVG y PS además de PDF son fácilmente insertables en documentos de plataformas Linux, Windows y Apple.

h. Finalizando el proyecto Cuando termine el proyecto en Rstudio no olvide guardar el script (icono de disquete en la parte superior izquierda de la ventana de script) y salvar el workspace. De todas maneras al salir le preguntara Rstudio si desea salvar el espacio de trabajo. Una buena práctica es cada tanto, e independientemente del estado de su proyecto, guárdelo.

Otra buena práctica es disponer de un repositorio en la red en donde “colgar” sus proyectos, o al menos sus scripts. Si posee cuenta en Gmail hay una aplicación llamada “Drive” que permite crear carpetas y compartirlas en distinto grado (solo

lectura, edición) con otros, e incluso a usted mismo si no esta en su pc o no puede acceder al Rstudio-Server por no estar públicamente disponible fuera de su red. Si su institución posee un server de Sharepoint también podrá resolver el almacenamiento de sus scripts e imágenes para tenerlas accesibles desde cualquier lado, y eventualmente dar permisos para acceso o edición a terceros.

Page 68: Introducción a R utilizando Rstudio server

68 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Librerías en Rstudio Cuando corrimos el ejemplo anterior habrá notado que se requiere la librería RODBC. En R y Rstudio por defecto hay una serie de librería que ya vienen precargadas, pero no son la totalidad de las mismas, pues cada tanto se actualiza las existentes y se agregan nuevas que extienden el

alcance de R en otras áreas. En este breve aparte vamos a comentar como seleccionar un repositorio y como cargar las librerías que usted requiera para su trabajo.

1. Las librerías precargadas Estas librerías básicas que ya vienen implícitas en la instalación de R mas la del RStudio (recuerde que para correr Rstudio debe primero instalar R en su sistema) son las siguientes: Base, Boot, Class, Cluster, Codetools, Compiler,Datasets, Foreign, Graphics, GrDevice, Grid, KernSmooth, Lattice, Mass, Matrix, Methods, Mgcv, Nlme, Nnet, Parallel, Rpart, Spatial, Splines, Stats, Survival, Tcltk, Tools, Utils Dichas librerías consisten en el Corazón del sistema, herramientas estadísticas y matemáticas, tratamiento de gráficos, de matrices etc. Podrá ver la descripción detallada de cada una en el “help” de Rstudio o en la ventana de “packages”; seleccione el link de una librería de su interés y podrá leer la documentación sobre la misma Sin embargo cuando estamos trabajando a menudo requerimos de librerías que tenemos en el sistema pero que no están cargadas en el script.

Para hacerlo solo basta con señalarlas en el casillero de la lista de packages. En la primera imagen hemos marcado dos librerías para que se carguen en el script de nuestro trabajo:

Page 69: Introducción a R utilizando Rstudio server

69 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

• Datasets • Graphics

Al marcarlas, se incorporan al script copiándolas de la consola de comandos (donde queda registrada la preferencia) y pegándola en la línea 10, debajo del encabezado del script, en la primera línea activa. Quedaría así: #==================================== # Dendograma con apellidos, una # prueba de concepto #==================================== # File-Name: apellidos.R # Date: 04/10/2012 # Author: Edwin Aguiar -INTA # TICs Corrientes Desarrollo y Bases # de Datos #====================================

library("datasets"); # lineas copiadas de la consola library("graphics"); # y pegadas en el script #configuramos donde setwd("D:/mapas/apellidos/"); # obtenemos la matriz 100*3 apellidos apellidos <- read.csv("D:/mapas/apellidos/apellidos.csv", header=F); #View(apellidos) # array de nombres de apellidos nombres<-as.array(apellidos$V1); cifras<-as.array(apellidos$V2);

Por supuesto puede (si ya maneja el código de R) escribirlo directamente en el script, e incluso no hacerlo ya que al señalar la librería en “packages” quedara guardada la preferencia en el “workspace” por defecto. Pero si usted envía el script a u tercero o lo

corre en otra maquina que no contenga su espacio de trabajo, saltara el error de faltante de la librería en un mensaje en el que le avisa que no reconoce alguna función.

Si desea eliminar una librería que no necesite, solo desmárquela de “packages” (y escriba en el script de R: detach("package:datasets") , por ejemplo)

2. Librería que no están cargadas ni instaladas Es altamente probable que intente hacer algo que requiera librerias adicionales, por ejemplo leer archivos de Excel 2007-2010; y nada en lo que tenga instalado puede hacerlo porque necesita una librería faltante: “xlsx”. Por mas que mire y remire el panel de “packages” no hay nada remotamente parecido a esto, no queda más salida que descargar e instalar el paquete desde un repositorio36

36 Un servidor de internet que posee estos paquetes para su descarga

Page 70: Introducción a R utilizando Rstudio server

70 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

• Hay dos formas de realizar esto: la usual es desde la consola y la segunda es mediante la interfaz grafica (más sencilla).

El código y salida de consola para esta descarga e instalación:

> install.packages("xlsx") # orden para la descarga e instalacion Installing package(s) into ‘D:/Usuario/Documents/R/win-library/2.14’ (as ‘lib’ is unspecified) also installing the dependencies ‘xlsxjars’, ‘rJava’ probando la URL 'http://mirror.fcaglp.unlp.edu.ar/CRAN/bin/windows/contrib/2.14/xlsxjars_0.4.0.zip' Content type 'application/zip' length 9041528 bytes (8.6 Mb) URL abierta downloaded 8.6 Mb probando la URL 'http://mirror.fcaglp.unlp.edu.ar/CRAN/bin/windows/contrib/2.14/rJava_0.9-3.zip' Content type 'application/zip' length 745867 bytes (728 Kb) URL abierta downloaded 728 Kb probando la URL 'http://mirror.fcaglp.unlp.edu.ar/CRAN/bin/windows/contrib/2.14/xlsx_0.5.0.zip' Content type 'application/zip' length 381977 bytes (373 Kb) URL abierta downloaded 373 Kb package ‘xlsxjars’ successfully unpacked and MD5 sums checked package ‘rJava’ successfully unpacked and MD5 sums checked package ‘xlsx’ successfully unpacked and MD5 sums checked The downloaded packages are in C:\Users\Usuario\AppData\Local\Temp\RtmpoP2Dhw\downloaded_packages

Lo que esta en azul es la salida del programa que ubica el paquete xlsx, las dependencias (otras librerías que se requieren para complementar el funcionamiento) y las descarga desde un mirror (un servidor que replica los paquetes desde el server principal de R). Una vez que ha descargado las librerías requeridas, las descomprime e instala.

La descarga e instalación mediante la interfaz grafica es más simple aun. En el panel de “packages” solo hay

que seleccionar la pestana “install” elegir “repositorio”, comenzar a escribir el nombre (a medida que lo haga irán apareciendo las sugerencias de librerías) y pulsa “install”. El resto es similar a la instalación de consola, que enseñara como van sucediendo los pasos y el resultado final.

3. ¿Y si no tengo internet? Busque en el repositorio de R en internet, allí seleccione la librería para descargar (en Windows o en Linux) y posteriormente llévela a su Rstudio en su maquina fuera de red e instálelo desde la

Page 71: Introducción a R utilizando Rstudio server

71 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

primer opción de la ventana “Install packages” de la imagen superior, instalar desde archivos ZIP. Le pedirá la ruta de acceso al archivo.

4. Repositorios de R Los repositorios son los servidores que replican los paquetes y programas de R en todo el mundo, para seleccionar uno de su preferencia solo debe ir a “Tools” seleccionar “Options” y de la pestaña principal hallara una caja de texto “CRAN mirror” para seleccionar de la lista de servidores.

La lista completa al dia de la fecha de redacción de este manual es la siguiente:

0-Cloud http://cran.rstudio.com/ Rstudio, automatic redirection to servers worldwide Argentina http://mirror.fcaglp.unlp.edu.ar/CRAN/ Universidad Nacional de La Plata http://r.mirror.mendoza-conicet.gob.ar/ CONICET Mendoza Australia http://cran.csiro.au/ CSIRO http://cran.ms.unimelb.edu.au/ University of Melbourne Austria http://cran.at.r-project.org/ Wirtschaftsuniversitaet Wien Belgium http://www.freestatistics.org/cran/ K.U.Leuven Association Brazil http://cran-r.c3sl.ufpr.br/ Universidade Federal do Parana http://cran.fiocruz.br/ Oswaldo Cruz Foundation, Rio de Janeiro http://www.vps.fmvz.usp.br/CRAN/ University of Sao Paulo, Sao Paulo http://brieger.esalq.usp.br/CRAN/ University of Sao Paulo, Piracicaba Canada http://cran.stat.sfu.ca/ Simon Fraser University, Burnaby http://mirror.its.dal.ca/cran/ Dalhousie University, Halifax http://probability.ca/cran/ University of Toronto http://cran.skazkaforyou.com/ iWeb, Montreal http://cran.parentingamerica.com/ iWeb, Montreal Chile http://dirichlet.mat.puc.cl/ Pontificia Universidad Catolica de Chile, Santiago China http://ftp.ctex.org/mirrors/CRAN/ CTEX.ORG http://cran.csdb.cn/ Computer Network Information Center, CAS, Beijing http://mirror.bjtu.edu.cn/cran Beijing Jiaotong University, Beijing http://cran.dataguru.cn Dataguru (a, Guangzhou) http://mirrors.ustc.edu.cn/CRAN/ University of Science and Technology of China http://mirrors.xmu.edu.cn/CRAN/ Xiamen University Colombia http://www.laqee.unal.edu.co/CRAN/ National University of Colombia

Nota 10

Donde descargar librerías de R

Las posee a disposición en http://cran.r-project.org/ en la pestaña “packages”, allí encontrara la lista ordenada por nombres

http://cran.r-project.org/web/packages/available_packages_by_name.html

o por fecha de actualización.

http://cran.r-project.org/web/packages/available_packages_by_date.html

Page 72: Introducción a R utilizando Rstudio server

72 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

http://www.icesi.edu.co/CRAN/ Icesi University Denmark http://mirrors.dotsrc.org/cran/ dotsrc.org, Aalborg Ecuador http://cran.espol.edu.ec/ Escuela Superior Politecnica del Litoral France http://cran.univ-lyon1.fr/ Dept. of Biometry & Evol. Biology, University of Lyon http://mirror.ibcp.fr/pub/CRAN/ CNRS IBCP, Lyon http://ftp.igh.cnrs.fr/pub/CRAN/ Institut de Genetique Humaine, Montpellier Germany http://mirrors.softliste.de/cran/ Softliste.de, Berlin http://mirror.layerjet.com/cran layerjet.com http://ftp5.gwdg.de/pub/misc/cran/ GWDG Goettingen Greece http://cran.cc.uoc.gr/ University of Crete Hungary http://cran.rapporter.net/ Rapporter.net, Budapest India http://ftp.iitm.ac.in/cran/ Indian Institute of Technology Madras Indonesia http://cran.repo.bppt.go.id/ Agency for The Application and Assessment of Technology Iran http://cran.um.ac.ir/ Ferdowsi University of Mashhad Ireland http://ftp.heanet.ie/mirrors/cran.r-project.org/ HEAnet, Dublin Italy http://cran.mirror.garr.it/mirrors/CRAN/ Garr Mirror, Milano http://cran.stat.unipd.it/ University of Padua http://dssm.unipa.it/CRAN/ Universita degli Studi di Palermo Japan http://essrc.hyogo-u.ac.jp/cran/ Hyogo University of Teacher Education http://cran.md.tsukuba.ac.jp/ University of Tsukuba http://cran.ism.ac.jp/ Institute of Statistical Mathematics, Tokyo Korea http://cran.nexr.com/ NexR Cortporation, Seoul Latvia http://mirrors.webhostinggeeks.com/cran/ Webhostinggeeks Mexico http://cran.itam.mx/ Instituto Tecnologico Autonomo de Mexico http://www.est.colpos.mx/R-mirror/ Colegio de Postgraduados, Texcoco Netherlands http://cran.xl-mirror.nl/ XL-Data, Amsterdam http://cran-mirror.cs.uu.nl/ Utrecht University New Zealand http://cran.stat.auckland.ac.nz/ University of Auckland Norway http://cran.uib.no/ University of Bergen Philippines http://cran.stat.upd.edu.ph/ University of the Philippines and PREGINET Poland http://r.meteo.uni.wroc.pl/ University of Wroclaw Russia http://cran.gis-lab.info/ GIS-Lab.info Singapore http://cran.stat.nus.edu.sg/ National University of Singapore Slovakia http://cran.fyxm.net/ FYXM.net, Bratislava

Page 73: Introducción a R utilizando Rstudio server

73 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

South Africa http://cran.mirror.ac.za TENET, Johannesburg Spain http://cran.es.r-project.org/ Spanish National Research Network, Madrid Sweden http://ftp.sunet.se/pub/lang/CRAN/ Swedish University Computer Network, Uppsala Switzerland http://stat.ethz.ch/CRAN/ ETH Zuerich Taiwan http://cran.cs.pu.edu.tw/ Providence University, Taichung http://cran.csie.ntu.edu.tw/ National Taiwan University, Taipei Thailand http://mirrors.psu.ac.th/pub/cran/ Prince of Songkla University, Hatyai UK http://www.stats.bris.ac.uk/R/ University of Bristol http://cran.ma.imperial.ac.uk/ Imperial College London http://star-www.st-andrews.ac.uk/cran/ St Andrews University USA http://cran.cnr.Berkeley.edu University of California, Berkeley, CA http://cran.stat.ucla.edu/ University of California, Los Angeles, CA http://streaming.stat.iastate.edu/CRAN/ Iowa State University, Ames, IA http://ftp.ussg.iu.edu/CRAN/ Indiana University http://rweb.quant.ku.edu/cran/ University of Kansas, Lawrence, KS http://watson.nci.nih.gov/cran_mirror/ National Cancer Institute, Bethesda, MD http://cran.mtu.edu/ Michigan Technological University, Houghton, MI http://cran.wustl.edu/ Washington University, St. Louis, MO http://cran.case.edu/ Case Western Reserve University, Cleveland, OH http://ftp.osuosl.org/pub/cran/ Oregon State University http://lib.stat.cmu.edu/R/CRAN/ Statlib, Carnegie Mellon University, Pittsburgh, PA http://cran.mirrors.hoobly.com Hoobly Classifieds, Pittsburgh, PA http://mirrors.nics.utk.edu/cran/ National Institute for Computational Sciences, Oak Ridge, TN http://cran.revolutionanalytics.com Revolution Analytics, Dallas, TX http://cran.fhcrc.org/ Fred Hutchinson Cancer Research Center, Seattle, WA http://cran.cs.wwu.edu/ Western Washington University, Bellingham, WA Venezuela http://camoruco.ing.uc.edu.ve/cran/ Universidad de Carabobo Venezuela Vietnam http://cran.vinastat.com/ VinaStat.com

Graficas con R y Rstudio Las funciones graficas en R existen a varios niveles, de los mas simples a los mas complejos. La variedad –nacida de la necesidad de presentar los datos- hacen que existan varios tipos de graficación adecuados para cada caso. La importancia de la presentación visual de los datos mediante una representación visual es definida como:

“En comparación con otras formas de presentación de los datos, los gráficos nos permiten, de una mirada, comprender el comportamiento de los datos, aun de datos muy complejos, por lo tanto ahorran tiempo al analista de información. Los gráficos estadísticos nos permiten usar nuestra habilidad para visualmente procesar información de un grafico. Esto

Page 74: Introducción a R utilizando Rstudio server

74 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

nos permite hacer juicios respecto a la variabilidad, escala, patrones y tendencias de los datos.”37

Los gráficos que podemos trazar se pueden dividir a priori en la representación de la cantidad de dimensiones que representan. Suponiendo hasta tres, tendríamos una lista que abarcan las distintas funciones, a su vez divididas en funciones de graficación de bajo nivel y de alto nivel; esto son las graficaciones sobre una nueva imagen o sobre una existente. No es un calificador de calidades como podría suponerse ligeramente.

La forma de trabajo de las funciones graficas es sustancialmente diferente al de las funciones, que trabajan en base a lo que se llaman objetos (tablas, matrices, vectores, dataframes etc).El resultado de una función grafica no puede ser asignado a un objeto sino que es enviado a un dispositivo grafico. Un dispositivo grafico es una ventana grafica o un archivo, y de allí la salida visual que obtenemos.

a. Índice de algunas funciones graficadoras Listado de algunas funciones graficadoras y parámetros usuales de configuracion Gráficos Unidimensionales

• barplot(Estaturas) • barplot(Estaturas, amplitud, nombres, space=.2, inside=TRUE, beside= FALSE, horiz=FALSE,

legend, angle, density, col, blocks=TRUE) • boxplot(..., rango, amplitud, varwidth=FALSE, notch=FALSE, names, plot=TRUE) • hist(x, nclass, breaks, plot=TRUE, angle, density, col, inside)

Gráficos Bidimensionales • lines(x, y, type=”l”) • pie (antes piechart) • points(x, y, type=”p”)) • plot(x, y, type=”p”, lty=1:5, pch=, col=1:4) • points(x, y, type=”p”, lty=1:5, pch=, col=1:4) • lines(x, y, type=”l”, lty=1:5, pch=, col=1:4) • plot(x, y, type=”p”, log=) • abline(coef) • abline(a, b) • abline(reg) • abline(h=) • abline(v=) • qqplot(x, y, plot=TRUE) • qqnorm(x, datax=FALSE, plot=TRUE)

37 “Gráficos estadísticos con R” Juan Carlos Correa y Nelfi González, Posgrado en Estadística Universidad Nacional-Sede Medellín ([email protected]), 2002

Page 75: Introducción a R utilizando Rstudio server

75 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Gráficos Tridimensionales • contour(x, y, z, v, nint=5, add=FALSE, labels) • interp(x, y, z, xo, yo, ncp=0, extrap=FALSE) • persp(z, eye=c(-6,-8,5), ar=1)

Realicemos algún ejemplo para probar los conceptos. Barplot es un grafico de barras > datos<-c(rnorm(10,30,10)) # generamos números aleatorios > datos # examinamos los números

# creados [1] 48.78488 25.55557 39.02275 26.56289 45.80036 27.04644 35.77342 24.97891 11.06760 24.73588 > barplot(datos) # imprimimos las barras

Otro barplot

> amplitud<-c(1,1,1,1,1,1,1,1,1,1,1) > nombres<-c("uno","dos","tres","cuatro","cinco","seis", "siete","ocho","nueve","diez","once") > estaturas<-c(round(rnorm(10,1,2)),digits=2) > barplot(estaturas, amplitud, nombres, space=.2)

Estas funciones suelen tener muchos parámetros interesantes, es adecuado leer cuidadosamente las ayudas del Rstudio, por ejemplo agregando el parámetro de color en forma de un vector:

col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"),

Pie: gráficos de torta.

> pie(datos) > pie(datos, labels= round(datos,2),main="Datos sobre Patos")

Page 76: Introducción a R utilizando Rstudio server

76 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Un ultimo ejemplo de barplot:

barplot(height = cbind(x = c(465, 91) / 465 * 100, y = c(840, 200) / 840 * 100, z = c(37, 17) / 37 * 100), beside = FALSE, width = c(465, 840, 37), col = c(1, 2), legend.text = c("A", "B"), args.legend = list(x = "topleft"))

Boxplot: dos ejemplos

> estaturas digits -2 0 5 -1 -2 -2 2 -3 4 2 2 > otracosa<-1/estaturas+3 > otracosa digits 2.50 -Inf 3.20 2.00 2.50 2.50 3.50 2.66 3.25 3.50 3.50 > boxplot(estaturas,3,otracosa)

boxplot(len ~ dose, data = ToothGrowth, boxwex = 0.25, at = 1:3 - 0.2,

subset = supp == "VC", col = "yellow",

main = "Guinea Pigs' Tooth Growth", xlab = "Vitamin C dose mg", ylab = "tooth length", xlim = c(0.5, 3.5), ylim = c(0, 35), yaxs = "i")

Histogramas, dos ejemplos:

> estaturas digits -2 0 5 -1 -2 -2 2 -3 4 2 2 > hist(estaturas, col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"))

hist(estaturas, freq = FALSE, ylim = c(0, 0.2),col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk")) > curve(dchisq(x, df = 4), col = 2, lty = 2, lwd = 2, add = TRUE)

Page 77: Introducción a R utilizando Rstudio server

77 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Lines: utilizando líneas en conjunto con plots

“lines” dibuja líneas sobre una serie de puntos graficados (“plot”), el ejemplo del uso es el siguiente:

> indice<-c(1:11) # crea el vector x de 1 a 11 > plot(estaturas, main="Estaturas") # situa los puntos “plot” en la grafica > lines(indice, estaturas) # traza la línea que une a los puntos

plot(estaturas, main="Estaturas", type="o", col=2, pch=16)

En la línea superior le damos al tipo de línea el parámetro “o” (overploted), color rojo y puntos “peach” el valor 16. El resultado es el de abajo, sin usar la segunda instrucción de “lines”

códigos numéricos de “pch”

Page 78: Introducción a R utilizando Rstudio server

78 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Points (puntos) trabaja sobre el eje de coordenadas que provee plot:

> plot(-4:4, -4:4, type = "n") # crea eje de coordenadas -4 a +4 > points(rnorm(200), rnorm(200), col = "red", pch=19) # puntos rojos redondos > points(rnorm(100)/2, rnorm(100)/2, col = "blue", cex = 1.5, pch=3) # puntos azules cruces

El tipo “n” en plot significa que no escribirá ningún grafico, solo crea el eje de coordenadas. La función rnorm crea una secuencia aleatoria de una distribución normal, para generar los puntos y sus dos coordenadas (x,y)

Ablines: agregando líneas a los gráficos

> sale5 <- c(6, 4, 9, 7, 6, 12, 8, 10, 9, 13) > plot(sale5, pch="x") > abline(lsfit(1:10,sale5)) > abline(lsfit(1:10,sale5, intercept = FALSE), col= 4)

En la imagen del grafico tenemos una primera instancia que es la creación de los puntos (plot) y una segunda en la que se crean dos rectas que trazan otras funciones.

Lsfit() es la estimación de mínimos cuadrados38 de los datos del vector sales5 En la segunda lsfit() se ha configurado

un termino de intercepción como FALSO, mientras que en la primera es VERDADERA por defecto. Los datos y el código son el ejemplo de la ayuda de R.

38 Mínimos cuadrados es una técnica de análisis numérico encuadrada dentro de la optimización matemática, en la que, dados un conjunto de pares ordenados: (variable independiente, variable dependiente) y una familia de funciones, se intenta encontrar la función, dentro de dicha familia, que mejor se aproxime a los datos (un "mejor ajuste"), de acuerdo con el criterio de mínimo error cuadrático.

Page 79: Introducción a R utilizando Rstudio server

79 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

qqplot y qnorm son dos funciones que plotean la primera los cuartiles de una distribución T de Studen y la segunda los cuartiles de una distribución normal.

b. Las distribuciones en 3D Dada la complejidad de la materia, a la que apenas hemos arañado en la superficie aun en los ejemplos mas sencillos, se puede profundizar en “R graphics" de Paul Murrell , que se encuentra en http://www.stat.auckland.ac.nz/~paul/RGraphics/rgraphics.html para su descarga gratuita y que hemos utilizado en parte aquí para demostraciones conceptuales.

c. aspectos generales sobre gráficos La mayoría de las funciones de graficación poseen en común estos parámetros, que se pueden probar con plot, pie, barplot etc. log=’<xjyjxy>’ Ejes Logarítmicos main=’título’ titulo del grafico new=<logical> Adiciona sobre el grafico actual sub=’título de abajo’ titulo inferior type=’<ljpjbjn>’ Línea, puntos, ambos, ninguno lty=n Tipo de Línea pch=’.’ Carácter de dibujo xlab=’Nombre del eje x’ etiqueta del eje X ylab=’Nombre del eje y’ etiqueta del eje Y xlim=c(xminimo; xmaximo) valores de escala x ylim=c(yminimo; ymaximo) valores de escala y col=n color, en escala de números o en ingles lwd=n ancho de línea de trazo en números

d. Ejemplo de uso con plot() plot(variable, type="b", ylim=c(13,29),xlab="casos", ylab="ocurrencias", main="Casos vs Ocurrencias", col="blue", lty=2, lwd=1)

Page 80: Introducción a R utilizando Rstudio server

80 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

e. Uso de barplot()

barplot(variable, ylim=c(10,29),xlab="casos", ylab="ocurrencias", main="Casos vs Ocurrencias", border=2, col="gray", density=8)

f. Realizar varias graficas en una sola Es posible crear varias graficas en una sola dividiendo en una matriz, que en ejemplo hemos llamado mat4, en donde los parámetros son los siguientes:

• Numero de pantallas • Cargamos dichas pantallas al dispositivo de salida (la salida grafica

del pc) con layout() • Exhibimos con la función layout.show()

Si deseáramos crear una matriz de tres o cinco paneles en la pantalla podríamos hacer:

Mat3<-matrix(c(1:3,3),2,2) layout(mat3) layout.show(3) mat5<-matrix(c(1:5,5),3,2) layout(mat5) layout.show(5

Dependiendo de sus necesidades para exponer los datos visualmente. El número adicional a la secuencia de la matriz es el elemento extra (impar) y los dos parámetros siguientes son columna y fila respectivamente. También es posible que pueda modificar el ancho y largo de las columnas o filas utilizando widths y heigths como parámetros de layout(), lo cual aconsejamos lea en la ayuda de R.

Mat4<-matrix(1:4,2,2); Mat4; [,1] [,2] [1,] 1 3 [2,] 2 4 layout(mat4); layout.show(4);

Page 81: Introducción a R utilizando Rstudio server

81 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

g. Parámetros adicionales a los gráficos Ademas de lo que hemos visto es posible agregar mas parámetros adicionales a los graficos, como por ejemplo darle color de fondo (background= bg):

par(bg="yellow") plot(mat5)

La lista de varios de esos parámetros adicionales es la siguiente39:

h. Ejemplo de graficación bidimensional40 En este ejemplo utilizaremos los datos que contiene una librería de R, “datasets” de uso muy extendido a la hora de hacer pruebas o de ejemplificar. No solo existe iris, hay una larga lista de datos disponibles sobre varias disciplinas, escribiendo data() en la consola tendrá la lista completa:

Data sets in package ‘datasets’: AirPassengers Monthly Airline Passenger Numbers 1949-1960 BJsales Sales Data with Leading Indicator BJsales.lead (BJsales) Sales Data with Leading Indicator BOD Biochemical Oxygen Demand

39 “R para principiantes”pag. 36 E. Paradis, traducción de J.A.Ahumeda, op. Cit. 40 Ejercicio adaptado de “Practicas de estadística en R” Manuel Febrero Bande, Pedro Galeano San Miguel, Julio González Díaz y Beatriz Pateiro López. Universidad de Santiago de Compostela, 2008. Pag. 69 y sgtes

Page 82: Introducción a R utilizando Rstudio server

82 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

CO2 Carbon Dioxide Uptake in Grass Plants ChickWeight Weight versus age of chicks on different diets DNase Elisa assay of DNase EuStockMarkets Daily Closing Prices of Major European Stock Indices, 1991-1998 Formaldehyde Determination of Formaldehyde HairEyeColor Hair and Eye Color of Statistics Students Harman23.cor Harman Example 2.3 Harman74.cor Harman Example 7.4 Indometh Pharmacokinetics of Indomethacin InsectSprays Effectiveness of Insect Sprays JohnsonJohnson Quarterly Earnings per Johnson & Johnson Share LakeHuron Level of Lake Huron 1875-1972 LifeCycleSavings Intercountry Life-Cycle Savings Data Loblolly Growth of Loblolly pine trees Nile Flow of the River Nile Orange Growth of Orange Trees OrchardSprays Potency of Orchard Sprays PlantGrowth Results from an Experiment on Plant Growth Puromycin Reaction Velocity of an Enzymatic Reaction Seatbelts Road Casualties in Great Britain 1969-84 Theoph Pharmacokinetics of Theophylline Titanic Survival of passengers on the Titanic ToothGrowth The Effect of Vitamin C on Tooth Growth in Guinea Pigs UCBAdmissions Student Admissions at UC Berkeley UKDriverDeaths Road Casualties in Great Britain 1969-84 UKgas UK Quarterly Gas Consumption USAccDeaths Accidental Deaths in the US 1973-1978 USArrests Violent Crime Rates by US State USJudgeRatings Lawyers' Ratings of State Judges in the US Superior Court USPersonalExpenditure Personal Expenditure Data VADeaths Death Rates in Virginia (1940) WWWusage Internet Usage per Minute WorldPhones The World's Telephones ability.cov Ability and Intelligence Tests airmiles Passenger Miles on Commercial US Airlines, 1937-1960 airquality New York Air Quality Measurements anscombe Anscombe's Quartet of 'Identical' Simple Linear Regressions attenu The Joyner-Boore Attenuation Data attitude The Chatterjee-Price Attitude Data austres Quarterly Time Series of the Number of Australian Residents beaver1 (beavers) Body Temperature Series of Two Beavers beaver2 (beavers) Body Temperature Series of Two Beavers cars Speed and Stopping Distances of Cars chickwts Chicken Weights by Feed Type co2 Mauna Loa Atmospheric CO2 Concentration crimtab Student's 3000 Criminals Data discoveries Yearly Numbers of Important Discoveries esoph Smoking, Alcohol and (O)esophageal Cancer euro Conversion Rates of Euro Currencies euro.cross (euro) Conversion Rates of Euro Currencies eurodist Distances Between European Cities faithful Old Faithful Geyser Data fdeaths (UKLungDeaths) Monthly Deaths from Lung Diseases in the UK freeny Freeny's Revenue Data freeny.x (freeny) Freeny's Revenue Data freeny.y (freeny) Freeny's Revenue Data infert Infertility after Spontaneous and Induced Abortion iris Edgar Anderson's Iris Data iris3 Edgar Anderson's Iris Data islands Areas of the World's Major Landmasses ldeaths (UKLungDeaths) Monthly Deaths from Lung Diseases in the UK lh Luteinizing Hormone in Blood Samples longley Longley's Economic Regression Data lynx Annual Canadian Lynx trappings 1821-1934 mdeaths (UKLungDeaths) Monthly Deaths from Lung Diseases in the UK morley Michelson Speed of Light Data mtcars Motor Trend Car Road Tests nhtemp Average Yearly Temperatures in New Haven

Page 83: Introducción a R utilizando Rstudio server

83 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

nottem Average Monthly Temperatures at Nottingham, 1920-1939 occupationalStatus Occupational Status of Fathers and their Sons precip Annual Precipitation in US Cities presidents Quarterly Approval Ratings of US Presidents pressure Vapor Pressure of Mercury as a Function of Temperature quakes Locations of Earthquakes off Fiji randu Random Numbers from Congruential Generator RANDU rivers Lengths of Major North American Rivers rock Measurements on Petroleum Rock Samples sleep Student's Sleep Data stack.loss (stackloss) Brownlee's Stack Loss Plant Data stack.x (stackloss) Brownlee's Stack Loss Plant Data stackloss Brownlee's Stack Loss Plant Data state.abb (state) US State Facts and Figures state.area (state) US State Facts and Figures state.center (state) US State Facts and Figures state.division (state) US State Facts and Figures state.name (state) US State Facts and Figures state.region (state) US State Facts and Figures state.x77 (state) US State Facts and Figures sunspot.month Monthly Sunspot Data, 1749-1997 sunspot.year Yearly Sunspot Data, 1700-1988 sunspots Monthly Sunspot Numbers, 1749-1983 swiss Swiss Fertility and Socioeconomic Indicators (1888) Data treering Yearly Treering Data, -6000-1979 trees Girth, Height and Volume for Black Cherry Trees uspop Populations Recorded by the US Census volcano Topographic Information on Auckland's Maunga Whau Volcano warpbreaks The Number of Breaks in Yarn during Weaving women Average Heights and Weights for American Women

LLamamos al paquete Iris:

> data(iris); > iris # listamos IRIS Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa 7 4.6 3.4 1.4 0.3 setosa 8 5.0 3.4 1.5 0.2 setosa 9 4.4 2.9 1.4 0.2 setosa

…………………………………………………………………………………………………………..

Iris esta compuesto por 150 registros de 5 campos cada uno, referidos a especies vegetales, en pantalla una muestra de los primeros 9. Con estos datos deseamos realizar un grafico que nos muestre la relación de longitud y anchura de pétalo (“Petal length”, “Petal Width”). Si contamos

los elementos del vector tenemos que “FC”41 es la manera de indexar los datos; longitud de pétalos es iris[ ,3] e iris[ ,4] el ancho de los mismos. Esto desplegara los

41 FC: fila y columna ¿Ya lo ha olvidado?

Page 84: Introducción a R utilizando Rstudio server

84 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

datos de dichos indicadores por columna, es decir 150 datos por cada uno. En la imagen se ven listados los dos vectores que reflejan los valores de dichas columnas. Ahora vamos a crear un grafico en el cual los datos correspondan a los dos ejes: ancho de pétalos al eje Y, longitud del pétalo a X. Sin embargo antes de graficar seria bueno ver que escala de valores tenemos. Con las funciones min() y max() aplicadas a cada vector de la serie de datos, podemos hacernos una idea:

> min(iris[,3]); [1] 1 > max(iris[,3]); [1] 6.9 > min(iris[,4]); [1] 0.1 > max(iris[,4]); [1] 2.5

La escala de X estará dentro de 1 a 7 y la de Y entre 0.1 y 2.5; la función plot() se encargara de graficarlo dentro de estos parámetros, aunque se pueden modificar a gusto si Ud. lo desea. La función plot() la escribimos así:

> plot(iris[,3],iris[,4], main="Longitud y anchura de Petalos de Iris", xlab="Longitud del petalo", ylab="Anchura del petalo");

Observe que longitud del pétalo (iris[,3]), es el eje X; primer argumento de plot. La anchura, el eje Y, es iris[,4]; el segundo argumento de la función. Main, xlab e ylab son las etiquetas del grafico. Como se advierte, hay algunos valores que están destacados en la parte inferior. Una forma de identificarlos es mediante la función identify(), que funciona pasando los parámetros X,Y y devuelve los números ID de los datos marcados.

> identify(iris[,3],iris[,4]) [1] 24 44 45 99 > identify(iris[,3],iris[,4]) [1] 68

La primera línea llama a identify() y activa en el grafico el “locator active” seleccionando un punto con el puntero (una cruz), o varios consecutivam,ente; al salir con “escape” da la salida de ID del punto. El ID es el numero de registro. En el caso de algunos de esos valores:

> iris[24,5] [1] setosa Levels: setosa versicolor virginica > iris[45,5] [1] setosa

Page 85: Introducción a R utilizando Rstudio server

85 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Levels: setosa versicolor virginica

Dados los números de componentes (el ID y el campo 5to: especie) los resultados son los que salen por pantalla. Una rápida visión nos permite definir que el agrupamiento inferior consisten en “setosa” y el punto 68 (el ultimo, que esta sobre la cuz) cuyo id es 68 es una “versicolor”.

i. Ejemplo de graficación multidimensional Una manera de transformar el grafico bidimensional en multidimensional es identificando en el mismo grafico las diferentes especies; por ejemplo adicionándole color distintivo a cada una:

> iris.color<-c("red","green","blue")[iris$Species] > plot(iris[,3],iris[,4],col=iris.color,main="Longitud y anchura de petalo segun especies de Iris",xlab="Longitud de petalo", ylab="Anchura de petalo") > legend(5,1.0,c("Setosa","Versicolor","Virginica"),pch=1,col=c("red","green","blue"))

El resultado:

La primera línea crea un vector de tres colores que es asociado a la columna de especies, en el orden que van surgiendo. La segunda línea plotea acorde a lo ya visto.

La tercera agrega el cuadro de leyenda y la explicación del código de colores, las coordenadas 5, 1.0 son el punto de arranque del cuadro (esquina superior izquierda) y las dos cadenas concatenadas (especies y colores) las referencias ordenadas.

Otra manera es además de dar color, es asignarle un símbolo propio. En el siguiente desarrollo utilizamos las funciones matplot() y matpoints() de manera similar a cuando utilizamos plot y points en la primera parte de graficación.

> iS <- iris$Species == "setosa" > iV <- iris$Species == "versicolor" > iVi<- iris$Species == "virginica" > matplot(c(1,8),c(0,4.5),type= "n",xlab="Longitud",ylab ="Anchura", main = "Petalos y Sepalos de Iris") > matpoints(iris[iS,c(1,3)],iris[iS,c(2,4)],pch =1, col=c(2,4)) > matpoints(iris[iV,c(1,3)],iris[iV,c(2,4)],pch =4, col=c(2,4)) > matpoints(iris[iVi,c(1,3)],iris[iVi,c(2,4)],pch=20, col=c(2,4)) > legend(1,5,c("Sepalos Setosa","Petalos Setosa","Sepalos Versicolor", "Petalos Versicolor","Sepalos Virginica","Petalos Virginica"), pch =c(1,1,4,4,20,20),col=rep(c(2,4), 2))

En las primeras líneas asignamos (==) a iS, iV, iVi valores lógicos según la pertenencia a la especie en cuestión, los tres vectores de datos son:

Page 86: Introducción a R utilizando Rstudio server

86 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [19] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [37] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE [55] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [91] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [127] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [145] FALSE FALSE FALSE FALSE FALSE FALSE > iV [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE [55] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [73] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [127] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [145] FALSE FALSE FALSE FALSE FALSE FALSE > iVi [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [55] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [91] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [109] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [145] TRUE TRUE TRUE TRUE TRUE TRUE

A riesgo de ser penosamente detallistas es importante constatar como funciona esto. En el vector iS el primer valor es TRUE, FALSE en los demás, en iV el valor 55 es TRUE, no en los demás vectores, en iVi el valor 150 es TRUE y FALSE en los demas… Estas tres pequeñas líneas y la utilización de una condición lógica establecen un poderoso filtro de datos. Cada dato, al ser ploteado por la función matpoints() imprime o no según la condición, la separación de Sépalos y Pétalos esta determinada por las variables que concatenan el punto

matpoints(iris[iS,c(1,3)],iris[iS,c(2,4)],pch =1, col=c(2,4)) La primera expresión por sépalos y la segunda por pétalos, si son TRUE, sino no imprimen. El resultado:

Al asignar un símbolo y un color característico por cada clasificación y por la condición T/F van imprimiendo los puntos. No se preocupe si aun no lo comprende, es cosa de practica. Copie el código y pruébelo, es la mejor manera de entender su funcionamiento.

Page 87: Introducción a R utilizando Rstudio server

87 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Finalmente la función pairs() crea un despliegue multidimensional

j. Concluyendo Existen numerosas y muy sofisticadas funciones graficadoras, aquí solo hemos expuesto algunas de las más sencillas. Los paquetes grid y lattice, por ejemplo, poseen graficas muy superiores y más elaboradas. Para explorarlas en la consola use demo() y en el cuadro de demos que aparezca, vea las funciones graficas (varias) existentes. Aqui algunas imágenes de muestra:

Page 88: Introducción a R utilizando Rstudio server

88 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Page 89: Introducción a R utilizando Rstudio server

89 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

Bibliografia La bibliografía sobre R y sus librerías y funciones es amplia, variada y libre. Es muy común encontrar documentación academica universitaria en casi todas las disciplinas, por lo que no seria extraño que en lo que Ud haga, ya estén escritos algunos ensayos, guias o manuales. De todos hay algo para aprender y tomar. Nosotros somos deudores de muchos otros que han dejado sus experiencias en la web y nuestra aspiración es que este pequeño trabajo sea de utilidad para que ud se inicie en este mundo que posee las características de ser libre, gratuito, abierto y colaborativo además de profundamente creativo. A continuación algunos textos de interés (que hemos citado o utilizado) de los muchos que encontrara en la web:

1. “Analisis de series temporales” Juan Antonio Breña Moral, s/d, 88 paginas 2. “Curso basico de R” Francesc Carmona ([email protected]), 2007, 98 pags. 3. “Preprocesamiento de Datos” Dr. Edgar Acuna, Departmento de Matematicas Universidad de Puerto Rico-

Mayaguez website: academic.uprm.edu/eacuna, 50 pags. 4. “Introduccion a R, Ejercicios y ejemplos” Alex Sanchez y Francesc Carmona, Departament d’Estadıstica. U.B.

2008, 4 pags. 5. “Funciones estadísticas en R y S-plus” Estadística Aplicada con S-PLUS, M. Dolores Ugarte y Ana F. Militino

Universidad Pública de Navarra, 4 pags. 6. “Graficos Estadısticos con R” Juan Carlos Correa y Nelfi Gonzalez, Posgrado en Estadıstica, Universidad

Nacional-Sede Medellın ([email protected]), 2002, 299 pags. 7. “Notas sobre R” (graficos en R) Francesc Carmona, Jordi Ocaña i Alex Sanchez, Department d'Estadistica,

Universitat de Barcelona, 2008, 35 pags. 8. “Curso introducción a R”, (5 cursos), David V. Conesa Guillén, Grup d'Estadística Espacial i Temporal en

Epidemiologia i Medi Ambient, Dept. d'Estadística i Investigació Operativa, Universitat de València. 42 pags. 9. “Introducción al Entorno r” Paula Elosua, 2011, 102 pags. 10. “Lectura, manipulacion y analisis de datos en R” F. Tusell, http://www.et.bs.ehu.es/~etptupaf, 2005, 23pags. 11. “Como mantener tus datos de investigación ordenadas”, Duncan Golicher, 2008, 16 pags. 12. “Estadıstica Basica con R y R–Commander” (Version Febrero 2008), A. J. Arriaza Gomez, F. Fernandez Palacın,

M. A. Lopez Sanchez, M. Muñoz Marquez, S. Perez Plaza, A. Sanchez Navas; U. de Cadiz,2008, 20 pags 13. “Introducción a Series de Tiempo” John Villavicencio, 33 pags. 14. “Métodos Estadísticos con R y R Commander” Prof. Dr. Antonio José Sáez Castillo, Departamento de

Estadística e Investigación Operativa, Universidad de Jaén, 2010, 157 pags. 15. “NOTAS DE CLASE Series de Tiempo con R” Norman Giraldo Gomez, Profesor Asociado, Escuela de Estadıstica,

Universidad Nacional de Colombia, Medellın, 2006, 176 pags. 16. “Practicas de Estadıstica en R Ingenierıa Tecnica en Informatica de Sistemas” Manuel Febrero Bande, Pedro

Galeano San Miguel, Julio Gonzalez Dıaz, Beatriz Pateiro Lopez; 2008, U. Santiago de Compostela, 114 pags. 17. “R Data Import/Export” R Development Core Team, 2010, 34 pags. 18. “R para Principiantes” Emmanuel Paradis, Institut des Sciences de l’Evolution Universit Montpellier II

([email protected]) traducido por Jorge A. Ahumada, RCUH/ University of Hawaii & USGS/ National Wildlife Health Center ([email protected]), 2003, 61 pags.

19. “Introduccion a R Notas sobre R: Un entorno de programacion para Analisis de Datos y Graficos” Version 1.0.1 (2000), R Development Core Team, 106 pags.

20. “Cartas sobre Estadística de la Revista Argentina de Bioingeniería” Dr. Ing. Marcelo R. Risk, Facultad Regional Buenos Aires, Universidad Tecnológica Nacional, Argentina, 2003, 57 pags.

Page 90: Introducción a R utilizando Rstudio server

90 Introducción a R utilizando Rstudio server Edwin Aguiar ([email protected])

21. “Introducción a R -Sesión 3- Estructuras de Datos y Gráficos” Joaquín Ortega Sánchez, Centro de Investigación en Matemáticas, CIMAT, Guanajuato, Gto., Mexico, ([email protected]) , http://www.cimat.mx, 2009, 111 pags.

22. “Tutorial de R” Javier Ramírez Pérez de Inestrosa, Departamento de Teoría de la Señal, Telemática y Comunicaciones, Universidad de Granada, 2009, 33 pags.