R es un lenguaje de programación gratuito y un entorno de software creado para analizar y visualizar datos. Fue desarrollado por Robert Gentleman y Ross Ihaka en la Universidad de Auckland, Nueva Zelanda. R se ha vuelto muy popular en la comunidad de ciencia de datos y estadística porque es muy flexible y tiene muchos paquetes que permiten hacer diferentes tipos de análisis.
R es muy versatil en la programación y en el analisis de datos numericos por lo cual se puede implementar en cualquier investigación que requiera aplicar algun modelo estadistico o modelos de predicción.
Para aquellos que realizan la programación en R mediante la IDE Rstudio se hace de la siguiente manera:
a). Ve al menú File y selecciona New File, luego elige R Script.
b). Aparecerá una ventana nueva donde puedes escribir tu código.
En R, un objeto es una entidad que almacena datos y puede ser manipulada mediante funciones. Los objetos son fundamentales en R, ya que el lenguaje está basado en la manipulación de estos para realizar diversas operaciones de análisis de datos, modelado estadístico, y visualización.
Vectores
Matrices
Listas
Data Frames
Factores
Arrays
Funciones
Factores Ordenados
Tibbles (de dplyr)
Environments
Crear un vector: numeros <- c(1, 2, 3, 4, 5)
Crear una matriz: matriz <- matrix(1:9, nrow = 3, ncol = 3)
Crear un data frame: datos <- data.frame( nombre = c(“Ana”, “Luis”, “Pedro”), edad = c(23, 30, 25), altura = c(160, 175, 168))
Acceder a una columna de un data frame: datos$edad
Filtrar filas en un data frame: subset(datos, edad > 25)
Ordenar un data frame: datos_ordenados <- datos[order(datos$edad),]
Calcular la media: media <- mean(numeros)
Calcular la mediana: mediana <- median(numeros)
Calcular la desviación estándar: desviacion <- sd(numeros)
Resumen estadístico de un data frame: resumen <- summary(datos)
Realizar una prueba t de dos muestras: t_test <- t.test(datos\(edad, datos\)altura)
Crear un gráfico de dispersión: plot(datos\(edad, datos\)altura)
Crear un histograma: hist(datos$edad)
Crear un gráfico de barras: barplot(table(datos$nombre))
Usar ggplot2 para un gráfico de dispersión: library(ggplot2) ggplot(datos, aes(x = edad, y = altura)) + geom_point()
Manipulación Avanzada con dplyr library(dplyr)
Seleccionar columnas específicas: datos_seleccionados <- select(datos, nombre, edad)
Filtrar filas con condiciones: datos_filtrados <- filter(datos, edad > 25)
Agrupar y resumir datos: resumen_por_grupo <- datos %>% group_by(nombre) %>% summarise(media_edad = mean(edad))
Agregar nuevas columnas: datos <- mutate(datos, altura_cm = altura / 100)
Cargar el paquete tidyr: library(tidyr)
Convertir datos de ancho a largo (pivot_longer): datos_largos <- pivot_longer(datos, cols = c(edad, altura), names_to = “variable”, values_to = “valor”)
En R Studio, puedes realizar una variedad de operaciones lógicas para comparar valores y obtener resultados booleanos (`TRUE` o `FALSE`). Aquí tienes algunas de las operaciones lógicas más comunes, junto con ejemplos de cada una:
Igualdad (‘==’): Comprueba si dos valores son iguales.
‘5 == 5’ –> ‘TRUE’
‘“hola” == “adios”’ –> ‘FALSE’
Desigualdad (‘!=’): Comprueba si dos valores no son iguales.
‘5 != 3’ –> ‘TRUE’
‘5 != 5’ –> ‘FALSE’
Mayor que (‘>’): Comprueba si un valor es mayor que otro.
‘5 > 3’ –> ‘TRUE’
‘3 > 5’ –> ‘FALSE’
Mayor o igual que (‘>=’): Comprueba si un valor es mayor o igual que otro.
‘5 >= 5’ –> ‘TRUE’
‘3 >= 5’ –> ‘FALSE’
Menor que (‘<’): Comprueba si un valor es menor que otro.
‘3 < 5’ –> ‘TRUE’
‘5 < 3’ –> ‘FALSE’
Menor o igual que (‘<=’): Comprueba si un valor es menor o igual que otro.
‘3 <= 5’ –> ‘TRUE’
‘5 <= 3’ –> ‘FALSE’
Operador de Y (‘&’ o ‘&&’): Comprueba si ambas condiciones son verdaderas.
Operador de O (‘|’ o ‘||’): Comprueba si al menos una de las condiciones es verdadera.
Operador de Negación (‘!’): Niega una condición.
Gráficos Básicos en R:
Funciones Gráficas Básicas:
- R incluye varias funciones básicas para crear gráficos, como
**`plot()`**, **`hist()`**, **`barplot()`**, **`boxplot()`**,
entre otros.
- Estas funciones se utilizan para visualizar diferentes tipos de
datos, como diagramas de dispersión, histogramas, gráficos de
barras y diagramas de caja, respectivamente.
Sintaxis Simple:
- La sintaxis para crear gráficos básicos en R es simple.
Simplemente se llama a la función gráfica deseada y se
proporcionan los datos necesarios como argumentos.
Ventanas de Gráficos en R:
Dispositivos Gráficos:
En R, los gráficos se muestran en dispositivos gráficos, que pueden ser ventanas gráficas interactivas o archivos de salida.
Las ventanas gráficas se abren automáticamente cuando se crea un gráfico utilizando una función gráfica en R.
Ventanas Gráficas Interactivas:
Personalización de Gráficos en R:
Argumentos de Función:
Paleta de Colores:
Exportar Gráficos en R:
Captura de Pantalla:
Guardar como Imagen:
png(),
jpeg(),
pdf(), y luego
dev.off() para guardar el gráfico en un
archivo.Integración con R Markdown y RStudio:
# Crear un gráfico de dispersión simple
x <- 1:10
y <- x^2
plot(x, y, main = "Gráfico de Dispersión", xlab = "Eje X", ylab = "Eje Y", col = "blue", pch = 16)
data181 <- read.csv("C:/Users/DAVID/Desktop/men.csv", header=FALSE, comment.char="#")
library(readxl)
data181 <- read_excel("C:/Users/DAVID/Desktop/men1.xlsx")
# Variable numérica
numero <- 42
# Variable de caracteres
z <- c(2, 4, 5, 5, 7)
# Variable lógica
y <- c(2, 3, 4, 4, 6)
# Variable de vector
x <- c(1, 2, 3, 3, 5)
datos = data.frame(x,y,z)
Puedes cargar datos directamente desde una URL utilizando funciones como:
url <- "https://raw.githubusercontent.com/fhernanb/datos/master/babies.txt"
data <- read.table(url, header = TRUE, sep = "\t")
library(modeest)
print("Medias")
## [1] "Medias"
mean(datos$x)
## [1] 2.8
mean(datos$y)
## [1] 3.8
mean(datos$z)
## [1] 4.6
print("Modas")
## [1] "Modas"
mfv(datos$x)
## [1] 3
mfv(datos$y)
## [1] 4
mfv(datos$z)
## [1] 5
print("Desviacion estandar")
## [1] "Desviacion estandar"
sd(datos$x)
## [1] 1.48324
sd(datos$y)
## [1] 1.48324
sd(datos$z)
## [1] 1.81659
summary(datos)
## x y z
## Min. :1.0 Min. :2.0 Min. :2.0
## 1st Qu.:2.0 1st Qu.:3.0 1st Qu.:4.0
## Median :3.0 Median :4.0 Median :5.0
## Mean :2.8 Mean :3.8 Mean :4.6
## 3rd Qu.:3.0 3rd Qu.:4.0 3rd Qu.:5.0
## Max. :5.0 Max. :6.0 Max. :7.0
plot(datos$x)
plot(datos$y)
plot(datos$z)
En la grafica se observa que los datos se encuentran dispersos y no se agrupan de manera alguna.
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
tabla_x <- datos %>%
group_by(datos$x) %>%
summarise(Frecuencia = n())
tabla_y <- datos %>%
group_by(datos$y) %>%
summarise(Frecuencia = n())
tabla_z <- datos %>%
group_by(datos$z) %>%
summarise(Frecuencia = n())
print(tabla_x)
## # A tibble: 4 × 2
## `datos$x` Frecuencia
## <dbl> <int>
## 1 1 1
## 2 2 1
## 3 3 2
## 4 5 1
print(tabla_y)
## # A tibble: 4 × 2
## `datos$y` Frecuencia
## <dbl> <int>
## 1 2 1
## 2 3 1
## 3 4 2
## 4 6 1
print(tabla_z)
## # A tibble: 4 × 2
## `datos$z` Frecuencia
## <dbl> <int>
## 1 2 1
## 2 4 1
## 3 5 2
## 4 7 1
set.seed(123) # Para reproducibilidad
df <- data.frame(
categoria1 = sample(c("A", "B", "C"), 100, replace = TRUE),
categoria2 = sample(c("X", "Y", "Z"), 100, replace = TRUE),
valor = rnorm(100, mean = 50, sd = 10),
valor2 = rnorm(100, mean = 30, sd = 5)
)
Histograma
library(ggplot2)
ggplot(df, aes(x = valor)) + geom_histogram(binwidth = 5, fill = "blue", color = "black") + labs(title = "Histograma", x = "Valor", y = "Frecuencia") + theme_minimal()
Diagrama de barras
library(ggplot2)
ggplot(df, aes(x = categoria1)) +
geom_bar(fill = "blue", color = "black") +
labs(title = "Diagrama de Barras", x = "Categoría", y = "Frecuencia") +
theme_minimal()
Scatter plot
# Scatter Plot
ggplot(df, aes(x = valor, y = valor2)) +
geom_point(color = "blue") +
labs(title = "Scatter Plot", x = "Valor", y = "Valor2") +
theme_minimal()
Box plot
ggplot(df, aes(x = categoria1, y = valor)) +
geom_boxplot(fill = "blue", color = "black") +
labs(title = "Gráfico de Bigotes", x = "Categoría", y = "Valor") +
theme_minimal()
Line plot
df_line <- data.frame(
tiempo = 1:100,
valor = cumsum(rnorm(100))
)
# Gráfico de Línea
ggplot(df_line, aes(x = tiempo, y = valor)) +
geom_line(color = "blue") +
labs(title = "Gráfico de Línea", x = "Tiempo", y = "Valor") +
theme_minimal()
Grafico de densidad
ggplot(df, aes(x = valor)) +
geom_density(fill = "blue", alpha = 0.5) +
labs(title = "Gráfico de Densidad", x = "Valor", y = "Densidad") +
theme_minimal()
Grafico de pastel
df_pie <- df %>%
count(categoria1) %>%
mutate(perc = n / sum(n) * 100)
# Gráfico de Pastel
ggplot(df_pie, aes(x = "", y = perc, fill = categoria1)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start = 0) +
labs(title = "Gráfico de Pastel", fill = "Categoría") +
theme_void()
Correlacion lineal
ggplot(df, aes(x = valor, y = valor2)) +
geom_point(color = "blue") +
geom_smooth(method = "lm", color = "red") +
labs(title = "Correlación Lineal", x = "Valor", y = "Valor2") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
url <- "https://raw.githubusercontent.com/fhernanb/datos/master/babies.txt"
babys <- read.table(url, header = TRUE, sep = "\t")
head(babys)
## bwt gestation parity age height weight smoke
## 1 120 284 First born 27 62 100 Not
## 2 113 282 First born 33 64 135 Not
## 3 128 279 First born 28 64 115 Yes
## 4 123 NA First born 36 69 190 Not
## 5 108 282 First born 23 67 125 Yes
## 6 136 286 First born 25 62 93 Not
En base a la base de datos anterior (babies) analizaremos la variable edad y plantearemos lo siguiente:
\(H_0\) = El peso del bebe al nacer no es dependiente del peso de la madre
\(H_1\) = El peso de la madre si influye en el peso del bebe al nacer
qqnorm(babys$bwt)
qqline(babys$bwt, col = "red")
qqnorm(babys$weight)
qqline(babys$weight, col = "red")
shapiro1 = shapiro.test(babys$age)
shapiro2 = shapiro.test(babys$weight)
hist(babys$bwt, probability = TRUE, main = "Histograma - Babys$bwt")
lines(density(babys$bwt), col = "blue")
weight <- na.omit(babys$weight)
hist(babys$weight, probability = TRUE, main = "Histograma - Babys$weight")
lines(density(weight), col = "blue")
qqnorm(babys$bwt)
qqline(babys$bwt, col = "red")
qqnorm(babys$weight)
qqline(babys$weight, col = "red")
# Prueba de Shapiro-Wilk
shapiro_test_A <- shapiro.test(babys$bwt)
shapiro_test_B <- shapiro.test(babys$weight)
print(shapiro_test_A)
##
## Shapiro-Wilk normality test
##
## data: babys$bwt
## W = 0.99559, p-value = 0.001192
print(shapiro_test_B)
##
## Shapiro-Wilk normality test
##
## data: babys$weight
## W = 0.92842, p-value < 2.2e-16
# Decisión sobre normalidad y elección de la prueba
if (shapiro_test_A$p.value > 0.05 && shapiro_test_B$p.value > 0.05) {
# Prueba t para muestras independientes
t_test_result <- t.test(babys$bwt, babys$weight)
print(t_test_result)
if (t_test_result$p.value < 0.05) {
cat("Se rechaza la hipótesis nula. Hay una diferencia significativa en las medias de los dos métodos.\n")
} else {
cat("No se rechaza la hipótesis nula. No hay una diferencia significativa en las medias de los dos métodos.\n")
}
} else {
# Prueba de Mann-Whitney
wilcox_test_result <- wilcox.test(babys$bwt, babys$weight)
print(wilcox_test_result)
if (wilcox_test_result$p.value < 0.05) {
cat("Se rechaza la hipótesis nula. Hay una diferencia significativa en las distribuciones de los dos métodos.\n")
} else {
cat("No se
rechaza la hipótesis nula. No hay una diferencia significativa en las distribuciones de los dos métodos.\n")
}
}
##
## Wilcoxon rank sum test with continuity correction
##
## data: babys$bwt and babys$weight
## W = 581378, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
##
## Se rechaza la hipótesis nula. Hay una diferencia significativa en las distribuciones de los dos métodos.
Se rechaza la hipótesis nula. Hay una diferencia significativa en las distribuciones de los dos métodos. Por tanto \(H_1\) se cumple.