En R, puedes cargar datos desde archivos externos como .csv, .txt,
.xls o .xlsx. Para cargar un archivo .csv, puedes usar la función
read.csv()
o read.csv2()
.
Vamos a cargar los datos de tres archivos que utilizaremos en este documento:
diabetes.csv
: Datos de una población de mujeres de la
etnia Pima en Arizona.# Cargar datos desde archivo .csv
diabetes <- read.csv("diabetes.csv")
head(diabetes)
## Pregnancies Glucose BloodPressure SkinThickness Insulin BMI
## 1 6 148 72 35 0 33.6
## 2 1 85 66 29 0 26.6
## 3 8 183 64 0 0 23.3
## 4 1 89 66 23 94 28.1
## 5 0 137 40 35 168 43.1
## 6 5 116 74 0 0 25.6
## DiabetesPedigreeFunction Age Outcome
## 1 0.627 50 1
## 2 0.351 31 0
## 3 0.672 32 1
## 4 0.167 21 0
## 5 2.288 33 1
## 6 0.201 30 0
calcio-ratas.csv
: Datos de un estudio sobre el efecto
de estrógenos sobre el calcio plasmático en ratas.# Cargar datos desde archivo .csv
calcio_ratas <- read.csv("calcio-ratas.csv")
head(calcio_ratas)
## caplasma hormona sexo
## 1 16.3 no hembra
## 2 20.4 no hembra
## 3 12.4 no hembra
## 4 15.8 no hembra
## 5 9.5 no hembra
## 6 15.3 no macho
melocactus.xlsx
: Datos de un estudio sobre una
población de Melocactus intortus en Guánica, Puerto Rico.# Cargar datos desde archivo .xlsx
library(readxl)
melocactus <- read_excel("melocactus.xlsx", sheet = "2019")
head(melocactus)
## # A tibble: 6 × 7
## grupo planta_id azimuto distancia altura_planta long_inflo estado
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 N 1 35 6.22 51 17 E
## 2 N 2 35 6.22 24 10 X
## 3 N 3 35 6.22 3 0 E
## 4 N 4 25 6.67 20 20 X
## 5 N 5 25 4.53 36 9 S
## 6 N 6 24 4.53 8 0 E
diabetes.csv
Utilizaremos el paquete tidyverse
para limpiar,
seleccionar, filtrar y transformar los datos del archivo
diabetes.csv
. Permite el uso de funciones como
select()
, filter()
, mutate()
,
rename()
, entre otras y la concatenación de operaciones con
el operador %>%
.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Cambiar nombres de columnas
diabetes1 <- diabetes %>%
rename(
edad = Age,
embarazos = Pregnancies,
glucosa = Glucose,
presion = BloodPressure,
pliegues = SkinThickness,
insulina = Insulin,
imc = BMI,
gen_diabetes = DiabetesPedigreeFunction,
edad_diagnostico = Age,
diabetes = Outcome
)
head(diabetes1)
## embarazos glucosa presion pliegues insulina imc gen_diabetes
## 1 6 148 72 35 0 33.6 0.627
## 2 1 85 66 29 0 26.6 0.351
## 3 8 183 64 0 0 23.3 0.672
## 4 1 89 66 23 94 28.1 0.167
## 5 0 137 40 35 168 43.1 2.288
## 6 5 116 74 0 0 25.6 0.201
## edad_diagnostico diabetes
## 1 50 1
## 2 31 0
## 3 32 1
## 4 21 0
## 5 33 1
## 6 30 0
Vamos a seleccionar las columnas que tengan información sobre glucosa, insulina, pedigree de diabetes y diagnóstico.
# Seleccionar columnas
diabetes2 <- diabetes1 %>%
select(glucosa, insulina, gen_diabetes, diabetes)
head(diabetes2)
## glucosa insulina gen_diabetes diabetes
## 1 148 0 0.627 1
## 2 85 0 0.351 0
## 3 183 0 0.672 1
## 4 89 94 0.167 0
## 5 137 168 2.288 1
## 6 116 0 0.201 0
Vamos a crear dos nuevos conjuntos de datos: uno de las diagnosticadas con diabetes y otro de las no diagnosticadas.
# Filtrar datos de acuerdo al diagnóstico de diabetes
diabetes_diagnosticadas <- diabetes1 %>%
filter(diabetes == 1)
diabetes_no_diagnosticadas <- diabetes1 %>%
filter(diabetes == 0)
# guardar en archivos .csv sin numero de fila
write.csv(diabetes_diagnosticadas, "diabetes_diagnosticadas.csv", row.names = FALSE)
write.csv(diabetes_no_diagnosticadas, "diabetes_no_diagnosticadas.csv", row.names = FALSE)
Vamos a crear la variable índice glucosa/insulina.
# Crear nueva variable sin tomar en cuenta valores de insulina y glucosa iguales a 0
diabetes3 <- diabetes1 %>%
filter(insulina != 0 & glucosa != 0) %>%
mutate(indice_gi = glucosa / insulina)
head(diabetes3)
## embarazos glucosa presion pliegues insulina imc gen_diabetes
## 1 1 89 66 23 94 28.1 0.167
## 2 0 137 40 35 168 43.1 2.288
## 3 3 78 50 32 88 31.0 0.248
## 4 2 197 70 45 543 30.5 0.158
## 5 1 189 60 23 846 30.1 0.398
## 6 5 166 72 19 175 25.8 0.587
## edad_diagnostico diabetes indice_gi
## 1 21 0 0.9468085
## 2 33 1 0.8154762
## 3 26 1 0.8863636
## 4 53 1 0.3627993
## 5 59 1 0.2234043
## 6 51 1 0.9485714
diabetes.csv
Vamos a calcular las estadísticas descriptivas - media y desviación estándar - de las variables glucosa e insulina agrupadas por el diagnóstico de diabetes. En cada caso vamos a filtrar los datos que sean ceros.
# Estadísticas descriptivas de glucosa e insulina por diagnóstico de diabetes
estadisticas_diabetes <- diabetes1 %>%
filter(glucosa != 0 & insulina != 0) %>%
group_by(diabetes) %>%
summarise(
media_glucosa = mean(glucosa),
desviacion_glucosa = sd(glucosa),
media_insulina = mean(insulina),
desviacion_insulina = round(sd(insulina),1)
)
estadisticas_diabetes
## # A tibble: 2 × 5
## diabetes media_glucosa desviacion_glucosa media_insulina desviacion_insulina
## <int> <dbl> <dbl> <dbl> <dbl>
## 1 0 111. 24.6 131. 102.
## 2 1 145. 29.8 207. 133.
Vamos a crear una tabla gt
con los resultados
# tabla con gt cambiando los nombres
library(gt)
estadisticas_diabetes %>%
gt() %>%
tab_header(
title = "Tabla 1. Estadísticas de Glucosa e Insulina por Diagnóstico de Diabetes. Datos de mujeres de la etnia Pima en Arizona"
) %>%
cols_label(
diabetes = "Diagnóstico",
media_glucosa = "Media Glucosa",
desviacion_glucosa = "D. E. Glucosa",
media_insulina = "Media Insulina",
desviacion_insulina = "D. E. Insulina"
)
Tabla 1. Estadísticas de Glucosa e Insulina por Diagnóstico de Diabetes. Datos de mujeres de la etnia Pima en Arizona | ||||
Diagnóstico | Media Glucosa | D. E. Glucosa | Media Insulina | D. E. Insulina |
---|---|---|---|---|
0 | 111.4563 | 24.59840 | 130.6958 | 102.5 |
1 | 145.1923 | 29.83939 | 206.8462 | 132.7 |
gt
.calcio-ratas.csv
Vamos a crear una tabla agrupando por hormona y sexo y calculando la media y desviación estándar del calcio plasmático.
# Estadísticas descriptivas de calcio plasmático por hormona y sexo
estadisticas_calcio <- calcio_ratas %>%
group_by(hormona, sexo) %>%
summarise(
media_calcio = mean(caplasma),
desviacion_calcio = sd(caplasma)
) %>%
ungroup()
## `summarise()` has grouped output by 'hormona'. You can override using the
## `.groups` argument.
estadisticas_calcio
## # A tibble: 4 × 4
## hormona sexo media_calcio desviacion_calcio
## <chr> <chr> <dbl> <dbl>
## 1 no hembra 14.9 4.14
## 2 no macho 12.1 4.25
## 3 si hembra 32.5 4.67
## 4 si macho 27.8 4.29
Crear una tabla gt
con los resultados
# tabla con gt cambiando los nombres
estadisticas_calcio %>%
gt() %>%
tab_header(
title = "Tabla 2. Estadísticas de Calcio Plasmático por Hormona y Sexo. Datos de un estudio sobre el efecto de estrógenos sobre el calcio plasmático en ratas"
) %>%
cols_label(
sexo = "Sexo",
hormona = "Hormona",
media_calcio = "Media Calcio",
desviacion_calcio = "D. E. Calcio"
)
Tabla 2. Estadísticas de Calcio Plasmático por Hormona y Sexo. Datos de un estudio sobre el efecto de estrógenos sobre el calcio plasmático en ratas | |||
Hormona | Sexo | Media Calcio | D. E. Calcio |
---|---|---|---|
no | hembra | 14.88 | 4.136061 |
no | macho | 12.12 | 4.247588 |
si | hembra | 32.52 | 4.670867 |
si | macho | 27.78 | 4.287423 |
gt
. La fórmula para el error estándar de la media
es sd(caplasma) / sqrt(n())
.melocactus.xlsx
Vamos a crear las variables coordX y coordY a partir de la variables azimuto y distancia, utilizando las fórmulas:
El azimuto está en grados, por lo que debemos convertirlo a radianes mediante la fórmula:
También vamos a sumar 100 a las coordenadas para que no sean negativas.
# Crear nuevas variables coordX y coordY
melocactus1 <- melocactus %>%
mutate(
radianes = azimuto * pi / 180,
coordX = distancia * sin(radianes) + 100,
coordY = distancia * cos(radianes) + 100
)
head(melocactus1)
## # A tibble: 6 × 10
## grupo planta_id azimuto distancia altura_planta long_inflo estado radianes
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
## 1 N 1 35 6.22 51 17 E 0.611
## 2 N 2 35 6.22 24 10 X 0.611
## 3 N 3 35 6.22 3 0 E 0.611
## 4 N 4 25 6.67 20 20 X 0.436
## 5 N 5 25 4.53 36 9 S 0.436
## 6 N 6 24 4.53 8 0 E 0.419
## # ℹ 2 more variables: coordX <dbl>, coordY <dbl>
Vamos a filtrar los datos para que solo incluyan las plantas que tienen inflorescencia con longitud mayor que 0.
# Filtrar datos para inflorescencias con longitud mayor que 0
melocactus2 <- melocactus1 %>%
filter(long_inflo > 0)
head(melocactus2)
## # A tibble: 6 × 10
## grupo planta_id azimuto distancia altura_planta long_inflo estado radianes
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
## 1 N 1 35 6.22 51 17 E 0.611
## 2 N 2 35 6.22 24 10 X 0.611
## 3 N 4 25 6.67 20 20 X 0.436
## 4 N 5 25 4.53 36 9 S 0.436
## 5 N 9 343 6.54 47 11 E 5.99
## 6 N 12 344 1.34 6 1 X 6.00
## # ℹ 2 more variables: coordX <dbl>, coordY <dbl>
melocactus.xlsx
Obtener las proporciones de plantas sanas (S), enfermas (E) y muertas (X) en la población.
# Estadísticas descriptivas de estado de las plantas
estadisticas_melocactus <- melocactus1 %>%
group_by(estado) %>%
summarise(
prop = n() / nrow(melocactus1)
) %>%
ungroup()
estadisticas_melocactus
## # A tibble: 3 × 2
## estado prop
## <chr> <dbl>
## 1 E 0.256
## 2 S 0.52
## 3 X 0.224
# cambiar nombres de estado
estadisticas_melocactus <- estadisticas_melocactus %>%
mutate(
estado = case_when(
estado == "E" ~ "Enfermas",
estado == "S" ~ "Sanas",
estado == "X" ~ "Muertas"
)
)
Crear una tabla gt
con los resultados
# tabla con gt cambiando los nombres
estadisticas_melocactus %>%
gt() %>%
tab_header(
title = "Tabla 3. Proporción de Plantas Sanas, Enfermas y Muertas. Datos de un estudio sobre una población de *Melocactus intortus* en Guánica, Puerto Rico"
) %>%
cols_label(
estado = "Estado",
prop = "Proporción"
)
Tabla 3. Proporción de Plantas Sanas, Enfermas y Muertas. Datos de un estudio sobre una población de *Melocactus intortus* en Guánica, Puerto Rico | |
Estado | Proporción |
---|---|
Enfermas | 0.256 |
Sanas | 0.520 |
Muertas | 0.224 |
table()
para contar las plantas por
estado.diabetes.csv
Vamos a crear un histograma para las variables glucosa e insulina.
Usaremos el paquete ggplot2
para crear gráficos. El archivo
que usaremos es diabetes3
que está filtrado para valores de
cero.
# Histograma de glucosa
library(ggplot2)
hist_gluco <- ggplot(diabetes3, aes(x = glucosa)) +
geom_histogram(fill = "skyblue", color = "black", bins = 20) +
labs(
x = "Glucosa",
y = "Frecuencia"
)
hist_gluco
Figura 1. Histograma de glucosa. Datos de mujeres de la etnia Pima en Arizona.
# Histograma de insulina
hist_insulina <- ggplot(diabetes3, aes(x = insulina)) +
geom_histogram(fill = "lightgreen", color = "black", bins = 20) +
labs(
x = "Insulina",
y = "Frecuencia"
)
hist_insulina
Figura 2. Histograma de insulina. Datos de mujeres de la etnia Pima en Arizona.
Vamos a crear un gráfico de dispersión para las variables glucosa e insulina.
# Gráfico de dispersión de glucosa e insulina
scatter_gluco_insulina <- ggplot(diabetes3, aes(x = glucosa, y = insulina)) +
geom_point(color = "darkred") +
labs(
x = "Glucosa",
y = "Insulina"
)
scatter_gluco_insulina
Figura 3. Gráfico de Dispersión de Glucosa e Insulina. Datos de mujeres de la etnia Pima en Arizona.
calcio-ratas.csv
Vamos a crear una gráfica de barras separadas para el calcio plasmático por hormona y sexo. Incluiremos el error estándar de la media.
# Gráfica de barras separadas de calcio plasmático por hormona y sexo usando los datos de calcio-ratas.csv
bar_calcio <- ggplot(estadisticas_calcio, aes(x = hormona, y = media_calcio, fill = sexo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_errorbar(aes(ymin = media_calcio - desviacion_calcio, ymax = media_calcio + desviacion_calcio), width = 0.2, position = position_dodge(0.9)) +
labs(
x = "Hormona",
y = "Media Calcio"
) +
scale_fill_manual(values = c("darkblue", "darkred"))
bar_calcio
Figura 4. Gráfica de Barras de Calcio Plasmático por Hormona y Sexo. Datos de un estudio sobre el efecto de estrógenos sobre el calcio plasmático en ratas.
Vamos a crear una gráfica de cajas para el calcio plasmático por hormona y sexo.
# Gráfica de cajas de calcio plasmático por hormona y sexo
box_calcio <- ggplot(calcio_ratas, aes(x = hormona, y = caplasma, fill = sexo)) +
geom_boxplot() +
labs(
x = "Hormona",
y = "Calcio Plasmático"
) +
scale_fill_manual(values = c("lightblue", "orange"))
box_calcio
Figura 5. Gráfica de Cajas de Calcio Plasmático por Hormona y Sexo. Datos de un estudio sobre el efecto de estrógenos sobre el calcio plasmático en ratas.
melocactus.xlsx
Vamos a crear un mapa de ubicación de las plantas de Melocactus intortus en Guánica, Puerto Rico.
melo = ggplot(melocactus1, aes(coordX, coordY, color = estado, size = altura_planta)) +
geom_point()
melo
Figura 6. Mapa de Ubicación de Plantas de Melocactus intortus en Guánica, Puerto Rico. Incluye información sobre el estado de las plantas y la altura de las plantas.
Vamos a crear un gráfico de dispersión para la altura de las plantas y la longitud de la inflorescencia.
scatter_altura_inflo <- ggplot(melocactus2, aes(x = altura_planta, y = long_inflo, color = estado)) +
geom_point() +
labs(
title = "Gráfico de Dispersión de Altura de Plantas y Longitud de Inflorescencia",
x = "Altura de Planta",
y = "Longitud de Inflorescencia"
) +
scale_color_manual(values = c("darkgreen", "darkblue", "darkred"))
scatter_altura_inflo
Figura 8. Gráfico de Dispersión de Altura de Plantas y Longitud de Inflorescencia. Datos de un estudio sobre una población de Melocactus intortus en Guánica, Puerto Rico.
Vamos a crear una gráfica de barras para la altura promedio de las plantas por estado y su error estándar.
# Gráfica de barras de altura promedio por estado
bar_altura <- ggplot(melocactus2, aes(x = estado, y = altura_planta, fill = estado)) +
geom_bar(stat = "summary", fun = "mean", position = "dodge") +
geom_errorbar(stat = "summary", fun.data = "mean_se", position = position_dodge(0.9)) +
labs(
x = "Estado",
y = "Altura Promedio"
) +
scale_fill_manual(values = c("darkgreen", "darkblue", "darkred"))
bar_altura
Figura 9. Gráfica de Barras de Altura Promedio por Estado. Datos de un estudio sobre una población de Melocactus intortus en Guánica, Puerto Rico.