Introducción

En el presente documento se presentaran los conceptos básicos de visualización y programación en R, empezamos haciendo gráficos con R. Los gráficos son de gran importancia para la ciencia de datos la cual combina múltiples campos dentro de ellos la estadística, inteligencia artificial (IA), métodos científicos y análisis de datos, se les conoce como científicos de datos a los profesionales que utilizan la ciencia de datos y aplican una combinación de competencia para analizar de datos recopilados en la web. Por otro lado, nos encargaremos de desmitificar la programación con R, aprenderás a ejecutar funciones, crear objetos, vectores, listas, tablas, instalar paquetes, entre otras cosas.

La siguiente información se extrajo del Tutorial de RStudio Cloud: the basics(los básicos de R)

Comience aquí para aprender las habilidades en las que confiará en cada análisis (y cada manual básico que sigue): cómo inspeccionar, visualizar, crear subconjuntos y transformar sus datos, así como también cómo ejecutar el código.

Si está listo para comenzar, vaya al primer tutorial. No hay necesidad de instalar o descargar nada. Cada tutorial tiene todo lo que necesita para escribir y ejecutar código R, directamente en el tutorial.

El tutorial se divide en 2 partes

  1. Visualización de datos

Comience aquí y comience a hacer gráficos con R. Los gráficos son una de las herramientas más importantes para la ciencia de datos; también son uno de los más divertidos.

  1. Programación básica

Este tutorial desmitifica la programación con R. Aquí, aprenderá cómo ejecutar funciones y construir objetos.

Parte 1. visualización de datos.

Bienvenidos

La visualización es una de las herramientas más importantes para la ciencia de datos.

También es una excelente manera de comenzar a aprender R; cuando visualiza datos, obtiene una recompensa inmediata que lo mantendrá motivado a medida que aprende. Después de todo, ¡aprender un nuevo idioma puede ser difícil!

Este tutorial le enseñará cómo visualizar datos con el paquete de visualización más popular de R, ggplot2.

El tutorial se centra en tres habilidades básicas:

  1. Cómo crear gráficos con una template reutilizable
  2. Cómo agregar variables a un gráfico con aesthetics
  3. Cómo hacer diferentes “tipos” de gráficos con geoms

En este tutorial, usaremos los paquetes principales de tidyverse, incluido ggplot2. Ya cargué los paquetes por ti, ¡así que comencemos!

Estos ejemplos se extrajeron de R for Data Science de Hadley Wickham y Garrett Grolemund, publicado por O’Reilly Media, Inc., 2016, ISBN: 9781491910399. Puede adquirir el libro en shop.oreilly.com

Una plantilla de código

“El gráfico simple ha traído más información a la mente del analista de datos que cualquier otro dispositivo”. — John Tukey

Comencemos con una pregunta para explorar.

¿Qué piensas?

¿Los autos con motores más grandes usan más combustible que los autos con motores más pequeños?

  • Los autos con motores más grandes usan más combustible.

  • Los autos con motores más grandes usan menos combustible.

En otras palabras, existe una relación negativa entre el tamaño del motor y la eficiencia del combustible. Ahora probemos tu hipótesis con datos.

mpg

Puede probar su hipótesis con el conjunto de datos mpg que viene en el paquete ggplot2. mpg contiene observaciones recopiladas en 38 modelos de automóviles por la Agencia de Protección Ambiental de EE. UU.

Para ver el marco de datos de mpg.

library(ggplot2)
mpg

Entre las variables en mpg están:

displ, el tamaño del motor de un automóvil, en litros.

hwy, la eficiencia de combustible de un automóvil en la carretera, en millas por galón (mpg). Un automóvil con un mpg bajo consume más combustible que un automóvil con un mpg alto cuando recorren la misma distancia.

Ahora usemos estos datos para hacer nuestro primer gráfico.

Un grafico

El siguiente código usa funciones del paquete ggplot2 para trazar la relación entre displ y hwy.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

¿Puedes identificar la relación?

Y la respuesta es…

El gráfico muestra una relación negativa entre el tamaño del motor (displ) y la eficiencia del combustible (hwy). Los puntos que tienen un gran valor de displ tienen un pequeño valor de hwy y viceversa.

En otras palabras, los autos con motores grandes usan más combustible. Si esa era tu hipótesis, ¡tenías razón!

Ahora veamos cómo hicimos el grafico.

ggplot()

Aquí está el código que usamos para hacer la trama. Tenga en cuenta que contiene tres funciones: ggplot(), geom_point() y aes().

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

En R, una función es un nombre seguido de un conjunto de paréntesis. Muchas funciones requieren información especial para hacer su trabajo y usted escribe esta información entre paréntesis.

ggplot

La primera función, ggplot(), crea un sistema de coordenadas al que puede agregar capas. El primer argumento de ggplot() es el conjunto de datos que se usará en el gráfico.

Por sí mismo, ggplot(data = mpg) crea un gráfico vacío, que se ve así.

ggplot(data = mpg)

geom_punto()

geom_point() agrega una capa de puntos al gráfico vacío creado por ggplot(). Esto nos da un diagrama de dispersión.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

mapping = aes()

geom_point() toma un argumento de mapping que define qué variables en su conjunto de datos se asignan a qué ejes en su gráfico. El argumento de mapping siempre se combina con la función aes(), que usa para reunir todas las asignaciones que desea crear.

Aquí, queremos asignar la variable displ al eje x y la variable hwy al eje y, por lo que agregamos x = displ e y = hwy dentro de aes() (y los separamos con una coma).

¿Dónde buscará ggplot2 estas variables mapeadas? En el marco de datos que pasamos al argumento de datos, en este caso, mpg.

Un flujo de trabajo gráfico

Nuestro código sigue el flujo de trabajo común para hacer gráficos con ggplot2. Para hacer un gráfico, usted:

  • Inicie el gráfico con ggplot()
  • Agregar elementos al gráfico con una función geom_
  • Seleccionar variables con el argumento mapping = aes()

Una plantilla gráfica

De hecho, puede convertir nuestro código en una plantilla reutilizable para hacer gráficos. Para hacer un gráfico, reemplace las secciones entre paréntesis en el siguiente código con un conjunto de datos, una función geom_ o una colección de asignaciones.

¡Darle una oportunidad! Reemplace las secciones entre paréntesis con mpg, geom_boxplot y x = clase, y = hwy para hacer un gráfico ligeramente diferente.

ggplot(data = mpg) + 
  geom_boxplot(mapping = aes(x = class, y = hwy))

Problemas comunes

A medida que comience a ejecutar el código R, es probable que tenga problemas. No te preocupes, le pasa a todo el mundo. ¡He estado escribiendo código R durante años, y todos los días sigo escribiendo código que no funciona!

Comience comparando cuidadosamente el código que está ejecutando con el código de los ejemplos. R es extremadamente quisquilloso, y un carácter fuera de lugar puede marcar la diferencia. Asegúrese de que cada ( coincida con un ) y cada ” esté emparejado con otro “. También preste atención a las mayúsculas; R es sensible a mayúsculas y minúsculas.

ubicación

Un problema común al crear gráficos ggplot2 es poner el + en el lugar equivocado: tiene que estar al final de una línea, no al principio. En otras palabras, asegúrese de no haber escrito accidentalmente un código como este:

ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))

ayuda

Si todavía estás atascado, prueba la ayuda. Puede obtener ayuda sobre cualquier función de R ejecutando ?function_name en un fragmento de código, e.g. ?geom_point. No se preocupe si la ayuda no parece tan útil; en su lugar, vaya al final de la página de ayuda y busque un ejemplo de código que coincida con lo que está tratando de hacer.

Si eso no ayuda, lea atentamente el mensaje de error que aparece cuando ejecuta su código (que no funciona). ¡A veces la respuesta estará enterrada allí! Pero cuando eres nuevo en R, es posible que aún no sepas cómo entender el mensaje de error. Otra gran herramienta es Google: intente buscar en Google el mensaje de error, ya que es probable que alguien más haya tenido el mismo problema y haya obtenido ayuda en línea.

Ejercicio 1

Ejecute ggplot(data = mpg) ¿qué ve?

ggplot(data = mpg)

Un ggplot que no tiene capas se ve en blanco. Para terminar el gráfico, agregue una función geom”.

ggplot(data = mpg) + 
  geom_boxplot(mapping = aes(x = class, y = hwy))

Listo, ya tienes ti grafica realizada.

Ejercicio 2

Haz un diagrama de dispersión de cty vs hwy.

ggplot(data = mpg) + 
  geom_boxplot(mapping = aes(x = cty, y = hwy))
## Warning: Continuous x aesthetic -- did you forget aes(group=...)?

Ejercicio 3

¿Qué pasa si haces un diagrama de dispersión de class vs drv. Intentalo. ¿Por qué la trama no es útil?

ggplot(data = mpg) + 
  geom_boxplot(mapping = aes(x = class, y = drv))

class y drv son ambas variables categóricas. Como resultado, los puntos solo pueden aparecer en ciertos valores, donde muchos puntos se superponen entre sí. No tienes idea de cuántos puntos caen uno encima del otro en cada ubicación. Experimente con geom_count() para encontrar una mejor solución”.

Mapeos Aesthetic

“El mayor valor de una imagen es cuando nos obliga a notar lo que nunca esperábamos ver”. — John Tukey

Una mirada más cercana

En el siguiente gráfico, un grupo de puntos (resaltados en rojo) parece estar fuera de la tendencia lineal entre el tamaño del motor y el consumo de combustible. Estos autos tienen un kilometraje más alto de lo que cabría esperar. ¿Cómo puedes explicar estos coches?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

Una hipótesis

Supongamos que los autos son híbridos. Una forma de probar esta hipótesis es observar el valor de class de cada automóvil. La variable de class del conjunto de datos de mpg clasifica los automóviles en grupos como compacto, mediano y SUV. Si los puntos periféricos son híbridos, deben clasificarse como autos compactos o, quizás, autos subcompactos (tenga en cuenta que estos datos se recopilaron antes de que las camionetas híbridas y los SUV se hicieran populares). Para verificar esto, necesitamos agregar la variable de class a la gráfica.

Aesthetic

Puede agregar una tercera variable, como class, a un diagrama de dispersión bidimensional asignándolo a una nueva Aesthetic. Una Aesthetic es una propiedad visual de los objetos en su trama. La Aesthetic incluye cosas como el tamaño, la forma o el color de los puntos.

Puede mostrar un punto (como el que se muestra a continuación) de diferentes formas cambiando los valores de sus propiedades Aesthetic. Como ya usamos la palabra “valor” para describir datos, usemos la palabra “nivel” para describir propiedades estéticas. Aquí cambiamos los niveles de tamaño, forma y color de un punto para que el punto sea pequeño, triangular o azul.

Una estrategia

Podemos agregar la variable de class a la trama asignando los niveles de una Aesthetic (como el color) a los valores de class. Por ejemplo, podemos colorear un punto de verde si pertenece a la clase compacta, de azul si pertenece a la clase mediana, y así sucesivamente.

Probemos esto. Complete el código en blanco a continuación con color = class. ¿Lo que sucede? Elimine los símbolos de comentarios (#) antes de ejecutar su código. (Si prefiere inglés británico, puede usar colour en lugar de color).

ggplot(data = mpg) + 
   geom_point(mapping = aes(x = displ, y = hwy, color = class))

“Ahora puede saber qué clase de automóvil representa cada punto examinando el color del punto”.

Y la respuesta es…

Los colores revelan que muchos de los puntos inusuales en mpg son autos de dos plazas. ¡Estos autos no parecen híbridos y, de hecho, son autos deportivos! Los autos deportivos tienen motores grandes como los SUV y las camionetas, pero carrocerías pequeñas como los autos medianos y compactos, lo que mejora el rendimiento de la gasolina. En retrospectiva, era poco probable que estos autos fueran híbridos ya que tienen motores grandes.

Esta no es la única idea que hemos obtenido; también ha aprendido cómo agregar una nueva estética a su gráfico. Repasemos el proceso.

Mapeos Aesthetic

Para asignar una estética a una variable, establezca el nombre de la estética igual al nombre de la variable y hágalo dentro de mapping = aes(). ggplot2 asignará automáticamente un nivel único de la estética (aquí un color único) a cada valor único de la variable. **ggplot2+* también agregará una leyenda que explica qué niveles corresponden a qué valores.

Esta idea nos da una nueva forma de pensar sobre el argumento del mapeo. Las asignaciones le dicen a ggplot2 más que qué variables colocar en qué ejes, le dicen a ggplot2 qué variables asignar a qué propiedades visuales. Las ubicaciones x e y de cada punto son solo dos de las muchas propiedades visuales que muestra un punto.

Otras Aesthetic

En el ejemplo anterior, mapeamos el color a la class, pero podríamos haber mapeado el tamaño a la class de la misma manera.

Cambie el código a continuación para asignar el size a la class. ¿Lo que sucede?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, size = class))
## Warning: Using size for a discrete variable is not advised.

Advertencia: no se recomienda usar size para una variable discreta.

Ahora el tamaño de un punto representa su clase. ¿Te diste cuenta del mensaje de advertencia? ggplot2 nos da una advertencia aquí porque mapear una variable desordenada (class) a una Aesthetic ordenada (size) no es una buena idea”.

Alpha

También puede asignar la class a la estética alpha, que controla la transparencia de los puntos. Pruébalo a continuación.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, alpha = class))
## Warning: Using alpha for a discrete variable is not advised.

Advertencia: no se recomienda usar alpha para una variable discreta.

“Si observa detenidamente, puede detectar algo sutil: muchas ubicaciones contienen múltiples puntos apilados uno encima del otro (alfa es aditivo, por lo que múltiples puntos transparentes aparecerán opacos)”.

shape

Probemos una estética más. Esta vez mapee la clase de los puntos a shape, luego busque los SUV. ¿Qué sucedió?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, shape = class))
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 7. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 62 rows containing missing values (geom_point).

Advertencia: la paleta de shape puede tratar con un máximo de 6 valores discretos porque más de 6 se vuelve difícil de discriminar; tú tener 7. Considere especificar formas manualmente si debe tener a ellos.

Advertencia: Se eliminaron 62 filas que contenían valores faltantes (geom_point).

¿Qué pasó con los SUVs? ggplot2 solo usará seis formas a la vez. De forma predeterminada, los grupos adicionales no se trazarán cuando utilice la estética de la forma. Así que úsalo solo cuando tengas menos de siete grupos”.

Ejercicio 1

En el siguiente código, asigne cty, que es una variable continua, a color, size y shape. ¿Cómo se comportan estas Aesthetics de manera diferente para las variables continuas, como cty, frente a las variables categóricas, como la class?

# Map cty to color
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = cty))

# Map cty to size
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, size = cty))

# Map cty to shape
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, shape = class))
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 7. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 62 rows containing missing values (geom_point).

“ggplot2 trata las variables continuas y categóricas de manera diferente. En particular, ggplot2 proporciona un degradado azul cuando asigna una variable continua a color, y ggplot2 no asignará variables continuas a shape”.

Ejercicio 2

Asigne clase a color, size y shape, todo en el mismo gráfico. ¿Funciona?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class, size = class, shape = class))
## Warning: Using size for a discrete variable is not advised.
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 7. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 62 rows containing missing values (geom_point).

Advertencia: no se recomienda usar size para una variable discreta.

Advertencia: la paleta de shape puede tratar con un máximo de 6 valores discretos porque más de 6 se vuelve difícil de discriminar; tú tener 7. Considere especificar formas manualmente si debe tener a ellos.

Advertencia: Se eliminaron 62 filas que contenían valores faltantes (geom_point).

ggplot2 puede asignar la misma variable a múltiples Aesthetic”.

Ajuste aesthetics

¿Qué sucede si solo desea hacer que todos los puntos de su diagrama sean azules, como en el diagrama a continuación?

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

Puede hacer esto configurando la estética del color fuera de la función aes(), así

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

Setting vs. Mapping

La configuración funciona para cada aesthetic en ggplot2. Si desea establecer manualmente la estética en un valor en el espacio visual, establezca la aesthetic fuera de aes().

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue", shape = 3, alpha = 0.5)

Si desea asignar la Aesthetic a una variable en el espacio de datos, asigne la aesthetic dentro de aes().

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy, color = class, shape = fl, alpha = displ))

Resumen

Para cada Aesthetic, asocia el nombre de la aesthetic con una variable para mostrar, y lo hace dentro de aes().

Una vez que asigna una variable a una aesthetic, ggplot2 se encarga del resto. Selecciona una escala razonable para usar con la aesthetic y construye una leyenda que explica el mapeo entre niveles y valores. Para la aesthetic x e y, ggplot2 no crea una leyenda, pero crea una línea de eje con marcas y una etiqueta. La línea del eje actúa como una leyenda; explica el mapeo entre ubicaciones y valores.

Has experimentado con la aesthetic más común para los puntos: x, y, color, size, alpha y shape. Cada geom usa su propio conjunto de aesthetic (no esperaría que una línea tuviera una shape, por ejemplo). Para averiguar qué aesthetic usa un geom, abra su página de ayuda, p. ?geom_line.

Esto plantea una nueva pregunta que solo hemos repasado: ¿qué es una geom?

Objetos geométricos

Geomas

¿En qué se parecen estas dos gráficas?

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Ambas gráficas contienen la misma variable x, la misma variable y, y ambas describen los mismos datos. Pero las tramas no son idénticas. Cada gráfico utiliza un objeto visual diferente para representar los datos. En la sintaxis de ggplot2, decimos que usan diferentes geoms.

Un geom es el objeto geométrico que una gráfica usa para representar observaciones. La gente a menudo describe las graficas por el tipo de geom que utiliza la grafica. Por ejemplo, los gráficos de barras utilizan geometrías de barras, los gráficos de líneas utilizan geometrías de líneas, los diagramas de caja utilizan geometrías de diagramas de caja, etc. Los diagramas de dispersión rompen la tendencia; utilizan el punto geom.

Como vemos arriba, puede usar diferentes geoms para trazar los mismos datos. La gráfica de la izquierda usa la geom de puntos, y la gráfica de la derecha usa la geom suave, una línea suave ajustada a los datos.

Más sobre geomas

ggplot2 proporciona más de 30 funciones geom que puede usar para hacer gráficos, y los paquetes de extensión brindan aún más consulte aqui para obtener una muestra. Aprenderá a usar estos geoms para explorar datos en el manual de visualización de datos.

Hasta entonces, la mejor manera de obtener una descripción completa de los geoms disponibles es con la hoja de trucos ggplot2. Para obtener más información sobre cualquier geom individual, consulte su página de ayuda, e. g ?geom_suave.

Ejercicio 1

¿Qué geom usarías para dibujar un gráfico de líneas? ¿Un diagrama de caja? ¿Un histograma? ¿Un gráfico de áreas?

Ejercicio 2

¿Qué hace el argumento se de geom_smooth()? * Nada. se no es un argumento de geom_smooth() * elige un método para calcular la línea suave * controla si mostrar o no errores * Agrega o elimina una cinta de error estándar alrededor de la línea suave

Y la respuesta es…

Agrega o elimina una cinta de error estándar alrededor de la línea suave

Poniendolo todo junto

Las ideas que ha aprendido aquí: geomas, estética y la existencia implícita de un espacio de datos y un espacio visual se combinan para formar un sistema conocido como la gramática de los gráficos.

La gramática de los gráficos proporciona una forma sistemática de construir cualquier gráfico y es la base del paquete ggplot2. De hecho, las dos primeras letras de ggplot2 significan “Gramática de gráficos”.

El paquete ggplot2

¿Qué es un paquete?

A lo largo de este tutorial, me he referido a ggplot2 como un paquete. ¿Qué significa eso?

El lenguaje R se subdivide en paquetes, pequeñas colecciones de conjuntos de datos y funciones que se enfocan en una sola tarea. Las funciones que usamos en este tutorial provienen de uno de esos paquetes, el paquete ggplot2, que se enfoca en visualizar datos.

¿Qué debes saber sobre los paquetes?

Cuando instala R por primera vez, obtiene una pequeña colección de paquetes principales conocida como base R. Los paquetes restantes, hay más de 10,000 de ellos, son opcionales. No necesita instalarlos a menos que quiera usarlos.

ggplot2 es uno de estos paquetes opcionales, al igual que los otros paquetes que veremos en estos tutoriales. Algunas de las partes más populares y modernas de R vienen en los paquetes opcionales.

No necesita preocuparse por instalar paquetes en estos tutoriales. Cada tutorial viene con todos los paquetes que necesita preinstalados; así es como hacemos que los tutoriales sean fáciles de usar.

Sin embargo, es posible que algún día desee utilizar R fuera de estos tutoriales. Cuando llegue ese día, querrás recordar qué paquetes descargar para adquirir las funciones que usas aquí. A lo largo de los tutoriales, intentaré dejar lo más claro posible de dónde proviene cada función.

Si desea obtener más información sobre la instalación de paquetes R (o R o el IDE de RStudio), el video tutorial de configuración lo guiará a través del proceso de configuración de R en su propia computadora.

A dónde desde aquí ¡Felicidades! Puede usar la plantilla de código ggplot2 para trazar cualquier conjunto de datos de muchas maneras diferentes. A medida que comience a explorar datos, debe incorporar estas herramientas en su flujo de trabajo.

Hay mucho más en ggplot2 y visualización de datos de lo que hemos cubierto aquí. Si desea obtener más información sobre la visualización de datos con ggplot2, consulte el manual básico de RStudio sobre visualización de datos.

Sus nuevas habilidades de visualización de datos facilitarán el aprendizaje de otras partes de R, porque ahora puede visualizar los resultados de cualquier cambio que realice en los datos. pondrá estas habilidades en uso inmediato en el próximo tutorial, que le mostrará cómo extraer valores de conjuntos de datos, así como también cómo calcular nuevas variables y estadísticas de resumen de sus datos. Te veo allí.

Parte 2. Conceptos básicos de programación

Bienvenido a R.

R es más fácil de usar cuando sabes cómo funciona el lenguaje R. Este tutorial le enseñará el conocimiento previo implícito que informa cada pieza de código R. Aprenderás sobre:

  • funciones y sus argumentos

  • objetos

  • Tipos de datos básicos de R

  • Estructuras de datos básicas de R, incluidos vectores y listas

  • Sistema de paquete de R

Funciones

Ejecutar una función

¿Puedes usar la función sqrt() en el fragmento a continuación para calcular la raíz cuadrada de 962?

sqrt(962)
## [1] 31.01612

Código

Use el fragmento de código a continuación para examinar el código que ejecuta sqrt().

sqrt
## function (x)  .Primitive("sqrt")

Im

Compare el código en sqrt() con el código en otra función R, lm(). Examine el cuerpo del código de lm() en el fragmento a continuación.

lm
## function (formula, data, subset, weights, na.action, method = "qr", 
##     model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, 
##     contrasts = NULL, offset, ...) 
## {
##     ret.x <- x
##     ret.y <- y
##     cl <- match.call()
##     mf <- match.call(expand.dots = FALSE)
##     m <- match(c("formula", "data", "subset", "weights", "na.action", 
##         "offset"), names(mf), 0L)
##     mf <- mf[c(1L, m)]
##     mf$drop.unused.levels <- TRUE
##     mf[[1L]] <- quote(stats::model.frame)
##     mf <- eval(mf, parent.frame())
##     if (method == "model.frame") 
##         return(mf)
##     else if (method != "qr") 
##         warning(gettextf("method = '%s' is not supported. Using 'qr'", 
##             method), domain = NA)
##     mt <- attr(mf, "terms")
##     y <- model.response(mf, "numeric")
##     w <- as.vector(model.weights(mf))
##     if (!is.null(w) && !is.numeric(w)) 
##         stop("'weights' must be a numeric vector")
##     offset <- model.offset(mf)
##     mlm <- is.matrix(y)
##     ny <- if (mlm) 
##         nrow(y)
##     else length(y)
##     if (!is.null(offset)) {
##         if (!mlm) 
##             offset <- as.vector(offset)
##         if (NROW(offset) != ny) 
##             stop(gettextf("number of offsets is %d, should equal %d (number of observations)", 
##                 NROW(offset), ny), domain = NA)
##     }
##     if (is.empty.model(mt)) {
##         x <- NULL
##         z <- list(coefficients = if (mlm) matrix(NA_real_, 0, 
##             ncol(y)) else numeric(), residuals = y, fitted.values = 0 * 
##             y, weights = w, rank = 0L, df.residual = if (!is.null(w)) sum(w != 
##             0) else ny)
##         if (!is.null(offset)) {
##             z$fitted.values <- offset
##             z$residuals <- y - offset
##         }
##     }
##     else {
##         x <- model.matrix(mt, mf, contrasts)
##         z <- if (is.null(w)) 
##             lm.fit(x, y, offset = offset, singular.ok = singular.ok, 
##                 ...)
##         else lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
##             ...)
##     }
##     class(z) <- c(if (mlm) "mlm", "lm")
##     z$na.action <- attr(mf, "na.action")
##     z$offset <- offset
##     z$contrasts <- attr(x, "contrasts")
##     z$xlevels <- .getXlevels(mt, mf)
##     z$call <- cl
##     z$terms <- mt
##     if (model) 
##         z$model <- mf
##     if (ret.x) 
##         z$x <- x
##     if (ret.y) 
##         z$y <- y
##     if (!qr) 
##         z$qr <- NULL
##     z
## }
## <bytecode: 0x55625f2db138>
## <environment: namespace:stats>

páginas de ayuda

¡Guau! lm() ejecuta mucho código. ¿Qué hace? Abra la página de ayuda para lm() en el fragmento a continuación y descúbralo.

?lm

Comentarios de código

¿Qué crees que devolverá el trozo de abajo? Ejecútalo y verás. El resultado debería ser nada. R no ejecutará nada en una línea después de un símbolo #. Esto es útil porque le permite escribir comentarios legibles por humanos en su código: simplemente coloque los comentarios después de un #. Ahora elimine el # y vuelva a ejecutar el fragmento. Deberías ver un resultado.

# sqrt(961)

Argumentos

args()

rnorm() es una función que genera variables aleatorias a partir de una distribución normal. Encuentra los args de rnorm().

args(rnorm)
## function (n, mean = 0, sd = 1) 
## NULL

argumentos opcionales

¿Qué argumentos de la norma R son opcionales?

  • n
  • mean
  • sd

n no es un argumento opcional porque no tiene un valor predeterminado.

rnorm() 1

Utilice rnrom() para generar 100 valores normales aleatorios con una media de 100 y una desviación estándar de 15.

rnorm(100, mean = 100, sd = 50)
##   [1] 103.954171  24.594508 118.792154  81.224596  69.761257 197.533472
##   [7]  93.153469  68.364562  95.739243 194.363784  60.507842  64.285303
##  [13] 113.654864 146.661742  57.599636  57.825366 172.232291 103.580701
##  [19] 137.862027 110.437577 128.470551  84.136194 109.858005  52.225647
##  [25] 128.921170  52.748310  99.008032  34.969670  73.409312  65.351744
##  [31]  86.109157 132.290164 110.515231 127.382820  75.759356 118.152751
##  [37]  15.737209  43.288768 101.242810 119.346726 134.533082  90.189713
##  [43] 160.081828  81.120183 129.139160 125.831756 178.014183  40.585808
##  [49]  51.785432 140.001738 151.738709 135.507461 121.609184  89.994231
##  [55] 111.766186  68.914598  79.521431   6.577119 153.452511 135.465081
##  [61]  77.110360 120.651815 136.710923  78.116565  60.289644 139.416996
##  [67] 156.280011  90.240650 120.734389  97.259296 227.405387 101.389621
##  [73] 120.508287  51.524785 108.733560  54.513909  52.397957  97.055934
##  [79]  35.505191 130.188967 125.081094 187.979504  47.887043 115.941669
##  [85]  87.487089  40.084148 146.324528   2.642759 -35.721867 127.178863
##  [91] 158.548666  57.019769 113.283704 117.932011  97.130966 188.099152
##  [97]  26.836128  90.327176 141.803755  39.975717

Objetos

Nombres de objetos

Puede elegir casi cualquier nombre que desee para un objeto, siempre que el nombre no comience con un número o un carácter especial como **+, -, *, /, ^, !, @ o &**.

¿Cuáles de estos serían nombres de objetos válidos?

  • Este Dia
  • +1
  • vars
  • ^_^
  • Foo

Recuerde que los nombres más útiles le recordarán lo que puso en su objeto.

Usando objetos

En el fragmento de código a continuación, guarde los resultados de rnorm(100, mean = 100, sd = 15) en un objeto denominado data. Luego, en una nueva línea, llame a la función hist() en datos para trazar un histograma de los valores aleatorios.

data <- rnorm(100, mean = 100, sd = 15)
hist(data)

¿Y si?

¿Qué crees que pasaría si asignaras datos a un nuevo objeto llamado copia, como este? Ejecute el código y luego inspeccione los datos y la copia.

data <- rnorm(100, mean = 100, sd = 15)
copy <- data
data
##   [1] 110.19712  87.88431 102.39414  96.85539  69.84357  59.10809 104.39165
##   [8] 113.84841  75.29749  73.70425  72.75843 112.49671 103.90878  95.92621
##  [15] 100.57811 127.39286 100.87650 103.13407  82.78403  93.69960  70.63776
##  [22] 106.35512 117.70429 102.69486 106.77360 105.85788 117.67074 112.77664
##  [29] 104.45099  99.99477  97.17356 100.40544 106.57814  81.92643 126.21122
##  [36]  75.56711  90.69898 116.91133  94.40794 108.96924 115.95906  92.15456
##  [43] 106.42384 102.41659 134.13835 115.99052  96.68023 102.78798 104.78080
##  [50] 103.18655 100.93343  76.88969  98.73820 117.65914  80.40689 105.49704
##  [57] 118.92546  79.77319  89.90886 102.34442  98.74055 112.65319 128.18061
##  [64] 107.26622 115.54942  87.64594  83.92203 132.97503 108.46897 111.76883
##  [71]  71.66524 109.58887  80.12128  96.15834 101.14577  81.50438 105.43435
##  [78]  66.66655 116.28853  84.95609 112.43809 107.94359 112.21147  69.87652
##  [85] 105.02282  95.51183  99.19499  92.90507  76.81573 113.67799 112.75047
##  [92] 125.32956  76.84281  91.68446  85.06981  90.39265 105.65398 112.12259
##  [99]  92.65379 115.31466
copy
##   [1] 110.19712  87.88431 102.39414  96.85539  69.84357  59.10809 104.39165
##   [8] 113.84841  75.29749  73.70425  72.75843 112.49671 103.90878  95.92621
##  [15] 100.57811 127.39286 100.87650 103.13407  82.78403  93.69960  70.63776
##  [22] 106.35512 117.70429 102.69486 106.77360 105.85788 117.67074 112.77664
##  [29] 104.45099  99.99477  97.17356 100.40544 106.57814  81.92643 126.21122
##  [36]  75.56711  90.69898 116.91133  94.40794 108.96924 115.95906  92.15456
##  [43] 106.42384 102.41659 134.13835 115.99052  96.68023 102.78798 104.78080
##  [50] 103.18655 100.93343  76.88969  98.73820 117.65914  80.40689 105.49704
##  [57] 118.92546  79.77319  89.90886 102.34442  98.74055 112.65319 128.18061
##  [64] 107.26622 115.54942  87.64594  83.92203 132.97503 108.46897 111.76883
##  [71]  71.66524 109.58887  80.12128  96.15834 101.14577  81.50438 105.43435
##  [78]  66.66655 116.28853  84.95609 112.43809 107.94359 112.21147  69.87652
##  [85] 105.02282  95.51183  99.19499  92.90507  76.81573 113.67799 112.75047
##  [92] 125.32956  76.84281  91.68446  85.06981  90.39265 105.65398 112.12259
##  [99]  92.65379 115.31466

Conjuntos de datos

Los objetos proporcionan una manera fácil de almacenar conjuntos de datos en R. De hecho, R viene con muchos conjuntos de datos de juguetes precargados. Examine el contenido de iris para ver un conjunto de datos de juguete clásico. Pista: ¿cómo podrías aprender más sobre el objeto iris?

iris

rm()

¿Qué sucede si accidentalmente sobrescribe un objeto? Si ese objeto vino con R o uno de sus paquetes, puede restaurar la versión original del objeto eliminando su versión con rm(). Ejecute rm() en el iris a continuación para restaurar el conjunto de datos del iris.

iris <- 1
iris
## [1] 1
rm(iris)
iris

Vectores

Crear un vector

En el fragmento a continuación, cree un vector que contenga los números enteros del uno al diez.

c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
##  [1]  1  2  3  4  5  6  7  8  9 10

Si su vector contiene una secuencia de enteros contiguos, puede crearlo con el atajo :. Ejecuta 1:10 en el trozo de abajo. ¿Qué sacas? ¿Qué crees que devolvería 1:20?

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10

[]

Puede extraer cualquier elemento de un vector colocando un par de corchetes detrás del vector. Dentro de los corchetes, coloque el número del elemento que desea extraer. Por ejemplo, vec[3] devolvería el tercer elemento del vector llamado vec.

Use el fragmento a continuación para extraer el cuarto elemento de vec.

vec <- c(1, 2, 4, 8, 16)
vec[4]
## [1] 8

Más []

También puede usar [] para extraer múltiples elementos de un vector. Coloque el vector c(1,2,5) entre los corchetes de abajo. ¿Qué devuelve R?

vec <- c(1, 2, 4, 8, 16)
vec[c(1,2,5)]
## [1]  1  2 16

Nombres

Si los elementos de su vector tienen nombres, puede extraerlos por nombre. Para hacerlo, coloque un nombre o un vector de nombres entre paréntesis detrás de un vector. Rodee cada nombre con comillas, p. vec2[c(“alfa”, “beta”)].

Extrae el elemento llamado gamma del vector de abajo.

vec2 <- c(alpha = 1, beta = 2, gamma = 3)
vec2["gamma"]
## gamma 
##     3

operaciones vectorizadas

Prediga lo que devolverá el siguiente código. Luego mira el resultado.

c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
##  [1]  2  4  6  8 10 12 14 16 18 20

Reciclaje de vectores

Prediga lo que devolverá el siguiente código. Luego mira el resultado.

1 + c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
##  [1]  2  3  4  5  6  7  8  9 10 11

Tipos

tipos atómicos

¿Cuál de estos no es un tipo de datos atómicos? * raw * logical * simple * integer * complex * numeric/double * character

simple, correcto!

¿Que tipo?

¿Qué tipo de datos es “1L”?

  • numeric/double
  • integer
  • character
  • logical

Character, correcto!

Integers

Cree un vector de números enteros del uno al cinco. ¿Te imaginas por qué querrías usar números enteros en lugar de números/dobles?

c(1L, 2L, 3L, 4L, 5L)
## [1] 1 2 3 4 5

Aritmética de punto flotante

Las computadoras deben usar una cantidad finita de memoria para almacenar números decimales (lo que a veces puede requerir una precisión infinita). Como resultado, algunos decimales solo se pueden guardar como aproximaciones muy precisas. De vez en cuando notará los efectos secundarios de esta imprecisión, como se muestra a continuación.

Calcule la raíz cuadrada de dos, eleve el resultado al cuadrado (por ejemplo, multiplique la raíz cuadrada de dos por la raíz cuadrada de dos) y luego reste dos del resultado. ¿Qué respuesta esperas? ¿Qué respuesta obtienes?

sqrt(2) * sqrt(2) - 2
## [1] 4.440892e-16
sqrt(2)^2 - 2
## [1] 4.440892e-16

Vectores

¿Cuántos tipos de datos puedes poner en un solo vector?

  • 1
  • 6
  • Tantos como quieras

1, correcto!

¿Personaje u objeto?

Uno de los errores más comunes en R es llamar a un objeto cuando quieres llamar a una cadena de caracteres y viceversa.

¿Cuáles de estos son nombres de objetos? ¿Cuál es la diferencia entre nombres de objetos y cadenas de caracteres?

  • foo
  • “num”
  • mu
  • “sigma”
  • “data”
  • a

Las cadenas de caracteres están entre comillas, los nombres de los objetos no.

listas

Listas vs vectores

¿Qué estructura(s) de datos podría usar para almacenar estos datos en el mismo objeto? 1001, VERDADERO, “historias”.

  • un vector
  • una lista
  • ninguno de los dos

una lista, correcto!

Hacer una lista

Haz una lista que contenga los elementos 1001, VERDADERO y “historias”. Dale un nombre a cada elemento.

list(number = 1001, logical = TRUE, string = "stories")
## $number
## [1] 1001
## 
## $logical
## [1] TRUE
## 
## $string
## [1] "stories"

Extraer un elemento

Extraiga el número 1001 de la lista a continuación.

things <- list(number = 1001, logical = TRUE, string = "stories")
things$number
## [1] 1001

Marcos de datos

Puede crear un marco de datos con la función data.frame(), que funciona de manera similar a c() y list(). Reúna los vectores a continuación en un marco de datos con los nombres de columna números, lógicos, cadenas.

nums <- c(1, 2, 3, 4)
logs <- c(TRUE, TRUE, FALSE, TRUE)
strs <- c("apple", "banana", "carrot", "duck")
data.frame(numbers = nums, logicals = logs, strings = strs)

Paquetes

Un error común

¿Qué sugiere este mensaje de error común? el objeto _____ no existe.

  • Escribiste mal el nombre de tu objeto
  • Olvidaste cargar el paquete en el que viene ____
  • O o, correcto!

Cargar un paquete

En el fragmento de código a continuación, cargue el paquete tidyverse. Siempre que cargue un paquete, R también cargará todos los paquetes de los que depende el primer paquete. tidyverse aprovecha esto para crear un acceso directo para cargar varios paquetes comunes a la vez. Cada vez que carga tidyverse, tidyverse también carga ggplot2, dplyr, tibble, tidyr, readr y purrr.

# library(tidyverse)

Cotizaciones

¿Sabías que library() es una función especial en R? Puede pasarle a library() un nombre de paquete entre comillas, como library(“tidyverse”), o sin comillas, como library(tidyverse), ¡ambos funcionarán! A menudo, ese no es el caso con las funciones R.

En general, siempre debe usar comillas a menos que esté escribiendo el nombre de algo que ya está cargado en la memoria de R, como una función, un vector o un marco de datos.

Instalar paquetes

Pero, ¿qué sucede si el paquete que desea cargar no está instalado en su computadora? ¿Cómo instalaría el paquete dplyr en su propia computadora?

# install.packages("dplyr")

¡Felicidades!

Felicidades. Ahora tiene una idea formal de cómo funcionan los conceptos básicos de R. Aunque puede pensar en sí mismo como un científico de datos, esta breve formación en informática lo ayudará a medida que analiza los datos. Cada vez que R hace algo inesperado, puede aplicar su conocimiento de cómo funciona R para descubrir qué salió mal.

```