Ejercicio #1: utilizando R realice una función que dado un dataframe cualquiera de dos columnas, donde la primera (índice 1) sea el valor de la variable independiente (X) y la segunda sea el valor de una variable dependiente (Y), devuelva una lista con los siguientes elementos: * Un arreglo con los valores de los estimadores para beta1 y beta2 * El valor del coeficiente de determinación 𝑟# del modelo. * El coeficiente de correlación 𝑟 (raíz cuadrada de 𝑟#). * Un arreglo con los valores de los residuos. * Una gráfica con la nube de puntos y la recta de regresión del modelo.

# Función para calcular los estimadores, coeficientes y residuos sin usar lm()
regresion_manual <- function(df) {
  # Verificar que el dataframe tenga exactamente 2 columnas
  if (ncol(df) != 2) {
    stop("El dataframe debe tener exactamente dos columnas")
  }
  
  x <- df[,1]
  y <- df[,2]
  
  # Número de observaciones
  n <- length(x)
  
  # Estimadores para beta1 y beta0
  beta1 <- (sum(x) * sum(y) - n * sum(x * y)) / (sum(x)^2 - n * sum(x^2))
  beta0 <- (sum(y) - beta1 * sum(x)) / n
  
  # Predicciones del modelo
  y_pred <- beta0 + beta1 * x
  
  # Residuos
  residuos <- y - y_pred
  
  # Coeficiente de determinación r^2
  r2 <- sum((y_pred - mean(y))^2) / sum((y - mean(y))^2)
  
  # Coeficiente de correlación r
  r <- sqrt(r2)
  
  # Resultados en una lista
  resultados <- list(
    beta = c(beta0, beta1),
    r2 = r2,
    r = r,
    residuos = residuos
  )
  
  return(resultados)
}
# Crear un dataframe de ejemplo
df_ejemplo <- data.frame(X = c(1, 2, 3, 4, 5), Y = c(2, 4, 5, 4, 5))

# Llamar a la función
resultados <- regresion_manual(df_ejemplo)

# Mostrar los resultados
print(resultados)
## $beta
## [1] 2.2 0.6
## 
## $r2
## [1] 0.6
## 
## $r
## [1] 0.7745967
## 
## $residuos
## [1] -0.8  0.6  1.0 -0.6 -0.2
# Gráfica con ggplot2


# Crear dataframe con las predicciones
df_ejemplo$Y_pred <- resultados$beta[1] + resultados$beta[2] * df_ejemplo$X

ggplot(df_ejemplo, aes(x = X, y = Y)) +
  geom_point(color = 'blue') +
  geom_line(aes(y = Y_pred), color = 'red') +
  labs(title = "Nube de puntos y recta de regresión",
       x = "X",
       y = "Y")

Ejercicio #2: Para este ejercicio se le solicita que desarrolle las siguientes actividades utilizando RStudio Con el dataset Admissions adjunto a este laboratorio realice lo siguiente:

  1. Análisis estadístico Cargamos el dataset y realizamos un análisis estadístico sobre todas las variables.
# Cargar el dataset
admissions <- read.csv("C:/Users/halegre/Documents/Heberto/galileo/r/lab3/Admisions.csv")

# Análisis estadístico
summary(admissions)
##    Serial.No.      GRE.Score      TOEFL.Score    University.Rating
##  Min.   :  1.0   Min.   :290.0   Min.   : 92.0   Min.   :1.000    
##  1st Qu.:125.8   1st Qu.:308.0   1st Qu.:103.0   1st Qu.:2.000    
##  Median :250.5   Median :317.0   Median :107.0   Median :3.000    
##  Mean   :250.5   Mean   :316.5   Mean   :107.2   Mean   :3.114    
##  3rd Qu.:375.2   3rd Qu.:325.0   3rd Qu.:112.0   3rd Qu.:4.000    
##  Max.   :500.0   Max.   :340.0   Max.   :120.0   Max.   :5.000    
##       SOP             LOR             CGPA          Research   
##  Min.   :1.000   Min.   :1.000   Min.   :6.800   Min.   :0.00  
##  1st Qu.:2.500   1st Qu.:3.000   1st Qu.:8.127   1st Qu.:0.00  
##  Median :3.500   Median :3.500   Median :8.560   Median :1.00  
##  Mean   :3.374   Mean   :3.484   Mean   :8.576   Mean   :0.56  
##  3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:9.040   3rd Qu.:1.00  
##  Max.   :5.000   Max.   :5.000   Max.   :9.920   Max.   :1.00  
##  Chance.of.Admit 
##  Min.   :0.3400  
##  1st Qu.:0.6300  
##  Median :0.7200  
##  Mean   :0.7217  
##  3rd Qu.:0.8200  
##  Max.   :0.9700
  1. Realice una gráfica de densidad para cada una de las variables numéricas en el dataset: GRE.Score, TOEFEL.Score, CGPA y Chance of Admit.
# Gráfica de densidad para cada variable numérica
numeric_vars <- admissions[, sapply(admissions, is.numeric)]



plots <- lapply(names(numeric_vars), function(var) {
  ggplot(admissions, aes_string(x = var)) +
    geom_density(fill = "blue", alpha = 0.5) +
    labs(title = paste("Densidad de", var))
})
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
do.call(grid.arrange, c(plots, ncol = 3))

  1. Realice una gráfica de correlación entre las variables del inciso anterior.
ggpairs(numeric_vars)

  1. Realice comentarios sobre el análisis estadístico de las variables numéricas y la gráfica de correlación.

Existen variables que estan correlacionadas siendo las mas importantes GGPA con Score.

  1. Realice un scatter plot (nube de puntos) de todas las variables numéricas contra la variable Chance of Admit.
# Scatter plots
ggplot(admissions, aes(x = GRE.Score, y = Chance.of.Admit)) + geom_point() + ggtitle("GRE.Score vs Chance of Admit")

ggplot(admissions, aes(x = TOEFL.Score, y = Chance.of.Admit)) + geom_point() + ggtitle("TOEFL.Score vs Chance of Admit")

ggplot(admissions, aes(x = CGPA, y = Chance.of.Admit)) + geom_point() + ggtitle("CGPA vs Chance of Admit")

  1. Utilizando la función train y trainControl para crear un crossvalidation y le permita evaluar los siguientes modelos: • Chance of Admit ~ TOEFEL.Score. • Chance of Admit ~ CGPA. • Chance of Admit ~ GRE.Score. • Chance of Admit ~ TOEFEL.Score + CGPA. • Chance of Admit ~ TOEFEL.Score + GRE.Score. • Chance of Admit ~ GRE.Score + CGPA. • Chance of Admit ~ TOEFEL.Score + CGPA + GRE.Score.
# Configuración de cross-validation

set.seed(123)
train_control <- trainControl(method = "cv", number = 10)
# Modelos a evaluar
formulas <- list(
  Chance.of.Admit ~ TOEFL.Score,
  Chance.of.Admit ~ CGPA,
  Chance.of.Admit ~ GRE.Score,
  Chance.of.Admit ~ TOEFL.Score + CGPA,
  Chance.of.Admit ~ TOEFL.Score + GRE.Score,
  Chance.of.Admit ~ GRE.Score + CGPA,
  Chance.of.Admit ~ TOEFL.Score + CGPA + GRE.Score
)

# Evaluación de modelos
results <- lapply(formulas, function(f) {
  model <- train(f, data = admissions, method = "lm", trControl = train_control)
  rmse <- model$results$RMSE
  list(formula = f, RMSE = rmse)
})
# Configuración de cross-validation
set.seed(123)
train_control <- trainControl(method = "cv", number = 10)

# Modelos a evaluar
formulas <- list(
  Chance.of.Admit ~ TOEFL.Score,
  Chance.of.Admit ~ CGPA,
  Chance.of.Admit ~ GRE.Score,
  Chance.of.Admit ~ TOEFL.Score + CGPA,
  Chance.of.Admit ~ TOEFL.Score + GRE.Score,
  Chance.of.Admit ~ GRE.Score + CGPA,
  Chance.of.Admit ~ TOEFL.Score + CGPA + GRE.Score
)

# Evaluación de modelos
results <- lapply(formulas, function(f) {
  model <- train(f, data = admissions, method = "lm", trControl = train_control)
  rmse <- model$results$RMSE
  list(formula = f, RMSE = rmse)
})

# Convertir la lista de resultados en un data frame
resultados_df <- do.call(rbind, lapply(results, function(x) {
  data.frame(Formula = paste(deparse(x$formula), collapse = " "), RMSE = x$RMSE)
}))

# Ordenar el data frame por RMSE en orden ascendente
resultados_df <- resultados_df[order(resultados_df$RMSE), ]

resultados_df
##                                            Formula       RMSE
## 7 Chance.of.Admit ~ TOEFL.Score + CGPA + GRE.Score 0.06215776
## 6               Chance.of.Admit ~ GRE.Score + CGPA 0.06283237
## 4             Chance.of.Admit ~ TOEFL.Score + CGPA 0.06381828
## 2                           Chance.of.Admit ~ CGPA 0.06625857
## 5        Chance.of.Admit ~ TOEFL.Score + GRE.Score 0.07681233
## 3                      Chance.of.Admit ~ GRE.Score 0.08265295
## 1                    Chance.of.Admit ~ TOEFL.Score 0.08579917

Ejercicio #3: A continuación se le muestran tres imágenes que muestran los resultados obtenidos de correr la función summary() a dos modelos de regresión lineal, para este ejercicio se le solicita que realice la interpretación de las tablas resultantes. Recuerde tomar en cuenta la signficancia de los parámetros (signfícancia local), la signficancia del modelo (signficancia global), el valor del 𝑟!: y cualquier observación que considere relevante para determinar si el modelo estructuralmente es adecuado o no.

#Modelo 1

Ek modelo 1 muestra la relacion del la variable dependiente Roll con la variable independiete UNEM, esta ultima es estadisticamente significativa al 5% al nivel local mientras que el intercepto del modelo no es estadisticamente significativo. El r2 0.1531. indica que aproximadamente el 15.31% de la variabilidad en ROLL es explicada por UNEM, y a nivel global el p-value: 0.03579. Indica que el modelo en su conjunto es significativo al nivel del 5%.

#Modelo 2

El modelo 2 muestra la relacion de la variable dependiente Roll con las variables independientes UNEM, HGRAD y INC, a nivel local todas las vriables son estadisticamente significativa a 0.001%, mientras que el r2 0.9621 indica que aproximadamente el 96.21% de la variabilidad en ROLL es explicada por las variables independientes. Por su parte el p-value es muy cercano a cero, lo que indica que en conjunto el modelo es significativo.

Model 3

El modelo 3 muesta la relacion entre la variable dependiente Cab.Price con la variable independiente Months. La variable Months como el intercepto son estadisticamente significativas al 0.0001% a nivel loval y el r2 es considerablemente alto con 94.6%. Por tanto el p-value tambien es bastante bajo lo que implica que a nivel conjunto el modelo es significativo.