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/. 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 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 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 Golicher 1 …”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. 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. 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. 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. 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: t i pee en l a consol a 2+3 y [ ent er ] , l a sal i da 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. 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. 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? 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 sqr t ( 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( pr op. t abl e( x) ) y cuyo resultado 1 es el 100% de las muestras. 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 ver si on 2. 14. 1 ( 2011- 12- 22) Copyr i ght ( C) 2011 The R Foundat i on f or St at i st i cal Comput i ng I SBN 3- 900051- 07- 0 Pl at f or m: x86_64- pc- mi ngw32/ x64 ( 64- bi t ) R es un sof t war e l i br e y vi ene si n GARANTI A ALGUNA. Ust ed puede r edi st r i bui r l o baj o ci er t as ci r cunst anci as. Escr i ba ' l i cense( ) ' o ' l i cence( ) ' par a det al l es de di st r i buci on. R es un pr oyect o col abor at i vo con muchos cont r i buyent es. Escr i ba ' cont r i but or s( ) ' par a obt ener más i nf or maci ón y ' ci t at i on( ) ' par a saber cómo ci t ar R o paquet es de R en publ i caci ones. Escr i ba ' demo( ) ' par a demost r aci ones, ' hel p( ) ' par a el si st ema on- l i ne de ayuda, o ' hel p. st ar t ( ) ' par a abr i r el si st ema 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 13 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) Escr i ba ' q( ) ' par a sal i r de R. [ Wor kspace l oaded f r om~/ . RDat a] Loadi ng r equi r ed package: sp Mensaj es de avi so per di dos package ‘ sp’ was bui l t under R ver si on 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 > al f a<- r nor m( 10) o > al f a 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 > sor t ( al f a) 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 14 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) o > #- - - - - - ahor a pr obamos l as dos f unci ones j unt as mas una t er cer a, mul t i pl i car - - - - - - - - - - - - - - - - - - - - - - - o > sor t ( bet a<- r nor m( 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 sor t ( bet a<- r nor m( 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 > sor t ( al f a, decr easi ng=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 > sor t ( al f a, decr easi ng=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: > hel p( sor t ) 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 sor t ( sqr t ( r nor m( 10) ) ) 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á > obj 1<- c( 1, 2, 3, 2, 3, 2, 2, 1, 3, 3, 3, 1, 3, 4, 4, 1, 0) > mode( obj 1) [ 1] "numer i c" > l engt h( obj 1) [ 1] 17 > obj 1 [ 1] 1 2 3 2 3 2 2 1 3 3 3 1 3 4 4 1 0 > obj ect s( ) [ 1] "a" "al f a" "b" "bet a" "c" "car t ogr af i a" "dat os_mani es" [ 8] "n" "obj 1" "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. 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 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 griego 5 , 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? 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 índices 6 . 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) ; # cr eamos un vect or de 10 el ement os del 1 al 10 > l engt h( a) ; # obt enemos su l ongi t ud [ 1] 10 > a[ 11] <- 11 # agr egamos un val or 11 en l a posi ci ón 11 > l engt h( a) ; # obt enemos su l ongi t ud nuevament e [ 1] 11 > a # l i st amos t odos l os el ement os del vect or [ 1] 1 2 3 4 5 6 7 8 9 10 11 > a[ 12] <- c( "A") ; # agr egamos a l a posi ci ón 12 un car áct er “A” > a # l i st amos nuevament e # se obser va que el vect or no posee val or es numér i cos si no de car act er es [ 1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "A" > mode( a) ; # compr obamos el t i po de dat os [ 1] "char act er " # car gamos un val or en a[ 11] > a[ 11] <- 11; # f or zamos a dat os numér i cos: > as. numer i c( a) ; [ 1] 1 2 3 4 5 6 7 8 9 10 11 12 # como no nos i dent i f i ca nada l os í ndi ces, cambi amos a uno con nombr es: > names( a) <- c( "per as", "manzanas", "t or ni l l os", "cl avos", "bayas", "bel l os", "vel l os") ; > a; # l i st amos el vect or per as manzanas t or ni l l os cl avos bayas bel l os vel l os <NA> 1 2 3 4 5 6 7 8 <NA> <NA> <NA> <NA> 9 10 11 12 # obser vamos que hay í ndi ces que no poseen denomi naci ón, son NA, debemos cr ear # un vect or de nombr es i gual al vect or de í ndi ces: 12 posi ci ones. > names( a) <- c ( "per as", "manzanas", "t or ni l l os", "cl avos", "bayas", "bel l os", "vel l os", "bol l os", "bal as", "ber r os", "oxí mor on", "cosas") > a per as manzanas t or ni l l os cl avos bayas bel l os vel l os 1 2 3 4 5 6 7 bol l os bal as ber r os 8 9 10 6 “Estructura de Datos” de Osvaldo Cairo y Silvia Guardati. Índice=17 Valor=1993 19 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) oxi mor ones cosas 11 12 # car gamos un nuevo val or en a[ 1] o como se denomi na ahor a a[ “per as”] > a[ per as] <- 33 Er r or en a[ per as] <- 33 : obj et o ' per as' no encont r ado # el er r or es por que el í ndi ce debe est ar con comi l l as al ser un nombr e > a[ "per as"] <- 33 > a per as manzanas t or ni l l os cl avos bayas bel l os vel l os 33 2 3 4 5 6 7 bol l os bal as ber r os oxí mor on 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 Er r or en a * 5 : ar gument o no- numér i co par a oper ador bi nar i o 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. numer i c( a) Mensaj es de avi so per di dos NAs i nt r oduci dos por coer ci ón 8 > 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… 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. omi t ( a) * 5 [ 1] 5 10 15 20 25 30 35 40 45 50 55 at t r ( , "na. act i on") [ 1] 12 at t r ( , "cl ass") [ 1] "omi t " 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 Rstudio 9 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 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 > l og( 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 - I nf > l og( 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 I nf > 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 > mi n( 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 > l engt h( a) # hallamos la cantidad de componentes de “a”. [ 1] 15 > sum( a) / l engt h( 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 > medi an( a) # usamos la función mediana en ”a”. [ 1] 3 > 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. > al f a<- c( 1, 2, 3) > bet a<- c( 1, 2, 3, 4, 5, 6, 7, 8, 9) > al f a * bet a [ 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 > bet a[ 10] <- 10 # agr egamos un val or en l a posi ci ón [ 10] > al f a * bet a [ 1] 1 4 9 4 10 18 7 16 27 10 Mensaj es de avi so per di dos I n al f a * bet a : l ongi t ud de obj et o mayor no es múl t i pl o de l a l ongi t ud 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: # cr eamos val or es al eat or i os de una di st r i buci ón nor mal > vect or 1<- c( r ound( r nor m( 10) , 2) ) > vect or 1 [ 1] - 1. 29 - 0. 47 - 0. 57 - 0. 19 - 0. 50 0. 88 0. 56 0. 03 1. 20 0. 88 # l os val or es de vect or 1 y vect or 2 se han r edondeado con r ound a 2 deci mal es > vect or 2<- c( r ound( r nor m( 10) , 2) ) > vect or 2 [ 1] 0. 40 0. 30 - 0. 58 - 0. 08 0. 04 1. 01 - 1. 06 0. 96 - 0. 15 - 1. 93 # cor r el aci on ent r e vect or es > cor ( vect or 1, vect or 2) [ 1] - 0. 2818315 # var i anza ent r e vect or es > var ( vect or 1, vect or 2) [ 1] - 0. 2030922 # covar i anza ent r e vect or es > cov( vect or 1, vect or 2) [ 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 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 ordinalmente 10 : 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. 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 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 > vect or Log<- c( a, b, c, d, e) > vect or Log [ 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: # cr eamos una l i st a de l ocal i dades de un f i ct i ci o gr upo pol i t i co cor r ent i no en el or den en # que van l l egando a l a r euni ón, cada acr óni mo es una l ocal i dad. >di st r i t os <- c( "ct es" , "ct es" , "ct es" , "sal a" , "r i ach" , "empe" , "sanl " , "sanl " , "ct es" , "sanl " , "r i ach") # I ngr esamos cuant os r epr esent ant es acuden con sus cr edenci al es *a r azón de uno por or den) > congr esal es<- c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) # cr eamos el vect or FACTOR que cont i ene el or den cat egór i co “l ocal i dades” > Congr esoPar t i dar i o <- f act or ( di st r i t os) # echamos un vi st azo a como quedo conf or mado el FACTOR 26 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) > Congr esoPar t i dar i o [ 1] ct es ct es ct es sal a r i ach empe sanl sanl ct es sanl r i ach Level s: ct es empe r i ach sal a sanl # Ahor a apl i camos l a cant i dad de i ngr esant es con l as l ocal i dades, el vect or de congr esal es # debe ser de i gual l ongi t ude que el de di st r i t os! ! ! > r epr esent ant es<- t appl y( congr esal es, di st r i t os, sum) > r epr esent ant es ct es empe r i ach sal a sanl 4 1 2 1 3 # or denami ent o en FACTOR ORDI NAL > or der ed( r epr esent ant es) ct es empe r i ach sal a sanl 4 1 2 1 3 Level s: 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 materia 12 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 4 1 2 1 4 5 3 a a a a a a a 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. 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 8 2 1 8 4 6 5 3 1 2 7 1 6 6 5 3 1 9 6 − − | | | | | | + = | | | − − \ . \ . \ . − − − − | | | | | | − = | | | − − − \ . \ . \ . Multiplicación de matrices La regla de oro es C=F 13 . 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 12 3. 2 4 6 12 3 2 9 6 b + + − − ( ( ( ( − − + = + − ( ( ( ( − − + + ¸ ¸ ¸ ¸ Un par de ejemplos en R: > m1<- mat r i x( 1: 25, nr ow=5, ncol =5) # cr eamos una mat r i z de 5 x 5, secuenci a de 25 # el ement os secuenci al es > m1 # exhi bi mos por pant al l a el r esul t ado [ , 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 # mul t i pl i camos el escal ar - 3 x | m1| [ , 1] [ , 2] [ , 3] [ , 4] [ , 5] # r esul t ado [ 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<- mat r i x( r ound( r nor m( 25) , 2) , 5, 5) # cr eamos una mat r i z de numer os al eat or i os > 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 28 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) > m1*abs( m2) # mul t i pl i camos | m1| * el absol ut o de val or es de | m2| [ , 1] [ , 2] [ , 3] [ , 4] [ , 5] # r esul t ado> val or es posi t i vos [ 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 # mul t i pl i camos | m1| x | m2| [ , 1] [ , 2] [ , 3] [ , 4] [ , 5] # r esul t ados con si gnos [ 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 1 1 2 3 . 2 2 1 2 3 3 3 ab x + − ( + + + ( ( = + − ( ( − − − ¸ ¸ ( + − ¸ ¸ Para simplificar realizamos esta operación grafica: A * B 1 2 3 1 2 3 + + + ( ( − − − ¸ ¸ 1 1 2 2 3 3 + − ( ( + − ( ( + − ¸ ¸ 11 12 13 21 22 23 31 32 33 c c c c c c c 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 A 32 x B 23 = C 33 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) 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 6 7 8 9 ab x | | | = | | \ . a.b 1 2 3 4 5 6 7 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<- mat r i x( 1: 10, 5, 2) # cr eamos una mat r i z > n1 [ , 1] [ , 2] # exhi bi mos l a mat r i z en l a pant al l a [ 1, ] 1 6 [ 2, ] 2 7 [ 3, ] 3 8 [ 4, ] 4 9 [ 5, ] 5 10 > vect or 1<- c( 1, 2, 3) # creamos un vector de 3 elementos ≠ filas o col umnas de | n1| > vect or 1*n1 [ , 1] [ , 2] [ 1, ] 1 18 [ 2, ] 4 7 [ 3, ] 9 16 [ 4, ] 4 27 [ 5, ] 10 10 Mensaj es de avi so per di dos # r eal i zar a l a oper aci ón per o dar á un mensaj e de er r or I n vect or 1 * n1 : l ongi t ud de obj et o mayor no es múl t i pl o de l a l ongi t ud de uno menor a 11 : 1+8+21=30 a 12 : 2+10+24=36 a 13 : 3+12+27=42 30 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) > vect or 1[ 4] <- 4 # compl et amos el vect or con un val or 4t o > vect or 1[ 5] <- 5 # compl et amos el vect or con un val or 5t o > vect or 1*n1 # ahor a el vect or == col umna de | n1| [ , 1] [ , 2] [ 1, ] 1 6 [ 2, ] 4 14 [ 3, ] 9 24 [ 4, ] 16 36 [ 5, ] 25 50 # no hay er r or > vect or 2<- c( 7, 9) # cr eamos un vect or 2 con 2 el ement os == f i l as | n1| > vect or 2*n1 [ , 1] [ , 2] [ 1, ] 7 54 [ 2, ] 18 49 [ 3, ] 21 72 [ 4, ] 36 63 [ 5, ] 35 90 # no hay mensaj es de er r or , Si C o F | n1| == el ement os Vect or 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(): mat r i x( dat a = NA, nr ow = 1, ncol = 1, byr ow = FALSE, di mnames = 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) # cr eamos un vect or > b<- c( 2, 2, 2, 2, 2, 2) # cr eamos un vect or > c<- c( 3, 3, 3, 3, 3, 3) # cr eamos un vect or > d<- c( 4, 4, 4, 4, 4, 4) # cr eamos un vect or > x<- r bi nd( a, b, c, d) # cr eamos una mat r i z por col umnas con l os vect or es ant er i or es 31 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) > x # l i st amos l a mat r i z | 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<- r bi nd( a, b, c, d) # cr eamos una mat r i z por f i l as con l os vect or es ant er i or es > w # l i st amos l a mat r i z | 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<- mat r i x( c( a, b, c, d) , ncol =6, nr ow=6, byr ow=TRUE, di mnames=l i st ( c( "f i l a 1", "f i l a 2", "f i l a 3", "f i l a 4", "f i l a 5", "f i l a 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 f i l a 1 1 1 1 1 1 1 f i l a 2 2 2 2 2 2 2 f i l a 3 3 3 3 3 3 3 f i l a 4 4 4 4 4 4 4 f i l a 5 1 1 1 1 1 1 f i l a 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<- mat r i x( c( a, b, c, d) , ncol =6, nr ow=6, byr ow=FALSE, di mnames=l i st ( c( "f i l a 1", "f i l a 2", "f i l a 3", "f i l a 4", "f i l a 5", "f i l a 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 f i l a 1 1 2 3 4 1 2 f i l a 2 1 2 3 4 1 2 f i l a 3 1 2 3 4 1 2 f i l a 4 1 2 3 4 1 2 f i l a 5 1 2 3 4 1 2 f i l a 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” 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) f i l a 1 f i l a 2 f i l a 3 f i l a 4 f i l a 5 f i l a 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 f i l a 1 1 1 1 1 1 1 f i l a 2 2 2 2 2 2 2 f i l a 3 3 3 3 3 3 3 f i l a 4 4 4 4 4 4 4 f i l a 5 1 1 1 1 1 1 f i l a 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 omi t e el val or de col umna 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 omi t e el val or de f i l a f i l a 1 f i l a 2 f i l a 3 f i l a 4 f i l a 5 f i l a 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: 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; 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") 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. 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 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<- l i st ( nombr e="J uan", apel l i do="Per ez", codi go="101", cat egor i a="a") > agenda $nombr e [ 1] "J uan" $apel l i do [ 1] "Per ez" $codi go [ 1] "101" $cat egor i a [ 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$nombr e[ 1] "Pedr o" > agenda$cat egor i a [ 1] "a" > agenda$apel l i do [ 1] "Rodr i guez" > agenda[ 1] $nombr e [ 1] "Pedr o" > agenda[ [ 1] ] [ 1] "Pedr o" > agenda[ [ "nombr e"] ] [ 1] "Pedr o" > Supongamos que no le hemos puesto nombres a los componentes de la lista, en el ejemplo siguiente vemos como hacerlo: > agenda<- l i st ( 1, " ahor a" , T, c( 23, 34, 45) ) > agenda [ [ 1] ] [ 1] 1 [ [ 2] ] [ 1] " ahor a" [ [ 3] ] [ 1] TRUE [ [ 4] ] [ 1] 23 34 45 > names( agenda) <- c( " est ado" , " cuando" , " f unci ona" , " var i abl es" ) > agenda $est ado [ 1] 1 $cuando [ 1] " ahor a" $f unci ona [ 1] TRUE $var i abl es [ 1] 23 34 45 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$nombr e_per r o<- "Sul t an" > agenda $est ado [ 1] 1 $cuando [ 1] "ahor a" $f unci ona [ 1] TRUE $var i abl es [ 1] 23 34 45 $nombr e_per r o [ 1] "Sul t an" 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] <- "Nombr e_del _j ef e" > agenda $est ado [ 1] 1 $cuando [ 1] "ahor a" $f unci ona [ 1] TRUE $var i abl es [ 1] 23 34 45 $Nombr e_del _j ef e [ 1] "Sul t an" 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 # obser ve como se cr ea l a secuenci a de númer os > x<- c( 1: 15) > x [ 1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) # obser ve como se cr ea l a secuenci a de númer os, f i l as y col umnas) > w<- mat r i x( 12: 23, 3, 4> w [ , 1] [ , 2] [ , 3] [ , 4] [ 1, ] 12 15 18 21 [ 2, ] 13 16 19 22 39 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) [ 3, ] 14 17 20 23 # cr eamos l a l i st a cont eni endo el vect or y l a mat r i z > l i st a<- l i st ( vect or =x, mat r i z=w) # l i st amos por pant al l a el r esul t ado > l i st a $vect or [ 1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $mat r i z [ , 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: > l appl y( l i st a, mean) $vect or [ 1] 8 $mat r i z [ 1] 17. 5 > l appl y( l i st a, "*", 5) $vect or [ 1] 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 $mat r i z [ , 1] [ , 2] [ , 3] [ , 4] [ 1, ] 60 75 90 105 [ 2, ] 65 80 95 110 [ 3, ] 70 85 100 115 > l appl y( l i st a, sqr t ) $vect or [ 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 $mat r i z [ , 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: t s( dat a = NA, st ar t = 1, end = numer i c( 0) , f r equency = 1, del t at = 1, t s. eps = get Opt i on( "t s. eps") , cl ass, 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. 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: > t s( 1: 10, st ar t =1963) Ti me Ser i es: St ar t = 1963 End = 1972 Fr equency = 1 [ 1] 1 2 3 4 5 6 7 8 9 10 > t s( 1: 47, f r equency=12, c( 1963, 2) ) J an Feb Mar Apr May J un J ul 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 <- t s( mat r i x( r t ( 200 * 8, df = 3) , 200, 8) , st ar t = c( 1961, 1) , f r equency = 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: > ## Mul t i var i at e > z <- t s( mat r i x( r t ( 204 * 8, df = 3) , 204, 8) , + st ar t = c( 1961, 1) , f r equency = 12) > pl ot ( z, yax. f l i p = TRUE) > pl ot ( z, axes = FALSE, ann = FALSE, f r ame. pl ot = TRUE, mar . mul t i = c( 0, 0, 0, 0) , oma. mul t i = c( 1, 1, 5, 1) ) > t i t l e( "pl ot ( t s( . . ) , axes=FALSE, ann=FALSE, 41 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) f r ame. pl ot = TRUE, mar . . . , oma. . . ) ") > > z <- wi ndow( z[ , 1: 3] , end = c( 1977, 12) ) > pl ot ( z, t ype = "b") # mul t i pl e > pl ot ( z, pl ot . t ype="si ngl e", l t y=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 datos 15 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 R 16 : • 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: > pel aj e<- f act or ( c( "bl anco", "caf e", "negr o", "bl anco") ) > peso<- c( 2. 45, 1. 90, 2. 00, 1. 95) > conej os<- dat a. f r ame( Pel aj e=pel aj e, Peso=peso, Cr i as=c( 8, 6, 8, 7) ) > conej os > conej os Pel aj e Peso Cr i as 1 bl anco 2. 45 8 2 caf e 1. 90 6 3 negr o 2. 00 8 4 bl anco 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 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: > secuenci a<- mat r i x( 1: 30, 5, 6) # cr eamos una mat r i z secuenci al 1 a 30 > secuenci a # i mpr i mi mos en pant al l a [ , 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 > hoj a_cal cul o_1<- as. dat a. f r ame( secuenci a) # conver t i mos a dat a. f r ame > hoj a_cal cul o_1 # i mpr i mi mos en pant al l a 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 V 1 , V 2 …V n si deseamos ponerles un nombre especifico debemos crear un vector de nombres mediante names: > names( hoj a_cal cul o_1) <- c( "Uno", "Dos", "Tr es", "Cuat r o", "Ci nco", "Sei s") > hoj a_cal cul o_1 Uno Dos Tr es Cuat r o Ci nco Sei s 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: > conej os Pel aj e Peso Cr i as 1 bl anco 2. 45 8 2 caf e 1. 90 6 3 negr o 2. 00 8 4 bl anco 1. 95 7 > conej os$Pel aj e [ 1] bl anco caf e negr o bl anco Level s: bl anco caf e negr o > conej os$Pel aj e[ 3] [ 1] negr o Level s: bl anco caf e negr o > conej os$Peso[ 4] [ 1] 1. 95 > conej os$Cr i as[ 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á: > l s( ) [ 1] "l i st a" "w" "x" > i s. l i st ( l i st a) [ 1] TRUE > i s. dat a. f r ame( w) [ 1] FALSE > i s. vect or ( x) [ 1] TRUE 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 compilado 17 ), 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: > pr od( c) [ 1] 7 > d<- c( 1: 10) > pr od( d) [ 1] 3628800 > sum( c) [ 1] 7 > sum( d) [ 1] 55 > f act or i al ( 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. 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 (n 1 +n 2 +n 3 +…n n ), 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) # ut i l i zando l a f unci ón sumat or i a de n [ 1] 500500 > 1000*( 1000+1) / 2 # Haci endo el cal cul o de l a j oven español a [ 1] 500500 Otro ejemplo de calculo: El cologaritmo 18 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? > l og( 10) [ 1] 2. 302585 > l og( 1/ 10) # el i nver so 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): > l og2( 3) [ 1] 1. 584963 # est e es el l ogar i t mo de 3 > 2^1. 584963 # si pot enci amos l a base ( 2) por el l ogar i t mo ¿Qué t endr emos? [ 1] 3. 000001 # su ant i l ogar i t mo! ( ¿se ani ma a hacer l o con un l ogar i t mo nat ur al ?) > l og( 8) [ 1] 2. 079442 > 2. 7182807066232140698591273860753^2. 079442 # base de l og nat ur al es o neper i anos [ 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 45 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) Como hacer secuencias 20 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 tabla 22 El uso de cada cual depende de los parámetros propios de cada tipo de distribución. Ejemplos: > r nor m( 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 > r poi s( 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<- r ound( r nor m( 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”: vect or <- 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 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 repositorio 23 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”: • Cl i ma: 558. 775 • Ger mopl asma 1: 11. 900 • Tel ecomuni caci ones: 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 teclado 24 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 i t ems [ 1] 23 33 44 55 Finaliza con una entrada de carácter nulo (ent er) 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. 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 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: > get wd( ) [ 1] " C: / User s/ Edwi n/ Document s" > set wd( " C: / User s/ Edwi n/ Document s/ ar t i cul os/ pr oyect o" ) Er r or en set wd( " C: / User s/ Edwi n/ Document s/ ar t i cul os/ pr oyect o" ) : no es posi bl e cambi ar el di r ect or i o de t r abaj o > set wd( " C: / User s/ Edwi n/ Document s/ ar t i cul os/ pr oyect o" ) > get wd( ) [ 1] " C: / User s/ Edwi n/ Document s/ ar t i cul os/ pr oyect o" No existe el directorio “proyecto” En servidor Debian Errores: > get wd( ) [ 1] "/ home/ edwi n" > set wd( "/ home/ edwi n/ r / pr oyect o") Er r or i n set wd( "/ home/ edwi n/ r / pr oyect o") : cannot change wor ki ng di r ect or y > set wd( "/ home/ edwi n/ R/ pr oyect o") > get wd( ) [ 1] "/ home/ edwi n/ R/ pr oyect o" 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 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 archivos 26 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() #conf i gur amos donde set wd( "D: / mapas/ apel l i dos/ ") # obt enemos l a mat r i z 100*3 apel l i dos apel l i dos <- r ead. csv( "apel l i dos. csv", header =F) #Vi ew( apel l i dos) # descoment ar par a que apar ezca l a vent ana con l os apel l i dos # ar r ay de nombr es de apel l i dos nombr es<- as. ar r ay( apel l i dos$V1) ci f r as<- as. ar r ay( apel l i dos$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: / user s/ usuar i o/ document os/ ar t í cul os/ pr oyect o/ r esul t ados”) . 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 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 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 uso 28 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: wr i t e. t abl e( x, f i l e = " " , append = FALSE, quot e = TRUE, sep = " " , eol = " \ n" , na = " NA" , dec = " . " , r ow. names = TRUE, col . names = TRUE, qmet hod = c( " escape" , " doubl e" ) ) 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. 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 downl oad. f i l e( ) La sintaxis que nos da la ayuda es la siguiente: downl oad. f i l e( ur l , dest f i l e, met hod, qui et = FALSE, mode = "w", cacheOK = TRUE, ext r a = get Opt i on( "downl oad. f i l e. ext r a") ) 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: dat a2<- r eadWor ksheet Fr omFi l e( "excel 2010. xl sx", 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 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 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 ejemplo 32 , 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) 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 t abl a_equi s” nos traerá la información contenida en la totalidad de la “tabla_equis”; “SELECT i d, especi e, f _si embr a, f _emer genci a, f _cosecha FROM t abl a_equi s WHERE condi ci ó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 datos 33 , 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 r oot –p [ ent er ] 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) 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 l i br ar y( RODBC) 2 ch <- odbcConnect ( "t el i p", "r oot ", "ent r opi a") 3 odbcGet I nf o( ch) 4 P<- as. r eal ( as. mat r i x( sql Quer y( ch, as. i s=TRUE, past e( "SELECT br ut o FROM dat os wher e i d <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: 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. 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. sql Save( channel , dat , t abl ename = NULL, append = FALSE, r ownames = TRUE, col names = FALSE, ver bose = FALSE, saf er = TRUE, addPK = FALSE, t ypeI nf o, var Types, f ast = TRUE, t est = FALSE, nast r i ng = NULL) sql Updat e( channel , dat , t abl ename = NULL, i ndex = NULL, ver bose = FALSE, t est = FALSE, nast r i ng = NULL, f ast = 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 #================================================================================== l i br ar y( RODBC) ch <- odbcConnect ( "ger mopl asma", "j ef e", "123456789") odbcGet I nf o( ch) #================================================================================== sql Tabl es( ch) #l i st a l as t abl as exi st ent es #================================================================================== val or es<- c( r ound( r nor m( 10) , 2) ) # cr eamos val or es par a guar dar mej or est o<- dat a. f r ame( "casos"=val or es) ; # cr eamos un dat a. f r ame sql Save( ch, "r esul t ados", mej or est o, r ownames=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. 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. #================================================================================== # PRI MERA PARTE: CONEXI ON A LA DB #================================================================================== l i br ar y( RODBC) ch <- odbcConnect ( "ger mopl asma", "mi _usuar i o", "mi _passwor d") odbcGet I nf o( ch) #================================================================================== sql Tabl es( ch) #l i st a l as t abl as exi st ent es #================================================================================== 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 ger mopl asma mani 1 TABLE 2 ger mopl asma r esul t ados 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: sql Quer y( ch, as. i s=TRUE, past e( "I NSERT I NTO r esul t ados( val or 1, …, val or N) VALUES( val or [ 1] , …val or [ 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. 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) ------------------------------------------------------------------ 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.csv 34 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 notas 35 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. 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 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. #================================================== # Dendogr ama con apel l i dos, una pr ueba #================================================== # Fi l e- Name: apel l i dos. R # Dat e: 04/ 10/ 2012 # Aut hor : Edwi n Agui ar - I NTA TI Cs Cor r i ent es Desar r ol l o y Bases de Dat os # Emai l : eagui ar @cor r eo. i nt a. gov. ar # Dat a: dat os de l a web ( I NDEC) #================================================== # NO conf i gur amos por que el pr oyect o ya l o hi zo y # no per mi t i r á l a i nst r ucci ón, dando er r or : set wd( "apel l i dos") # obt enemos l a mat r i z 100*3 apel l i dos apel l i dos <- r ead. csv( "apel l i dos. csv", header =F) # si desea ver l a t abl a apel l i dos, descoment e: #Vi ew( apel l i dos) # cr eamos el ar r ay de apel l i dos y de val or es nombr es<- as. ar r ay( apel l i dos$V1) ci f r as<- as. ar r ay( apel l i dos$V2) #================================================== # DI STANCI AS, CLUSTERI NG 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! 65 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) # Di st anci as y met odos: ver not a mas abaj o di st anci as1<- di st ( apel l i dos, met hod="manhat t an") # agr upami ent o: cl ust er , cr ea el mapa de l as di st anci as cl ust er <- hcl ust ( di st anci as1) #i mpr i me el r esul t ado en una gr af i ca pl ot ( cl ust er , mai n="Met odo Manhat an", l abel s=nombr es) el gr af i co r esul t ant e: Una depur aci ón del códi go par a gr af i car : 66 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) Códi go agr egado: hc<- hcl ust ( di st ( apel l i dos, "manhat t an") ) pl ot ( hc, hang=- 1) , l abel s=nombr es) pl ot ( hc, hang=- 2) , l abel s=nombr es) r ect . hcl ust ( hc, 3, bor der ="gr een") r ect . hcl ust ( hc, 5, bor der ="r ed") r ect . hcl ust ( hc, 10, bor der ="bl ue") 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 ϵ R d (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 R d x R d 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 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. 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: 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í: #==================================== # Dendogr ama con apel l i dos, una # pr ueba de concept o #==================================== # Fi l e- Name: apel l i dos. R # Dat e: 04/ 10/ 2012 # Aut hor : Edwi n Agui ar - I NTA # TI Cs Cor r i ent es Desar r ol l o y Bases # de Dat os #==================================== l i br ar y( "dat aset s") ; # l i neas copi adas de l a consol a l i br ar y( "gr aphi cs") ; # y pegadas en el scr i pt #conf i gur amos donde set wd( "D: / mapas/ apel l i dos/ ") ; # obt enemos l a mat r i z 100*3 apel l i dos apel l i dos <- r ead. csv( "D: / mapas/ apel l i dos/ apel l i dos. csv", header =F) ; #Vi ew( apel l i dos) # ar r ay de nombr es de apel l i dos nombr es<- as. ar r ay( apel l i dos$V1) ; ci f r as<- as. ar r ay( apel l i dos$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: det ach( " package: dat aset s" ) , 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 repositorio 36 36 Un servidor de internet que posee estos paquetes para su descarga 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: > i nst al l . packages( "xl sx") # or den par a l a descar ga e i nst al aci on I nst al l i ng package( s) i nt o ‘ D: / Usuar i o/ Document s/ R/ wi n- l i br ar y/ 2. 14’ ( as ‘ l i b’ i s unspeci f i ed) al so i nst al l i ng t he dependenci es ‘ xl sxj ar s’ , ‘ r J ava’ pr obando l a URL ' ht t p: / / mi r r or . f cagl p. unl p. edu. ar / CRAN/ bi n/ wi ndows/ cont r i b/ 2. 14/ xl sxj ar s_0. 4. 0. zi p' Cont ent t ype ' appl i cat i on/ zi p' l engt h 9041528 byt es ( 8. 6 Mb) URL abi er t a downl oaded 8. 6 Mb pr obando l a URL ' ht t p: / / mi r r or . f cagl p. unl p. edu. ar / CRAN/ bi n/ wi ndows/ cont r i b/ 2. 14/ r J ava_0. 9- 3. zi p' Cont ent t ype ' appl i cat i on/ zi p' l engt h 745867 byt es ( 728 Kb) URL abi er t a downl oaded 728 Kb pr obando l a URL ' ht t p: / / mi r r or . f cagl p. unl p. edu. ar / CRAN/ bi n/ wi ndows/ cont r i b/ 2. 14/ xl sx_0. 5. 0. zi p' Cont ent t ype ' appl i cat i on/ zi p' l engt h 381977 byt es ( 373 Kb) URL abi er t a downl oaded 373 Kb package ‘ xl sxj ar s’ successf ul l y unpacked and MD5 sums checked package ‘ r J ava’ successf ul l y unpacked and MD5 sums checked package ‘ xl sx’ successf ul l y unpacked and MD5 sums checked The downl oaded packages ar e i n C: \ User s\ Usuar i o\ AppDat a\ Local \ Temp\ Rt mpoP2Dhw\ downl oaded_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 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_packag es_by_name.html o por fecha de actualización. http://cran.r- project.org/web/packages/available_packag es_by_date.html 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 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 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 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 > dat os<- c( r nor m( 10, 30, 10) ) # gener amos númer os al eat or i os > dat os # exami namos l os númer os # cr eados [ 1] 48. 78488 25. 55557 39. 02275 26. 56289 45. 80036 27. 04644 35. 77342 24. 97891 11. 06760 24. 73588 > bar pl ot ( dat os) # i mpr i mi mos l as bar r as Otro barplot > ampl i t ud<- c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) > nombr es<- c( "uno", "dos", "t r es", "cuat r o", "ci nco", "sei s", "si et e", "ocho", "nueve", "di ez", "once") > est at ur as<- c( r ound( r nor m( 10, 1, 2) ) , di gi t s=2) > bar pl ot ( est at ur as, ampl i t ud, nombr es, 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( "l i ght bl ue", "mi st yr ose", "l i ght cyan", "l avender ", "cor nsi l k") , Pie: gráficos de torta. > pi e( dat os) > pi e( dat os, l abel s= r ound( dat os, 2) , mai n="Dat os sobr e Pat os") 76 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) Un ultimo ejemplo de barplot: bar pl ot ( hei ght = cbi nd( x = c( 465, 91) / 465 * 100, y = c( 840, 200) / 840 * 100, z = c( 37, 17) / 37 * 100) , besi de = FALSE, wi dt h = c( 465, 840, 37) , col = c( 1, 2) , l egend. t ext = c( "A", "B") , ar gs. l egend = l i st ( x = "t opl ef t ") ) Boxplot: dos ejemplos > est at ur as di gi t s - 2 0 5 - 1 - 2 - 2 2 - 3 4 2 2 > ot r acosa<- 1/ est at ur as+3 > ot r acosa di gi t s 2. 50 - I nf 3. 20 2. 00 2. 50 2. 50 3. 50 2. 66 3. 25 3. 50 3. 50 > boxpl ot ( est at ur as, 3, ot r acosa) boxpl ot ( l en ~ dose, dat a = Toot hGr owt h, boxwex = 0. 25, at = 1: 3 - 0. 2, subset = supp == "VC", col = "yel l ow", mai n = "Gui nea Pi gs' Toot h Gr owt h", xl ab = "Vi t ami n C dose mg", yl ab = "t oot h l engt h", xl i m= c( 0. 5, 3. 5) , yl i m= c( 0, 35) , yaxs = "i ") Histogramas, dos ejemplos: > est at ur as di gi t s - 2 0 5 - 1 - 2 - 2 2 - 3 4 2 2 > hi st ( est at ur as, col = c( "l i ght bl ue", "mi st yr ose", "l i ght cyan", "l avender ", "cor nsi l k") ) hi st ( est at ur as, f r eq = FALSE, yl i m= c( 0, 0. 2) , col = c( "l i ght bl ue", "mi st yr ose", "l i ght cyan", "l avender ", "cor nsi l k") ) > cur ve( dchi sq( x, df = 4) , col = 2, l t y = 2, l wd = 2, add = TRUE) 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: > i ndi ce<- c( 1: 11) # cr ea el vect or x de 1 a 11 > pl ot ( est at ur as, mai n="Est at ur as") # si t ua l os punt os “pl ot ” en l a gr af i ca > l i nes( i ndi ce, est at ur as) # t r aza l a l í nea que une a l os punt os pl ot ( est at ur as, mai n="Est at ur as", t ype="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” 78 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) Points (puntos) trabaja sobre el eje de coordenadas que provee plot: > pl ot ( - 4: 4, - 4: 4, t ype = "n") # cr ea ej e de coor denadas - 4 a +4 > poi nt s( r nor m( 200) , r nor m( 200) , col = "r ed", pch=19) # punt os r oj os r edondos > poi nt s( r nor m( 100) / 2, r nor m( 100) / 2, col = "bl ue", cex = 1. 5, pch=3) # punt os azul es cr uces 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 > sal e5 <- c( 6, 4, 9, 7, 6, 12, 8, 10, 9, 13) > pl ot ( sal e5, pch="x") > abl i ne( l sf i t ( 1: 10, sal e5) ) > abl i ne( l sf i t ( 1: 10, sal e5, i nt er cept = 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 cuadrados 38 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. 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() pl ot ( var i abl e, t ype="b", yl i m=c( 13, 29) , xl ab="casos", yl ab="ocur r enci as", mai n="Casos vs Ocur r enci as", col ="bl ue", l t y=2, l wd=1) 80 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) e. Uso de barplot() bar pl ot ( var i abl e, yl i m=c( 10, 29) , xl ab="casos", yl ab="ocur r enci as", mai n="Casos vs Ocur r enci as", bor der =2, col ="gr ay", densi t y=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: Mat 3<- mat r i x( c( 1: 3, 3) , 2, 2) l ayout ( mat 3) l ayout . show( 3) mat 5<- mat r i x( c( 1: 5, 5) , 3, 2) l ayout ( mat 5) l ayout . 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. Mat 4<- mat r i x( 1: 4, 2, 2) ; Mat 4; [ , 1] [ , 2] [ 1, ] 1 3 [ 2, ] 2 4 l ayout ( mat 4) ; l ayout . show( 4) ; 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="yel l ow") pl ot ( mat 5) La lista de varios de esos parámetros adicionales es la siguiente 39 : h. Ejemplo de graficación bidimensional 40 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: Dat a set s i n package ‘ dat aset s’ : Ai r Passenger s Mont hl y Ai r l i ne Passenger Number s 1949- 1960 BJ sal es Sal es Dat a wi t h Leadi ng I ndi cat or BJ sal es. l ead ( BJ sal es) Sal es Dat a wi t h Leadi ng I ndi cat or BOD Bi ochemi cal 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 82 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) CO2 Car bon Di oxi de Upt ake i n Gr ass Pl ant s Chi ckWei ght Wei ght ver sus age of chi cks on di f f er ent di et s DNase El i sa assay of DNase EuSt ockMar ket s Dai l y Cl osi ng Pr i ces of Maj or Eur opean St ock I ndi ces, 1991- 1998 For mal dehyde Det er mi nat i on of For mal dehyde Hai r EyeCol or Hai r and Eye Col or of St at i st i cs St udent s Har man23. cor Har man Exampl e 2. 3 Har man74. cor Har man Exampl e 7. 4 I ndomet h Phar macoki net i cs of I ndomet haci n I nsect Spr ays Ef f ect i veness of I nsect Spr ays J ohnsonJ ohnson Quar t er l y Ear ni ngs per J ohnson & J ohnson Shar e LakeHur on Level of Lake Hur on 1875- 1972 Li f eCycl eSavi ngs I nt er count r y Li f e- Cycl e Savi ngs Dat a Lobl ol l y Gr owt h of Lobl ol l y pi ne t r ees Ni l e Fl ow of t he Ri ver Ni l e Or ange Gr owt h of Or ange Tr ees Or char dSpr ays Pot ency of Or char d Spr ays Pl ant Gr owt h Resul t s f r oman Exper i ment on Pl ant Gr owt h Pur omyci n React i on Vel oci t y of an Enzymat i c React i on Seat bel t s Road Casual t i es i n Gr eat Br i t ai n 1969- 84 Theoph Phar macoki net i cs of Theophyl l i ne Ti t ani c Sur vi val of passenger s on t he Ti t ani c Toot hGr owt h The Ef f ect of Vi t ami n C on Toot h Gr owt h i n Gui nea Pi gs UCBAdmi ssi ons St udent Admi ssi ons at UC Ber kel ey UKDr i ver Deat hs Road Casual t i es i n Gr eat Br i t ai n 1969- 84 UKgas UK Quar t er l y Gas Consumpt i on USAccDeat hs Acci dent al Deat hs i n t he US 1973- 1978 USAr r est s Vi ol ent Cr i me Rat es by US St at e USJ udgeRat i ngs Lawyer s' Rat i ngs of St at e J udges i n t he US Super i or Cour t USPer sonal Expendi t ur e Per sonal Expendi t ur e Dat a VADeat hs Deat h Rat es i n Vi r gi ni a ( 1940) WWWusage I nt er net Usage per Mi nut e Wor l dPhones The Wor l d' s Tel ephones abi l i t y. cov Abi l i t y and I nt el l i gence Test s ai r mi l es Passenger Mi l es on Commer ci al US Ai r l i nes, 1937- 1960 ai r qual i t y New Yor k Ai r Qual i t y Measur ement s anscombe Anscombe' s Quar t et of ' I dent i cal ' Si mpl e Li near Regr essi ons at t enu The J oyner - Boor e At t enuat i on Dat a at t i t ude The Chat t er j ee- Pr i ce At t i t ude Dat a aust r es Quar t er l y Ti me Ser i es of t he Number of Aust r al i an Resi dent s beaver 1 ( beaver s) Body Temper at ur e Ser i es of Two Beaver s beaver 2 ( beaver s) Body Temper at ur e Ser i es of Two Beaver s car s Speed and St oppi ng Di st ances of Car s chi ckwt s Chi cken Wei ght s by Feed Type co2 Mauna Loa At mospher i c CO2 Concent r at i on cr i mt ab St udent ' s 3000 Cr i mi nal s Dat a di scover i es Year l y Number s of I mpor t ant Di scover i es esoph Smoki ng, Al cohol and ( O) esophageal Cancer eur o Conver si on Rat es of Eur o Cur r enci es eur o. cr oss ( eur o) Conver si on Rat es of Eur o Cur r enci es eur odi st Di st ances Bet ween Eur opean Ci t i es f ai t hf ul Ol d Fai t hf ul Geyser Dat a f deat hs ( UKLungDeat hs) Mont hl y Deat hs f r omLung Di seases i n t he UK f r eeny Fr eeny' s Revenue Dat a f r eeny. x ( f r eeny) Fr eeny' s Revenue Dat a f r eeny. y ( f r eeny) Fr eeny' s Revenue Dat a i nf er t I nf er t i l i t y af t er Spont aneous and I nduced Abor t i on i r i s Edgar Ander son' s I r i s Dat a i r i s3 Edgar Ander son' s I r i s Dat a i sl ands Ar eas of t he Wor l d' s Maj or Landmasses l deat hs ( UKLungDeat hs) Mont hl y Deat hs f r omLung Di seases i n t he UK l h Lut ei ni zi ng Hor mone i n Bl ood Sampl es l ongl ey Longl ey' s Economi c Regr essi on Dat a l ynx Annual Canadi an Lynx t r appi ngs 1821- 1934 mdeat hs ( UKLungDeat hs) Mont hl y Deat hs f r omLung Di seases i n t he UK mor l ey Mi chel son Speed of Li ght Dat a mt car s Mot or Tr end Car Road Test s nht emp Aver age Year l y Temper at ur es i n New Haven 83 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) not t em Aver age Mont hl y Temper at ur es at Not t i ngham, 1920- 1939 occupat i onal St at us Occupat i onal St at us of Fat her s and t hei r Sons pr eci p Annual Pr eci pi t at i on i n US Ci t i es pr esi dent s Quar t er l y Appr oval Rat i ngs of US Pr esi dent s pr essur e Vapor Pr essur e of Mer cur y as a Funct i on of Temper at ur e quakes Locat i ons of Ear t hquakes of f Fi j i r andu RandomNumber s f r omCongr uent i al Gener at or RANDU r i ver s Lengt hs of Maj or Nor t h Amer i can Ri ver s r ock Measur ement s on Pet r ol eumRock Sampl es sl eep St udent ' s Sl eep Dat a st ack. l oss ( st ackl oss) Br ownl ee' s St ack Loss Pl ant Dat a st ack. x ( st ackl oss) Br ownl ee' s St ack Loss Pl ant Dat a st ackl oss Br ownl ee' s St ack Loss Pl ant Dat a st at e. abb ( st at e) US St at e Fact s and Fi gur es st at e. ar ea ( st at e) US St at e Fact s and Fi gur es st at e. cent er ( st at e) US St at e Fact s and Fi gur es st at e. di vi si on ( st at e) US St at e Fact s and Fi gur es st at e. name ( st at e) US St at e Fact s and Fi gur es st at e. r egi on ( st at e) US St at e Fact s and Fi gur es st at e. x77 ( st at e) US St at e Fact s and Fi gur es sunspot . mont h Mont hl y Sunspot Dat a, 1749- 1997 sunspot . year Year l y Sunspot Dat a, 1700- 1988 sunspot s Mont hl y Sunspot Number s, 1749- 1983 swi ss Swi ss Fer t i l i t y and Soci oeconomi c I ndi cat or s ( 1888) Dat a t r eer i ng Year l y Tr eer i ng Dat a, - 6000- 1979 t r ees Gi r t h, Hei ght and Vol ume f or Bl ack Cher r y Tr ees uspop Popul at i ons Recor ded by t he US Census vol cano Topogr aphi c I nf or mat i on on Auckl and' s Maunga Whau Vol cano war pbr eaks The Number of Br eaks i n Yar n dur i ng Weavi ng women Aver age Hei ght s and Wei ght s f or Amer i can Women LLamamos al paquete Iris: > dat a( i r i s) ; > i r i s # l i st amos I RI S Sepal . Lengt h Sepal . Wi dt h Pet al . Lengt h Pet al . Wi dt h Speci es 1 5. 1 3. 5 1. 4 0. 2 set osa 2 4. 9 3. 0 1. 4 0. 2 set osa 3 4. 7 3. 2 1. 3 0. 2 set osa 4 4. 6 3. 1 1. 5 0. 2 set osa 5 5. 0 3. 6 1. 4 0. 2 set osa 6 5. 4 3. 9 1. 7 0. 4 set osa 7 4. 6 3. 4 1. 4 0. 3 set osa 8 5. 0 3. 4 1. 5 0. 2 set osa 9 4. 4 2. 9 1. 4 0. 2 set osa ………………………………………………………………………………………………………….. 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? 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: > mi n( i r i s[ , 3] ) ; [ 1] 1 > max( i r i s[ , 3] ) ; [ 1] 6. 9 > mi n( i r i s[ , 4] ) ; [ 1] 0. 1 > max( i r i s[ , 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í: > pl ot ( i r i s[ , 3] , i r i s[ , 4] , mai n="Longi t ud y anchur a de Pet al os de I r i s", xl ab="Longi t ud del pet al o", yl ab="Anchur a del pet al o") ; 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. > i dent i f y( i r i s[ , 3] , i r i s[ , 4] ) [ 1] 24 44 45 99 > i dent i f y( i r i s[ , 3] , i r i s[ , 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: > i r i s[ 24, 5] [ 1] set osa Level s: set osa ver si col or vi r gi ni ca > i r i s[ 45, 5] [ 1] set osa 85 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) Level s: set osa ver si col or vi r gi ni ca 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: > i r i s. col or <- c( "r ed", "gr een", "bl ue") [ i r i s$Speci es] > pl ot ( i r i s[ , 3] , i r i s[ , 4] , col =i r i s. col or , mai n="Longi t ud y anchur a de pet al o segun especi es de I r i s", xl ab="Longi t ud de pet al o", yl ab="Anchur a de pet al o") > l egend( 5, 1. 0, c( "Set osa", "Ver si col or ", "Vi r gi ni ca") , pch=1, col =c( "r ed", "gr een", "bl ue") ) 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. > i S <- i r i s$Speci es == "set osa" > i V <- i r i s$Speci es == "ver si col or " > i Vi <- i r i s$Speci es == "vi r gi ni ca" > mat pl ot ( c( 1, 8) , c( 0, 4. 5) , t ype= "n", xl ab="Longi t ud", yl ab ="Anchur a", mai n = "Pet al os y Sepal os de I r i s") > mat poi nt s( i r i s[ i S, c( 1, 3) ] , i r i s[ i S, c( 2, 4) ] , pch =1, col =c( 2, 4) ) > mat poi nt s( i r i s[ i V, c( 1, 3) ] , i r i s[ i V, c( 2, 4) ] , pch =4, col =c( 2, 4) ) > mat poi nt s( i r i s[ i Vi , c( 1, 3) ] , i r i s[ i Vi , c( 2, 4) ] , pch=20, col =c( 2, 4) ) > l egend( 1, 5, c( "Sepal os Set osa", "Pet al os Set osa", "Sepal os Ver si col or ", "Pet al os Ver si col or ", "Sepal os Vi r gi ni ca", "Pet al os Vi r gi ni ca") , pch =c( 1, 1, 4, 4, 20, 20) , col =r ep( 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: 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 mat poi nt s( i r i s[ i S, c( 1, 3) ] , i r i s[ i S, 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. 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: 88 Introducción a R utilizando Rstudio server Edwin Aguiar (
[email protected]) 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. 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.