Aspectos generales de R

1.1 ¿Qué es R y cuándo se podría implementar??

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.

1.1.1 ¿Cuando se podria implementar?

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.

1.2 ¿Cómo se crea y se manipula un objeto?

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.

1.3 ¿Que es un objeto en R’

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.

1.4 ¿Tipos de objetos?

  • Vectores

  • Matrices

  • Listas

  • Data Frames

  • Factores

  • Arrays

  • Funciones

  • Factores Ordenados

  • Tibbles (de dplyr)

  • Environments

1.5 ¿Funciones de R studio?

  • 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”)

1.6 Operaciones logicas y dar ejemplo de cada una

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:

  1. Igualdad (‘==’): Comprueba si dos valores son iguales.

    • ‘5 == 5’ –> ‘TRUE’

    • ‘“hola” == “adios”’ –> ‘FALSE’

  2. Desigualdad (‘!=’): Comprueba si dos valores no son iguales.

    • ‘5 != 3’ –> ‘TRUE’

    • ‘5 != 5’ –> ‘FALSE’

  3. Mayor que (‘>’): Comprueba si un valor es mayor que otro.

    • ‘5 > 3’ –> ‘TRUE’

    • ‘3 > 5’ –> ‘FALSE’

  4. Mayor o igual que (‘>=’): Comprueba si un valor es mayor o igual que otro.

    • ‘5 >= 5’ –> ‘TRUE’

    • ‘3 >= 5’ –> ‘FALSE’

  5. Menor que (‘<’): Comprueba si un valor es menor que otro.

    • ‘3 < 5’ –> ‘TRUE’

    • ‘5 < 3’ –> ‘FALSE’

  6. Menor o igual que (‘<=’): Comprueba si un valor es menor o igual que otro.

    • ‘3 <= 5’ –> ‘TRUE’

    • ‘5 <= 3’ –> ‘FALSE’

  7. Operador de Y (‘&’ o ‘&&’): Comprueba si ambas condiciones son verdaderas.

    • ‘(5 > 3) & (5 < 10)’ –> ‘TRUE’
  8. Operador de O (‘|’ o ‘||’): Comprueba si al menos una de las condiciones es verdadera.

    • ‘(5 > 10) | (5 < 10)’ –> ‘TRUE’
  9. Operador de Negación (‘!’): Niega una condición.

    • ‘!(5 == 5)’ –> ‘FALSE’

1.7 Explicar cuáles son los Gráficos básicos, ventanas de R, personalizar, exportar.

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:

  1. 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.

  2. Ventanas Gráficas Interactivas:

    • Las ventanas gráficas interactivas permiten explorar gráficos de forma dinámica. Puedes hacer zoom, desplazarte, seleccionar y guardar partes del gráfico.

Personalización de Gráficos en R:

  1. Argumentos de Función:

    • Las funciones gráficas en R admiten una variedad de argumentos que permiten personalizar la apariencia del gráfico, como color, tamaño, etiquetas de ejes, leyendas, entre otros.
  2. Paleta de Colores:

    • R ofrece una amplia gama de paletas de colores predefinidas que se pueden utilizar para personalizar los colores en los gráficos.

Exportar Gráficos en R:

  1. Captura de Pantalla:

    • Puedes capturar una ventana gráfica como una imagen de pantalla utilizando herramientas de captura de pantalla integradas en tu sistema operativo.
  2. Guardar como Imagen:

    • R proporciona funciones para guardar gráficos como archivos de imagen en diferentes formatos, como PNG, JPEG, PDF, entre otros. Puedes usar funciones como png(), jpeg(), pdf(), y luego dev.off() para guardar el gráfico en un archivo.
  3. Integración con R Markdown y RStudio:

    • R Markdown y RStudio proporcionan facilidades para incrustar y exportar gráficos directamente desde documentos R Markdown, lo que facilita la creación de informes y documentos con gráficos incrustados.
# 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)

1.8 Explicar cómo se importa un archivo .csv, .xls y cargar una base de datos de cada una

  1. Importar un archivo .csv El formato .csv (valores separados por comas) es muy común para almacenar datos tabulares. En R, puedes usar la función read.csv() para importar archivos .csv.
data181 <- read.csv("C:/Users/DAVID/Desktop/men.csv", header=FALSE, comment.char="#")
  1. Para cargar una base de datos .xlsx se usa el siguiente codigo
library(readxl)
data181 <- read_excel("C:/Users/DAVID/Desktop/men1.xlsx")

1.9 Ejemplo de 4 variables

# 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)

1.10 A partir de las tres variables creadas, formar un dataframe

datos = data.frame(x,y,z)

1.11 Explicar cómo cargamos una base de datos: de una pagina web, de la bases de datos de r, o de que otra forma se podría.

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")

2. Estadistica descriptiva

2.1 Con el dataframe anterior hallar: la media, moda, desviación estándar de las variables creadas

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

2.2 Hallar un resumen las medidas de tendencia central

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

2.3 Calcular la dispersión y forma (puede ser el grafico de dispersión)

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.

2.4 Realizar tabla de distribución de frecuencias

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

2.5 Graficas GG-plot2

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'

2.7 o Cargar la base de datos:

url <- "https://raw.githubusercontent.com/fhernanb/datos/master/babies.txt"
babys <- read.table(url, header = TRUE, sep = "\t")

3 Estadistica inferencial

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.