R es un lenguaje de progración para computacion estadistica y ciencia de datos.
RStudio es una herramienta libre y open-source integrated development environment (IDE) para R. 1. Bajar e instalar R: http://cran.stat.sfu.ca/. 2. Bajar e instalar R Studio: : https://www.rstudio.com/products/rstudio/#Desktop.
Inspeccionaremos dos paquetes. - dplyr
: para
manipulacion de datos - ggplot2
: para visualización de
datos
Puedes instalar con código. (Ctrl + Enter
)
#install.packages("dplyr")
#install.packages("ggplot2")
Para ejecutar una línea de código, mueva el cursor a esa línea y
luego escriba Ctrl+Enter
. Por ejemplo:
# Presiona Ctrl-Enter.
print("Bienvenidos al curso Introductorio a R!")
## [1] "Bienvenidos al curso Introductorio a R!"
Para asignar valores a las variables, usamos <- – se puede obtener
más rápidamente con Alt+-
x <- 4
Comentar o eliminar el comentario de una línea de código, mueva el
cursor a esa línea y luego escriba Ctrl+Shift+C
. Por
ejemplo:
# print("Ctrl+Shift+C")
dplyr
and
ggplot2
En estadística, el análisis exploratorio de datos (EDA) es un enfoque para analizar conjuntos de datos para resumir sus características principales, a menudo con métodos visuales. —Wikipedia
EDA sirve para muchos propósitos, incluyendo:
EDA es importante porque brinda a los analistas una mejor idea sobre en qué deben enfocarse, o simplemente deciden detenerse si los datos no brindan ninguna información antes de que inviertan más recursos en ellos.
Para el ejemplo se explorará una estructura de datos y realizar un
EDA simple con los paquetes dplyr
y
ggplot2
,
Para dplyr
, hay 5 funciones principales:
select()
: obtener un subconjunto de columnasfilter()
: obtener un subconjunto de filasmutate()
: crear una nueva columnagroup_by()
: definir grupos según los valores en una o
más columnassummarise()
: reducir muchas filas a un único valor de
interés.Para ggplot2
:
ggplot()
mapping = aes(x, y)
en ggplot()
geom_
labels
Para cargar los paquetes para este taller.
library(dplyr)
library(ggplot2)
Los datos que usaremos se pueden encontrar aquí, [Kaggle: encuesta de salud mental en tecnología] (https://www.kaggle.com/osmi/mental-health-in-tech-survey)
Antes de intentar hacer algun modelo de prediccion, clasificacion u
otro análisis, primero debemos entender cómo se ven los datos. Veamos
las primeras filas de datos con head()
.
# cargando los datos
setwd("~/1_Introduccion_R/AgostoII2022")
mental_data <- read.csv('survey.csv')
# observando las primeras filas de los datos
head(mental_data)
## Timestamp Age Gender Country state self_employed
## 1 2014-08-27 11:29:31 37 Female United States IL <NA>
## 2 2014-08-27 11:29:37 44 M United States IN <NA>
## 3 2014-08-27 11:29:44 32 Male Canada <NA> <NA>
## 4 2014-08-27 11:29:46 31 Male United Kingdom <NA> <NA>
## 5 2014-08-27 11:30:22 31 Male United States TX <NA>
## 6 2014-08-27 11:31:22 33 Male United States TN <NA>
## family_history treatment work_interfere no_employees remote_work
## 1 No Yes Often 6-25 No
## 2 No No Rarely More than 1000 No
## 3 No No Rarely 6-25 No
## 4 Yes Yes Often 26-100 No
## 5 No No Never 100-500 Yes
## 6 Yes No Sometimes 6-25 No
## tech_company benefits care_options wellness_program seek_help anonymity
## 1 Yes Yes Not sure No Yes Yes
## 2 No Don't know No Don't know Don't know Don't know
## 3 Yes No No No No Don't know
## 4 Yes No Yes No No No
## 5 Yes Yes No Don't know Don't know Don't know
## 6 Yes Yes Not sure No Don't know Don't know
## leave mental_health_consequence phys_health_consequence
## 1 Somewhat easy No No
## 2 Don't know Maybe No
## 3 Somewhat difficult No No
## 4 Somewhat difficult Yes Yes
## 5 Don't know No No
## 6 Don't know No No
## coworkers supervisor mental_health_interview phys_health_interview
## 1 Some of them Yes No Maybe
## 2 No No No No
## 3 Yes Yes Yes Yes
## 4 Some of them No Maybe Maybe
## 5 Some of them Yes Yes Yes
## 6 Yes Yes No Maybe
## mental_vs_physical obs_consequence comments
## 1 Yes No <NA>
## 2 Don't know No <NA>
## 3 No No <NA>
## 4 No Yes <NA>
## 5 Don't know No <NA>
## 6 Don't know No <NA>
También podemos usar la función str()
para obtener una
vista general de los datos, que presentan muy bien el número de filas y
columnas, nombres de variables, tipos de datos y valores de
ejemplo..
str(mental_data)
## 'data.frame': 1259 obs. of 27 variables:
## $ Timestamp : chr "2014-08-27 11:29:31" "2014-08-27 11:29:37" "2014-08-27 11:29:44" "2014-08-27 11:29:46" ...
## $ Age : num 37 44 32 31 31 33 35 39 42 23 ...
## $ Gender : chr "Female" "M" "Male" "Male" ...
## $ Country : chr "United States" "United States" "Canada" "United Kingdom" ...
## $ state : chr "IL" "IN" NA NA ...
## $ self_employed : chr NA NA NA NA ...
## $ family_history : chr "No" "No" "No" "Yes" ...
## $ treatment : chr "Yes" "No" "No" "Yes" ...
## $ work_interfere : chr "Often" "Rarely" "Rarely" "Often" ...
## $ no_employees : chr "6-25" "More than 1000" "6-25" "26-100" ...
## $ remote_work : chr "No" "No" "No" "No" ...
## $ tech_company : chr "Yes" "No" "Yes" "Yes" ...
## $ benefits : chr "Yes" "Don't know" "No" "No" ...
## $ care_options : chr "Not sure" "No" "No" "Yes" ...
## $ wellness_program : chr "No" "Don't know" "No" "No" ...
## $ seek_help : chr "Yes" "Don't know" "No" "No" ...
## $ anonymity : chr "Yes" "Don't know" "Don't know" "No" ...
## $ leave : chr "Somewhat easy" "Don't know" "Somewhat difficult" "Somewhat difficult" ...
## $ mental_health_consequence: chr "No" "Maybe" "No" "Yes" ...
## $ phys_health_consequence : chr "No" "No" "No" "Yes" ...
## $ coworkers : chr "Some of them" "No" "Yes" "Some of them" ...
## $ supervisor : chr "Yes" "No" "Yes" "No" ...
## $ mental_health_interview : chr "No" "No" "Yes" "Maybe" ...
## $ phys_health_interview : chr "Maybe" "No" "Yes" "Maybe" ...
## $ mental_vs_physical : chr "Yes" "Don't know" "No" "No" ...
## $ obs_consequence : chr "No" "No" "No" "Yes" ...
## $ comments : chr NA NA NA NA ...
El summary()
también es útil para calcular estadísticas
de resumen rápidas de los datos.
# calcula estadisticas summary de las 6 primeras columnas
summary(mental_data[, 1:6])
## Timestamp Age Gender Country
## Length:1259 Min. :-1.726e+03 Length:1259 Length:1259
## Class :character 1st Qu.: 2.700e+01 Class :character Class :character
## Mode :character Median : 3.100e+01 Mode :character Mode :character
## Mean : 7.943e+07
## 3rd Qu.: 3.600e+01
## Max. : 1.000e+11
## state self_employed
## Length:1259 Length:1259
## Class :character Class :character
## Mode :character Mode :character
##
##
##
Para verificar datos. Por ejemplo, para comprobar si faltan valores, debe saber que los valores faltantes afectarían al análisis y es posible que deba solucionarlos mediante la eliminación o imputación (por ejemplo, imputación con la media).
# calcula el numero de NAs en cada columna
check_na <- function(x) {
return(colSums(is.na(x)))
}
check_na(mental_data)
## Timestamp Age Gender
## 0 0 0
## Country state self_employed
## 0 515 18
## family_history treatment work_interfere
## 0 0 264
## no_employees remote_work tech_company
## 0 0 0
## benefits care_options wellness_program
## 0 0 0
## seek_help anonymity leave
## 0 0 0
## mental_health_consequence phys_health_consequence coworkers
## 0 0 0
## supervisor mental_health_interview phys_health_interview
## 0 0 0
## mental_vs_physical obs_consequence comments
## 0 0 1095
Una buena práctica para el proceso de análisis exploratorio de datos es formular una pregunta y dejar que sea una guía a través del proceso. Ayuda a reducir el número de todas las rutas potenciales a un número manejable, lo que es extremadamente útil para conjuntos de datos de gran dimensión.
Para el ejemplo, intentamos responder a esta pregunta: > P: ¿Cómo se relaciona el grupo de edad, el sexo y el programa de bienestar del empleado de una persona con la probabilidad de buscar tratamiento para una afección de salud mental? Para responder a esta pregunta, necesitaríamos tener estas columnas:
Age
: la edad de la persona, en añosGender
: el género de la personawellness_program
: ¿el programa de bienestar de los
empleados incluye salud mental?treatment
: hacer que una persona busque tratamiento por
una condición de salud mentalselect()
select()
toma una lista de nombres de columnas y
devuelve un marco de datos pero solo con esas columnas. Veamos
select()
en acción con un marco de datos de juguete.
muestra <- data.frame(
paciente = c("Alicia", "Pedro", "Ivan", "Carola"),
enfermedad = c("Desorden Mental", "Depresion", "Desorden Mental", "Depresion"),
grado_enfermedad = c(1.5, 1.5, 0.1, 3),
edad = c(24, 22, 16, 30)
)
# un vistazo
muestra
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
## 2 Pedro Depresion 1.5 22
## 3 Ivan Desorden Mental 0.1 16
## 4 Carola Depresion 3.0 30
# seleccionar la columna disease
select(.data = muestra, enfermedad)
## enfermedad
## 1 Desorden Mental
## 2 Depresion
## 3 Desorden Mental
## 4 Depresion
Con el operador de canalización: %>%
, esto toma la
salida de la línea de código anterior y la pasa como el primer argumento
de la siguiente línea. El siguiente código se leería como “comenzar con
muestra
, luego select
enfermedad.
muestra %>%
select(enfermedad)
## enfermedad
## 1 Desorden Mental
## 2 Depresion
## 3 Desorden Mental
## 4 Depresion
age
y treatment
.Usando nuestro marco de datos de encuesta mental, seleccione solo las
columnas Edad
y tratamiento
.
mental_data %>%
select(Age,Gender,wellness_program,treatment
) %>%
head()
## Age Gender wellness_program treatment
## 1 37 Female No Yes
## 2 44 M Don't know No
## 3 32 Male No No
## 4 31 Male No Yes
## 5 31 Male Don't know No
## 6 33 Male No No
age
y
treatment
.Usando el anterior marco de trabajo se debe cambiar el nombre de columnas con la funcion colnames
mental_data %>%
select(Age,Gender,wellness_program,treatment) %>% rename(edad=Age,genero=Gender, programa_bienestar=wellness_program,tratamiento=treatment)%>%head()
## edad genero programa_bienestar tratamiento
## 1 37 Female No Yes
## 2 44 M Don't know No
## 3 32 Male No No
## 4 31 Male No Yes
## 5 31 Male Don't know No
## 6 33 Male No No
Excelente!!! . Ahora Con las 4 variables de interés y guárdelas en un nuevo marco de datos. (Aunque este paso no es necesario, facilitará el análisis de las variables que nos interesan. ¡Esto es más útil cuando el número total de variables del marco de datos original es grande!)
mental_data_selected <- mental_data %>%
select(
Age,Gender,wellness_program,treatment
) %>% rename(edad=Age,genero=Gender, programa_bienestar=wellness_program,tratamiento=treatment)
mental_data_selected %>%
head()
## edad genero programa_bienestar tratamiento
## 1 37 Female No Yes
## 2 44 M Don't know No
## 3 32 Male No No
## 4 31 Male No Yes
## 5 31 Male Don't know No
## 6 33 Male No No
filter()
Es común que sus datos contengan entradas de error o valores faltantes, y desee eliminarlos. O es posible que desee crear un subconjunto de filas que satisfagan algunas condiciones.
Podemos usar la función filter()
de dplyr
para hacer esto: mantiene solo las filas en un marco de datos que
coinciden con una condición. Por ejemplo:
muestra
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
## 2 Pedro Depresion 1.5 22
## 3 Ivan Desorden Mental 0.1 16
## 4 Carola Depresion 3.0 30
# Usar `==` para "iguales"
muestra %>%
filter(paciente == "Alicia")
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
# Mayor que `>`, menor que `<`.
muestra %>%
filter(edad > 23)
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
## 2 Carola Depresion 3.0 30
# Use `|` para "o".
muestra %>%
filter(paciente == "Pedro" | paciente == "Ivan")
## paciente enfermedad grado_enfermedad edad
## 1 Pedro Depresion 1.5 22
## 2 Ivan Desorden Mental 0.1 16
# En `filter()`, cada coma es tratado como "and". pero tambien puedes utilizar `&`.
muestra %>%
filter(paciente == "Pedro" | paciente == "Ivan",
enfermedad == "Fiebre")
## [1] paciente enfermedad grado_enfermedad edad
## <0 rows> (or 0-length row.names)
# Use `!` para negación.
muestra %>%
filter(edad != 22,
paciente != "Ivan")
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
## 2 Carola Depresion 3.0 30
Para ver un resumen de los datos se tiene
summary(mental_data_selected)
## edad genero programa_bienestar tratamiento
## Min. :-1.726e+03 Length:1259 Length:1259 Length:1259
## 1st Qu.: 2.700e+01 Class :character Class :character Class :character
## Median : 3.100e+01 Mode :character Mode :character Mode :character
## Mean : 7.943e+07
## 3rd Qu.: 3.600e+01
## Max. : 1.000e+11
str(mental_data_selected)
## 'data.frame': 1259 obs. of 4 variables:
## $ edad : num 37 44 32 31 31 33 35 39 42 23 ...
## $ genero : chr "Female" "M" "Male" "Male" ...
## $ programa_bienestar: chr "No" "Don't know" "No" "No" ...
## $ tratamiento : chr "Yes" "No" "No" "Yes" ...
edad
aquellos que no
tienen sentido.Puede esperar que la ‘Edad’ de las personas oscile entre 0 y 90, y las que están fuera del rango pueden ser tratadas como valores atípicos. Ahora comprobamos si hay observaciones fuera de este rango.
# filtrar filas donde la edad `edad < 0`
mental_data_selected %>%
filter(edad <0
# answer here
)
# filtrar filas donde la edad `edad > 900`
mental_data_selected %>%
filter(edad>90
# answer here
)
Para realizar un grafico basico
boxplot(mental_data_selected$edad)
En el fragmento de código a continuación, elimino las filas donde
edad
es mayor que 90 o menor que 0.
mental_data_filtered <- mental_data_selected %>%
filter(edad < 90 & edad > 0)
boxplot(mental_data_filtered$edad)
Verifiquemos la cantidad de filas que se eliminan, y debería ser 5.
paste("numero de filas borradas:",
nrow(mental_data_selected) - nrow(mental_data_filtered))
## [1] "numero de filas borradas: 5"
mutate()
A continuación, vamos a crear una columna que nos diga cuál era el grupo de edad de la persona, “0-24”, “25-34” y “35+”.
Usaremos la función mutate()
y la columna
edad
para agregar los resultados.
Veamos los siguientes ejemplos:
muestra
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
## 2 Pedro Depresion 1.5 22
## 3 Ivan Desorden Mental 0.1 16
## 4 Carola Depresion 3.0 30
# We can fill our new column with whatever we like!
muestra %>%
mutate(new_column = "hello!")
## paciente enfermedad grado_enfermedad edad new_column
## 1 Alicia Desorden Mental 1.5 24 hello!
## 2 Pedro Depresion 1.5 22 hello!
## 3 Ivan Desorden Mental 0.1 16 hello!
## 4 Carola Depresion 3.0 30 hello!
muestra %>%
mutate(new_column = 2018)
## paciente enfermedad grado_enfermedad edad new_column
## 1 Alicia Desorden Mental 1.5 24 2018
## 2 Pedro Depresion 1.5 22 2018
## 3 Ivan Desorden Mental 0.1 16 2018
## 4 Carola Depresion 3.0 30 2018
Incluso podemos usar las otras columnas para determinar el contenido de la nueva. Calculemos cuándo se le diagnosticó la enfermedad a la persona por primera vez.
# nice! we get the `first_diagnosed` time
muestra %>%
mutate(primer_diagnostico = edad - grado_enfermedad)
## paciente enfermedad grado_enfermedad edad primer_diagnostico
## 1 Alicia Desorden Mental 1.5 24 22.5
## 2 Pedro Depresion 1.5 22 20.5
## 3 Ivan Desorden Mental 0.1 16 15.9
## 4 Carola Depresion 3.0 30 27.0
edad
Use mutate()
y edad
para calcular el
máximo, el mínimo y la media llamados max_edad
,
min_edad
y mean_edad
.
Sugerencia: utilice las funciones max()
,
min()
y mean()
. Puede usar ?max
para buscar la documentación.
mental_data_filtered %>%
mutate(max_edad=max(edad), min_edad=min(edad), mean_edad=mean(edad)
) %>%
head()
Para responder a nuestra pregunta inicial, necesitaremos usar otra
función case_when()
.
case_when()
toma una serie de fórmulas de dos lados. El
lado izquierdo de cada fórmula es una condición y el lado derecho es el
resultado deseado. Por ejemplo:
cool_values <- c(TRUE, FALSE, FALSE)
cool_values
## [1] TRUE FALSE FALSE
case_when(
cool_values == TRUE ~ "Aqui es verdadero!",
cool_values == FALSE ~ "que paso?"
)
## [1] "Aqui es verdadero!" "que paso?" "que paso?"
cool_numbers <- c(1,2,3,4,5,6,7,8,9,10)
cool_numbers
## [1] 1 2 3 4 5 6 7 8 9 10
case_when(
cool_numbers < 5 ~ "small",
cool_numbers > 5 ~ "BIG!!!!",
TRUE ~ "default_value"
)
## [1] "small" "small" "small" "small"
## [5] "default_value" "BIG!!!!" "BIG!!!!" "BIG!!!!"
## [9] "BIG!!!!" "BIG!!!!"
Ahora, vamos a usar case_when()
dentro de
mutate()
para crear una nueva columna que nos diga si la
edad de la persona estaba en los grupos que nos interesan:
# Guarda el resultado en nuevo df llamado `mental_data_mutated`.
mental_data_mutated <- mental_data_filtered %>%
mutate(
GrupoEdad = case_when(
edad < 25 ~ "0-24",
edad >= 25 & edad < 35 ~ "25-34",
edad >= 35 ~ "35+"
)
)
# para ver datos
mental_data_mutated %>%
head()
## edad genero programa_bienestar tratamiento GrupoEdad
## 1 37 Female No Yes 35+
## 2 44 M Don't know No 35+
## 3 32 Male No No 25-34
## 4 31 Male No Yes 25-34
## 5 31 Male Don't know No 25-34
## 6 33 Male No No 25-34
group_by()
y summarise()
Ahora necesitamos calcular la proporción de personas que buscaron tratamiento en diferentes géneros.
Para ello, podemos utilizar dos funciones:
group_by()
: especifica qué variable(s) desea usar para
calcular resúmenes dentrosummarise()
: reduce el marco de datos a una sola fila
por grupo, creando una columna con cualquier valor de resumen que
especifiqueVeamos algunos ejemplos:
muestra
## paciente enfermedad grado_enfermedad edad
## 1 Alicia Desorden Mental 1.5 24
## 2 Pedro Depresion 1.5 22
## 3 Ivan Desorden Mental 0.1 16
## 4 Carola Depresion 3.0 30
# Usar`summarise` para calcular
# un resumen estadistico
muestra %>%
summarise(mean_edad = mean(edad))
## mean_edad
## 1 23
# Se puede usar `group_by` y `summarise`
# para calcular la media por edad por cada enfermedad
muestra %>%
group_by(enfermedad) %>%
summarise(mean_age = mean(edad))
## # A tibble: 2 × 2
## enfermedad mean_age
## <chr> <dbl>
## 1 Depresion 26
## 2 Desorden Mental 20
#o extraer el maximo y minimo de la edad
muestra %>%
group_by(enfermedad) %>%
summarise(
min_age = min(edad),
max_age = max(edad)
)
## # A tibble: 2 × 3
## enfermedad min_age max_age
## <chr> <dbl> <dbl>
## 1 Depresion 22 30
## 2 Desorden Mental 16 24
Ahora, calculemos la edad promedio de las personas que buscaron tratamiento y de las que no.
mental_data_mutated %>%
group_by(
tratamiento
) %>%
summarise(
edad_promedio=mean(edad)
)
Para calcular la proporción de personas que buscaron tratamiento en
diferentes géneros, primero debemos codificar los valores de
tratamiento
de Yes
y No
a TRUE y
FALSE. Podemos hacer esto usando mutate()
con
case_when()
.
mental_data_mutated <- mental_data_mutated %>%
mutate(tratamiento = case_when(
tratamiento == "Yes" ~ TRUE,
tratamiento == "No" ~ FALSE
))
Ahora podemos calcular el resumen agrupando genero
y
tomar la media de tratamiento
mental_data_summarised <- mental_data_mutated %>%
group_by(genero) %>%
summarise(proporcion_tratamiento = mean(tratamiento))
mental_data_summarised
## # A tibble: 47 × 2
## genero proporcion_tratamiento
## <chr> <dbl>
## 1 A little about you 1
## 2 Agender 1
## 3 Androgyne 1
## 4 cis-female/femme 1
## 5 Cis Female 1
## 6 cis male 0
## 7 Cis Male 1
## 8 Cis Man 1
## 9 Enby 1
## 10 f 0.6
## # … with 37 more rows
## # ℹ Use `print(n = ...)` to see more rows
ggplot2
El paquete ggplot2
es la mejor manera de crear
visualizaciones en R, basado en The Grammar of Graphics. El
código para cada visualización viene en dos partes principales:
tratamiento
al eje x
y edad
al eje y.Para iniciar una visualización, necesitamos usar
ggplot()
, que ayuda a configurar un gráfico. Sin embargo,
este solo iniciará un espacio en blanco si lo llamamos solo.
Necesitamos mapear diferentes variables en diferentes estéticas, y lo
más importante, el eje. Para configurar el eje, usamos el argumento
mapping = aes(x, y)
. Aquí, pongamos el tratamiento en el
eje x y la edad en el eje y.
mental_data_mutated %>%
ggplot(mapping = aes(x = tratamiento, y = edad))
Después de configurar el eje, debemos decidir el objeto geométrico. En este caso, usaríamos el diagrama de caja.
mental_data_mutated %>%
ggplot(mapping = aes(x = tratamiento, y = edad)) +
geom_boxplot()
Para que la gráfica sea más descriptiva, agregaremos un título y
etiquetas para los ejes x e y.
mental_data_mutated %>%
ggplot(mapping = aes(x = tratamiento, y = edad)) +
geom_boxplot() +
labs(title = "Box-plot de edad por diferentes grupos de tratamientos",
# solo para ilustracion
x = "tratamiento",
y = "edad")
> Conclusion1: Parece que las personas más jóvenes tienen menos
probabilidades de tener problemas mentales.
Además del diagrama de caja, hay otros objetos geom_
útiles para EDA:
geom_point()
: diagrama de dispersión; útiles dos
variables cuantitativasgeom_bar()
y geom_col
: gráfico de barras;
geom_bar()
automáticamente cuenta el número de x como
valores de y. Para proporcionar sus propios valores de y, usamos
geom_col()
.geom_histogram()
y geom_density()
:
diagrama de histograma y densidad; útil para visualizar la distribución
de variables continuas.Veamos de nuevo la distribución por edades para diferentes
tratamientos, pero esta vez con geom_histogram
, y
dividiendo el gráfico en dos paneles con facet_wrap
.
Consejos: Para hacer el gráfico más bonito, podemos proporcionar la variable
GrupoEdad
al argumentofill
, lo que significa rellenar las barras con diferentes colores.
mental_data_mutated %>%
ggplot(mapping = aes(x = edad, fill = tratamiento)) +
geom_histogram() +
facet_wrap(~ tratamiento) +
labs(title = "Histograma de edad para diferentes tratameintos")
Ahora, intentemos usar geom_col()
para visualizar los
datos para diferentes géneros.
mental_data_summarised %>% filter(genero=='female' | genero=='male') %>%
ggplot(mapping = aes(x = genero, y = proporcion_tratamiento, fill = genero)) +
geom_col() +
labs(title = "Proporcion de personas con condiciones mentales por generos diferentes",
y = "proporcion de condicion mental")
Conclusion2: Las mujeres son mucho más propensas a tener problemas mentales, mientras que los hombres tienen menos probabilidades de tener problemas.
Aunque estas afirmaciones pueden no ser estadísticamente significativas, lo llevan a verificar la relación en análisis futuros.
programa_bienestar
y tratamiento
Sugerencia: es posible que deba ‘summarize’ el programa de bienestar de manera similar a Género.
mental_data_mutated %>%
# analsiis
ggplot()
head()
, str()
, summary()
para tener una idea de los datos