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.
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.
Este tutorial desmitifica la programación con R. Aquí, aprenderá cómo ejecutar funciones y construir objetos.
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:
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)
mpgEntre 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.
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?
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.
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_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))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.
Nuestro código sigue el flujo de trabajo común para hacer gráficos con ggplot2. Para hacer un gráfico, usted:
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))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.
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))
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.
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.
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=...)?
¿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”.
“El mayor valor de una imagen es cuando nos obliga a notar lo que nunca esperábamos ver”. — John Tukey
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))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.
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.
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”.
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.
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.
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”.
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)”.
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”.
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”.
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”.
¿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")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))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?
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.
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.
¿Qué geom usarías para dibujar un gráfico de líneas? ¿Un diagrama de caja? ¿Un histograma? ¿Un gráfico de áreas?
¿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
Agrega o elimina una cinta de error estándar alrededor de la línea suave
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”.
¿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í.
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
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.
?lmComentarios 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)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 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
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?
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?
irisrm()
¿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)
irisCrear 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 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”?
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, 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?
Las cadenas de caracteres están entre comillas, los nombres de los objetos no.
Listas vs vectores
¿Qué estructura(s) de datos podría usar para almacenar estos datos en el mismo objeto? 1001, VERDADERO, “historias”.
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)Un error común
¿Qué sugiere este mensaje de error común? el objeto _____ no existe.
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. 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.
```