Este capítulo contiene un breve tutorial de R con muchos ejemplos.
Si nunca has usado R antes, este es un buen momento para iniciarlo e intentar jugar con él. No hay mejor manera de aprender algo que probándolo usted mismo. puedes seguir adelante escribiendo el mismo texto que se muestra en el libro. O intenta cambiarlo un poco a ver que pasa. (Por ejemplo, si el código de muestra dice 3 + 4, intente escribir 3 - 4 en su lugar.)
Si nunca antes has usado un lenguaje interactivo, échale un vistazo en el Capítulo 2 antes de comenzar. Ese capítulo contiene una descripción general del entorno R, incluida la consola. De lo contrario, usted Puede que la presentación de los ejemplos (y la terminología) le resulten confusas.
Comencemos a usar R. Cuando ingresa una expresión en la consola R y presiona la tecla Enter, R evaluará esa expresión y mostrará los resultados (si hay cualquier). Si la declaración da como resultado un valor, R imprimirá ese valor. Por ejemplo tu Puedo usar R para hacer cálculos simples:
Q
El intérprete interactivo de R imprimirá automáticamente un objeto devuelto por una expresión ingresada en la consola de R. Observe el divertido “[1]” que acompaña a cada uno. valor devuelto En R, cualquier número que ingrese en la consola se interpreta como un vector. Un vector es una colección ordenada de números. El “[1]” significa que el índice 17 del primer elemento mostrado en la fila es 1. En cada uno de estos casos, también hay solo un elemento en el vector. Puede construir vectores más largos usando la función c(…). (c significa “combinar”). Por ejemplo:
Q
es un vector que contiene los primeros siete elementos de la secuencia de Fibonacci. como un ejemplo de un vector que abarca varias líneas, usemos el operador de secuencia para que produzca un vector con cada número entero entre 1 y 50:
Q
Observe los números entre paréntesis en el lado izquierdo de los resultados. Estos indican el índice del primer elemento mostrado en cada fila. Cuando realiza una operación en dos vectores, R coincidirá con los elementos del dos vectores por pares y devuelve un vector. Por ejemplo:
Q
Si los dos vectores no son del mismo tamaño, R repetirá la secuencia más pequeña múltiples veces:
Q
Tenga en cuenta la advertencia si la segunda secuencia no es múltiplo de la primera. En R, también puedes ingresar expresiones con caracteres:
Q
Esto se llama vector de caracteres en R. Este ejemplo es en realidad un vector de caracteres de longitud 1. A continuación se muestra un ejemplo de un vector de caracteres de longitud 2:
Q
(En otros lenguajes, como C, “carácter” se refiere a un solo carácter, y un carácter ordenado conjunto de caracteres se llama cadena. Una cadena en C es equivalente a un valor de carácter en R). Puede agregar comentarios al código R. Todo lo que esté después del signo de almohadilla (“#”) en una línea se ignorado:
Q
En R, las operaciones que realizan todo el trabajo se denominan funciones. Ya hemos usado Algunas funciones anteriores (no puedes hacer nada interesante en R sin ellas). Las funciones son como las que recuerdas de la clase de matemáticas. La mayoría de las funciones están en el siguiente forma:
Q
Donde f es el nombre de la función y argumento1, argumento2,. . . son los argumentos a la función. Aqui hay algunos ejemplos mas:
Q
En cada uno de estos ejemplos, las funciones solo tomaron un argumento. Muchas funciones requieren más de un argumento. Puede especificar los argumentos por nombre:
Q
O, si proporciona los argumentos en el orden predeterminado, puede omitir los nombres:
Q
No todas las funciones son de la forma f(…). Algunos de ellos tienen forma de operadores. Por ejemplo, usamos el operador de suma (“+”) arriba. A continuación se muestran algunos ejemplos de operadores:
Q
Ya hemos visto el primero: es solo una suma. El segundo operador es el operador de exponenciación, lo cual es interesante porque no es un operador conmutativo. El tercer operador es el operador de igualdad. (Observe que el resultado devuelto es FALSO; R tiene un tipo de datos booleano).
Q
Como la mayoría de los otros lenguajes, R le permite asignar valores a variables y hacer referencia a ellas mediante nombre. En R, el operador de asignación es <-. Por lo general, esto se pronuncia como “obtiene”. Para ejemplo, la declaración:
Q
generalmente se lee como “x obtiene 1”. (Si alguna vez has hecho algún trabajo con computadora teórica ciencia, probablemente te guste esta notación: parece un pseudocódigo de algoritmo). Después de asignar un valor a una variable, el intérprete de R sustituirá ese valor en lugar del nombre de la variable cuando evalúa una expresión. He aquí un ejemplo sencillo:
Q
Observe que la sustitución se realiza en el momento en que se asigna el valor a z, no en el momento en que se evalúa z. Supongamos que tuviera que escribir los tres anteriores expresiones y luego cambiar el valor de y. El valor de z no cambiaría:
Q
Hablaré más sobre las sutilezas de las variables y cómo se evalúan en el Capítulo 8. R proporciona varias formas diferentes de referirse a un miembro (o conjunto de miembros) de un vector. Puede hacer referencia a elementos por ubicación en un vector:
Q
Puede recuperar varios elementos en un vector especificando los índices de cada elemento como un vector entero:
Q
Puede recuperar elementos fuera de orden. Los artículos se devuelven en el orden en que fueron referenciado:
Q
También puede especificar qué elementos recuperar a través de un vector lógico. Como ejemplo, busquemos solo múltiplos de 3 (seleccionando elementos que sean congruentes con 0 mod 3):
Q
En R, hay dos operadores adicionales que se pueden usar para asignar valores a símbolos. Primero, puede utilizar un único signo igual (“=””) para la asignación.† Este operador asigna el símbolo de la izquierda al objeto de la derecha. En muchos otros idiomas, todas las declaraciones de asignación utilizan signos de igual. Si te sientes más cómodo con esto notación, eres libre de utilizarla. Sin embargo, usaré solo la asignación <- operador en este libro porque creo que es más fácil de leer. Cualquiera que sea la notación que prefiera, tenga cuidado porque el operador = no significa “igual”. Para eso necesitas para usar el operador ==:
Q
En R, también puedes asignar un objeto de la izquierda a un símbolo de la derecha:
Q
En algunos contextos de programación, esta notación puede ayudarle a escribir código más claro. (Él También puede ser conveniente si escribe una expresión larga y luego se da cuenta de que Se ha olvidado de asignar el resultado a un símbolo.) Una función en R es simplemente otro objeto asignado a un símbolo. puedes definir sus propias funciones en R, asígneles un nombre y luego llámelas como a las funciones integradas:
Q
Esto lleva a un truco muy útil. A menudo puedes escribir el nombre de una función para ver el código para ello. He aquí un ejemplo:
Q
En R, puedes construir estructuras de datos más complicadas que solo vectores. Un La matriz es un vector multidimensional. Los vectores y las matrices se almacenan de la misma manera internamente, pero una matriz se puede mostrar de manera diferente y se puede acceder a ella de manera diferente. Una matriz El objeto es solo un vector asociado con un atributo de dimensión. Aquí tienes un sencillo ejemplo. Primero, definamos una matriz explícitamente:
Q
Así es como se ve la matriz:
Q
Y así es como haces referencia a una celda:
Q
Ahora, definamos un vector con el mismo contenido:
Q
Una matriz es simplemente una matriz bidimensional:
Q
Las matrices pueden tener más de dos dimensiones. Por ejemplo:
Q
R usa una sintaxis muy limpia para referirse a parte de una matriz. Usted especifica índices separados para cada dimensión, separados por comas:
Q
Para obtener todas las filas (o columnas) de una dimensión, simplemente omita los índices:
Q
En todos los ejemplos anteriores, acabamos de analizar estructuras de datos basadas en un único tipo de datos subyacente. En R, es posible construir estructuras más complicadas. con múltiples tipos de datos. R tiene un tipo de datos incorporado para mezclar objetos de diferentes tipos, llamados listas. Las listas en R son sutilmente diferentes de las listas en muchos otros lenguajes. Las listas en R pueden contener una selección heterogénea de objetos. Puedes nombrar cada uno componente en una lista. Se puede hacer referencia a los elementos de una lista por ubicación o nombre. Introducción a las estructuras de datos | 23 Un breve tutorial de R
A continuación se muestra un ejemplo de una lista con dos componentes con nombre:
Q
Puede acceder a un elemento de la lista de varias formas:
Q
Una lista puede incluso contener otras listas:
Q
Un marco de datos es una lista que contiene varios vectores con nombre que tienen la misma longitud. Un marco de datos se parece mucho a una hoja de cálculo o una tabla de base de datos. Los marcos de datos son particularmente buenos para representar datos experimentales. Como ejemplo, voy a usar Algunos datos del béisbol. Construyamos un marco de datos con los resultados de victorias/pérdidas en el Liga Nacional (NL) Este en 2008:
Q
Puede hacer referencia a los componentes de un marco de datos (o elementos de una lista) por su nombre usando el operador $:
Q
A continuación se muestra una forma de encontrar un valor específico en un marco de datos. Supongamos que quisieras Encuentre el número de pérdidas de los Florida Marlins (FLA). Una forma de seleccionar un miembro de una matriz es mediante el uso de un vector de valores booleanos para especificar qué elemento devolver de una lista. Puedes calcular un vector apropiado como este:
Q
Luego puedes usar este vector para referirte al elemento correcto en el vector de pérdidas:
Q
Puede importar datos a R desde otro archivo o desde una base de datos. Consulte el Capítulo 12 para más información sobre cómo hacer esto. Además de las listas, R tiene otros tipos de estructuras de datos para mantener una lista heterogénea. colección de objetos, incluidas definiciones de clases formales a través de objetos S4.
R es un lenguaje orientado a objetos. Cada objeto en R tiene un tipo. Además, cada objeto en R es miembro de una clase. Ya nos hemos encontrado con varios diferentes. clases: vectores de caracteres, vectores numéricos, marcos de datos, listas y matrices. Puede utilizar la función de clase para determinar la clase de un objeto. Por ejemplo:
Q
Observe el último ejemplo: una función es un objeto en R con la clase función. Algunas funciones están asociadas con una clase específica. Estos se llaman métodos. (No todas las funciones están estrechamente ligadas a una clase particular; el sistema de clases en R es mucho menor formal que eso en un lenguaje como Java.) En R, los métodos de diferentes clases pueden compartir el mismo nombre. Estos se llaman genéricos. funciones. Las funciones genéricas tienen dos propósitos. Primero, hacen que sea fácil de adivinar. el nombre de función correcto para una clase desconocida. En segundo lugar, las funciones genéricas lo hacen Es posible utilizar el mismo código para objetos de diferentes tipos. Por ejemplo, + es una función genérica para agregar objetos. Puedes sumar números junto con el operador +
Q
Se podría suponer que el operador de suma funcionaría de manera similar con otros tipos. de objetos. Por ejemplo, también puede utilizar el operador + con un objeto de fecha y un número:
Q
Por cierto, el intérprete de R llama a la función genérica imprimir en cualquier objeto devuelto en la consola R. Supongamos que define x como:
Q
Cuando escribes:
Q
el intérprete en realidad llama a la función print(x) para imprimir los resultados. Esto significa que si define una nueva clase, puede definir un método de impresión para especificar cómo los objetos de esa nueva clase están impresos en la consola. Algunas funciones aprovechan esta funcionalidad para hacer otras cosas cuando ingresas una expresión en la consola.‡ Hablaré sobre objetos con más profundidad en el Capítulo 7 y sobre clases en el Capítulo 10.
Q
Para los estadísticos, un modelo es una forma concisa de describir un conjunto de datos, generalmente con una fórmula matemática. A veces, el objetivo es construir un modelo predictivo con datos de entrenamiento para predecir valores basados en otros datos. Otras veces, el objetivo es construir un modelo descriptivo que le ayuda a comprender mejor los datos. R tiene una notación especial para describir relaciones entre variables. Suponer que estás asumiendo un modelo lineal para una variable y, predicha a partir de las variables x1, x2, …, xn. (Los estadísticos suelen referirse a y como la variable dependiente, y a x1, x2, …, xn como las variables independientes.) En forma de ecuación, esto implica una relación como:
Q
En R, escribirías la relación como y ~ x1 + x2 + … + xn, que es una fórmula objeto.
Q
Entonces, intentemos usar una regresión lineal para estimar la relación. La fórmula es dist~velocidad. Usaremos la función lm para estimar los parámetros de un modelo lineal. La función lm devuelve un objeto de clase lm, el cual asignaremos a una variable llamada coches.lm:
Q
Ahora, echemos un vistazo rápido a los resultados obtenidos:
Q
Como puede ver, imprimir un objeto lm le muestra la llamada a la función original (y por lo tanto el conjunto de datos y la fórmula) y los coeficientes estimados. Para obtener más información, podemos usar la función de resumen:
Q
Como puedes ver, la opción de resumen te muestra la llamada a la función, la distribución de los residuos del ajuste, los coeficientes y la información sobre el ajuste. Por el De esta manera, es posible simplemente llamar a la función lm o llamar al resumen (lm (…)) y no asignar un nombre al objeto modelo:
Q
En algunos casos, esto puede resultar más conveniente. Sin embargo, a menudo desea realizar análisis adicionales, como trazar residuos, calcular estadísticas adicionales o actualizar un modelo para sumar o restar variables. Al asignar un nombre al modelo, puede hacer que su código sea más fácil de entender y modificar. Además, volver a montar un El modelo puede consumir mucho tiempo para modelos complejos y grandes conjuntos de datos. Al asignar el modelo a un nombre de variable, puede evitar estos problemas.
R incluye varios paquetes para visualizar datos: gráficos, cuadrícula y celosía. Por lo general, encontrará que las funciones dentro de los paquetes de gráficos y de celosía son las más útil.§ Si está familiarizado con Microsoft Excel, encontrará que R puede generar todos los gráficos con los que está familiarizado: gráficos de columnas, gráficos de barras, gráficos de líneas, gráficos circulares, y diagramas de dispersión. Incluso si eso es todo lo que necesita, R hace que sea mucho más fácil que Excel automatizar la creación de gráficos y personalizarlos. Sin embargo, hay muchos, muchos Más tipos de gráficos disponibles en R, muchos de ellos bastante intuitivos y elegantes. Para hacer esto un poco más interesante, trabajemos con algunos datos reales. Iban para observar todos los intentos de gol de campo en la Liga Nacional de Fútbol Americano (NFL) en 2005”. Para aquellos que no estén familiarizados con el fútbol americano, aquí hay una explicación rápida. Un equipo puede intentar patear una pelota de fútbol entre un conjunto de postes para recibir 3 puntos. Si falla el tiro de campo, la posesión del balón vuelve al otro equipo (en el lugar del campo donde se intentó el tiro). Vamos a echar un vistazo a intentos de patada en la NFL en 2005. Primero, echemos un vistazo rápido a la distribución de distancias. R proporciona una función, hist, que puede hacer esto rápidamente por nosotros. Comencemos cargando el conjunto de datos apropiado. (El conjunto de datos está incluido en el paquete básico; consulte el Prefacio para obtener información sobre cómo obtener este paquete.)
Q
Echemos un vistazo rápido a los nombres de las columnas en el marco de datos field.goals:
Q
Ahora, probemos el comando hist:
Q
Esto produce un gráfico como el que se muestra en la Figura 3-1. (Dependiendo de su sistema, Si intenta esto usted mismo, es posible que vea un gráfico con un color y formato diferentes. I Ajusté algunos parámetros gráficos para que los gráficos se vieran bien impresos.) Quería para ver más detalles sobre el número de tiros de campo a diferentes distancias, así que modifiqué el argumento breaks para agregar más contenedores al histograma:
Q
Puede ver los resultados de este comando en la Figura 3-2. R también presenta muchos otros Formas de visualizar datos. Un gran ejemplo es un gráfico de franjas. Este gráfico solo traza un punto en el eje x para cada punto de un vector. Como ejemplo, veamos la distancia de goles de campo bloqueados. Podemos distinguir los tiros de campo bloqueados con el play.type variable en el marco de datos field.goals. Echemos un vistazo rápido a cuántos están bloqueados. goles de campo que hubo en 2005. Usaremos la función de tabla para tabular los resultados:
C
Ahora seleccionaremos solo observaciones con tiros de campo bloqueados. Agregaremos un poco de nerviosismo para que podamos ver puntos individuales. Por último, también cambiaremos la apariencia del puntos usando el argumento pch:
Q
Los resultados se muestran en la Figura 3-3.
C
Como segundo ejemplo, usemos el conjunto de datos de automóviles, que se incluye en el paquete base. El conjunto de datos de automóviles consta de un conjunto de 50 observaciones:
Q
Cada observación contiene la velocidad del automóvil y la distancia requerida para detenerse. Echemos un vistazo rápido al contenido de este conjunto de datos:
Q
Tracemos la relación entre la velocidad del vehículo y la distancia de frenado:
Q
El gráfico se muestra en la Figura 3-4. De un vistazo rápido, vemos que la distancia de frenado es aproximadamente proporcional a la velocidad.
C
Probemos con un ejemplo más, esta vez usando gráficos reticulares. Los gráficos reticulares proporcionan algunas herramientas excelentes para dibujar gráficos bonitos, particularmente gráficos que comparan diferentes grupos de puntos. De forma predeterminada, el paquete de celosía no está cargado; obtendrás un error si intenta llamar a una función de celosía sin cargar la biblioteca. Para cargar la biblioteca, utilice el siguiente comando:
Q
Hablaremos más sobre los paquetes R en el Capítulo 4. Cuadros y gráficos | 31
Por ejemplo, veremos cómo cambiaron los hábitos alimentarios estadounidenses entre 1980 y y 2005.# El conjunto de datos de consumo está disponible en un paquete resumido. Contiene 48 observaciones, cada una de las cuales muestra la cantidad de un bien consumido (o producido) en un año específico. Los datos están disponibles sólo para años que son múltiplos de 5 (por lo que hay seis años únicos entre 1980 y 2005). La cantidad de alimento consumido está dada por Cantidad, el tipo de alimento lo da Alimento y el año lo da Año. Dos de las variables son vectores numéricos: Importe y Año. Sin embargo, dos de ellos Hay un tipo de datos importante que aún no hemos visto: los factores. Un factor es un objeto R tipo que se utiliza para representar de forma compacta un vector de valores categóricos. Los factores son utilizado en muchas funciones de modelado. Puede crear un factor a partir de otro vector (normalmente un vector de caracteres) utilizando la función de factor. En este marco de datos, los valores La comida y las unidades son factores. (Analizaremos los vectores con más detalle en “Vectores” en la página 82). Para ayudar a revelar tendencias en los datos, decidí utilizar la función de diagrama de puntos. (Esta función se parece a los gráficos de líneas en Excel). Específicamente, nos gustaría ver cómo varía la Cantidad por año. Nos gustaría trazar por separado la tendencia de cada valor de la variable Alimentos. Para gráficos de celosía, especificamos los datos que queremos trazar a través de una fórmula, en este caso, Importe ~ Año | Alimento. Una fórmula es un objeto R que se utiliza para expresar una relación entre un conjunto de variables. Si lo desea, puede intentar trazar la relación utilizando la configuración predeterminada:
Q
Encontré difícil leer el gráfico predeterminado: las etiquetas de los ejes eran demasiado grandes, la escala para cada La trama era la misma y el apilamiento no me pareció bien. Así que ajusté un poco la presentación. Aquí está la versión que produjo la Figura 3-5:
Q
La opción de aspecto cambia las proporciones de cada gráfico para intentar mostrar los cambios desde Ángulos de 45° (haciendo que los cambios sean más fáciles de ver). La opción de escalas cambia la forma en que los ejes se dibujan. Analizaré los diagramas de celosía con más detalle en el Capítulo 15 y explicaré cómo Utilice diferentes opciones para ajustar el aspecto de sus gráficos.
R incluye un sistema de ayuda para ayudarle a obtener información sobre los paquetes instalados. A Para obtener ayuda sobre una función, por ejemplo, glm, escribirías:
C
o equivalente:
Q
Para buscar ayuda sobre un operador, debe colocar el operador entre comillas:
Q
Si desea probar los ejemplos en un archivo de ayuda, puede usar la función de ejemplo para Pruébelos automáticamente. Por ejemplo, para ver el ejemplo de glm, escriba:
Q
Puede buscar ayuda sobre un tema, por ejemplo, “regresión”, utilizando el función de ayuda.búsqueda
Q
Esto puede resultar muy útil si no recuerda el nombre de una función; R regresará una lista de temas relevantes. También hay una abreviatura para este comando:
Q
Para obtener el archivo de ayuda de un paquete, a veces puede utilizar uno de los comandos arriba. Sin embargo, también puede usar la opción de ayuda para que el comando de la biblioteca obtenga información más completa. Por ejemplo, para obtener ayuda sobre la biblioteca grDevices, usted utilizaría la siguiente función:
Q
Algunos paquetes (especialmente los paquetes de Bioconductor) incluyen al menos una viñeta. Una viñeta es un documento breve que describe cómo utilizar el paquete, completo con ejemplos. Puede ver una viñeta usando el comando viñeta. Para Por ejemplo, para ver la viñeta del paquete affy (suponiendo que haya instalado este paquete), usaría el siguiente comando:
Q
Para ver las viñetas disponibles para todos los paquetes adjuntos, puede utilizar lo siguiente dominio:
Q
Para ver viñetas de todos los paquetes instalados, pruebe este comando: