Punto 1:

A) Graficos de Dispersion:

# Configuración inicial
knitr::opts_chunk$set(warning = FALSE, message = FALSE)

# Cargar librerías necesarias
library(readr)
library(ggplot2)
library(gridExtra)
library(grid)

# Importar la data
data <- read_delim("C:/Users/Miguel/Downloads/punto1.parcial.csv", 
                   delim = ";", escape_double = FALSE, trim_ws = TRUE)

# Convertir nombres a minúsculas por si acaso
colnames(data) <- tolower(colnames(data))
colnames(data) <- trimws(colnames(data))

# Gráfico Utilidad vs Mercado
g1 <- ggplot(data, aes(x = mercado, y = utilidad)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Utilidad vs Participación en el mercado", 
       x = "Participación en el mercado (%)", 
       y = "Utilidad (millones de $)")

# Gráfico Utilidad vs Descuento
g2 <- ggplot(data, aes(x = descuento, y = utilidad)) +
  geom_point(color = "green") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Utilidad vs Descuento concedido", 
       x = "Descuento concedido (%)", 
       y = "Utilidad (millones de $)")

# Crear una nueva página para evitar tablas no deseadas
grid.newpage()

# Mostrar los dos gráficos juntos sin generar la tabla "gtable"
grid.draw(arrangeGrob(g1, g2, nrow = 1))

B Y C) Modelo e interpretacion:

##punto b y c interpretar

# Cargar librerías necesarias
library(gt)
library(broom)
library(dplyr)

# Ajustar el modelo de regresión
mod1 <- lm(utilidad ~ descuento + mercado, data = data)

# Convertir los resultados en un dataframe para mostrarlo como tabla
tabla_resultados <- tidy(mod1) %>%
  select(term, estimate, std.error, statistic, p.value) %>%
  mutate(across(where(is.numeric), round, 4)) # Redondear valores

# Crear una tabla con formato estético
tabla_resultados %>%
  gt() %>%
  tab_header(
    title = "Resultados del Modelo de Regresión",
    subtitle = "Estimaciones de los coeficientes"
  ) %>%
  cols_label(
    term = "Variable",
    estimate = "Coeficiente",
    std.error = "Error estándar",
    statistic = "t-value",
    p.value = "p-valor"
  ) %>%
  fmt_number(columns = c(estimate, std.error, statistic, p.value), decimals = 4)
Resultados del Modelo de Regresión
Estimaciones de los coeficientes
Variable Coeficiente Error estándar t-value p-valor
(Intercept) 240.1330 49.6936 4.8323 0.0019
descuento −0.3760 3.0449 −0.1235 0.9052
mercado 4.7390 1.3347 3.5506 0.0093
Interpretación de los coeficientes:
  • Intercepto (240.133):
    Este valor representa la utilidad esperada cuando la participación en el mercado y los descuentos concedidos son iguales a 0. Es decir, si la empresa no tuviera participación en el mercado ni ofreciera descuentos, la utilidad estimada sería 240.133 millones de dólares.

  • Coeficiente de Descuento (-0.376):
    Indica que por cada aumento de 1% en el descuento concedido, la utilidad disminuye en aproximadamente 0.376 millones de dólares (376 mil dólares), manteniendo constante la participación en el mercado. Esto sugiere que ofrecer mayores descuentos tiene un impacto negativo sobre las utilidades.

  • Coeficiente de Participación en el mercado (4.739):
    Por cada aumento de 1% en la participación en el mercado, la utilidad aumenta en aproximadamente 4.739 millones de dólares, manteniendo constante el descuento concedido. Esto significa que una mayor participación en el mercado genera un impacto positivo y significativo en las utilidades de la empresa.

D Y E) Evaluacion del modelo:

##punto d y e

# Cargar librerías necesarias
library(broom)
library(dplyr)
library(knitr)

# Extraer el resumen del modelo en formato de tabla
tabla_summary <- summary(mod1) %>%
  broom::tidy() %>%
  select(term, estimate, std.error, statistic, p.value) %>%
  mutate(across(where(is.numeric), round, 4)) %>%  # Redondear valores
  mutate(
    Significancia = case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01  ~ "**",
      p.value < 0.05  ~ "*",
      p.value < 0.1   ~ ".",
      TRUE            ~ ""
    )
  )

# Extraer el p-value general del modelo
p_value_general <- summary(mod1)$fstatistic
p_value_general <- pf(p_value_general[1], p_value_general[2], p_value_general[3], lower.tail = FALSE)

# Crear una fila extra con el p-value general
fila_extra <- tibble(
  term = "P-valor General del Modelo",
  estimate = NA,
  std.error = NA,
  statistic = NA,
  p.value = round(p_value_general, 5),  # Se redondea a 5 decimales
  Significancia = case_when(
    p_value_general < 0.001 ~ "***",
    p_value_general < 0.01  ~ "**",
    p_value_general < 0.05  ~ "*",
    p_value_general < 0.1   ~ ".",
    TRUE                    ~ ""
  )
)

# Unir la tabla original con la fila adicional
tabla_completa <- bind_rows(tabla_summary, fila_extra)

# Mostrar la tabla en formato kable (bonita para Markdown)
kable(tabla_completa, caption = "Resumen del Modelo de Regresión")
Resumen del Modelo de Regresión
term estimate std.error statistic p.value Significancia
(Intercept) 240.133 49.6936 4.8323 0.00190 **
descuento -0.376 3.0449 -0.1235 0.90520
mercado 4.739 1.3347 3.5506 0.00930 **
P-valor General del Modelo NA NA NA 0.02443 *

Significancia

Modelo

  • El valor p-value = 0.02443 se compara con α = 0.05.

  • Como p-value < 0.05, se concluye que el modelo es significativo, es decir, hay evidencia suficiente para afirmar que al menos una de las variables independientes (mercado o descuento) tiene un efecto sobre la utilidad.

Variables
  • La variable mercado es significativa porque su valor p (0.00934) es menor que 0.05.

  • La variable descuento no es significativa y debería eliminarse del modelo para mejorar su precisión. Su valor p (0.90519) es mayor que 0.05.

F) Coeficiente de Correlacion Multiple:

# Cargar librerías necesarias
library(gt)

# Calcular el coeficiente de correlación múltiple
R <- sqrt(summary(mod1)$r.squared)

# Crear tabla con gt()
tabla_correlacion <- tibble::tibble(
  Métrica = "Coeficiente de correlación múltiple (R)",
  Valor = round(R, 4)
)

# Mostrar la tabla con formato estético
tabla_correlacion %>%
  gt() %>%
  tab_header(
    title = "Coeficiente de Correlación Múltiple"
  ) %>%
  cols_label(
    Métrica = "Métrica",
    Valor = "Valor"
  ) %>%
  fmt_number(columns = "Valor", decimals = 4)
Coeficiente de Correlación Múltiple
Métrica Valor
Coeficiente de correlación múltiple (R) 0.8085

Interpretación del coeficiente de correlación múltiple

El coeficiente de correlación múltiple R mide la intensidad de la relación entre la variable dependiente (utilidad) y las variables independientes (mercado y descuento).

El coeficiente de correlación múltiple obtenido es 0.8085, lo que indica que el modelo presenta una relación fuerte y positiva entre las variables independientes (descuento y mercado) y la variable dependiente (utilidad). Aproximadamente el 80.85% de la variabilidad de la utilidad se explica por el mercado y el descuento de manera lineal.

G) Coeficiente de determinacion (R²)

# Cargar librerías necesarias
library(gt)

# Calcular el coeficiente de determinación (R²)
R2 <- summary(mod1)$r.squared

# Crear tabla con gt()
tabla_determinacion <- tibble::tibble(
  Métrica = "Coeficiente de determinación (R²)",
  Valor = round(R2, 4)
)

# Mostrar la tabla con formato estético
tabla_determinacion %>%
  gt() %>%
  tab_header(
    title = "Coeficiente de Determinación"
  ) %>%
  cols_label(
    Métrica = "Métrica",
    Valor = "Valor"
  ) %>%
  fmt_number(columns = "Valor", decimals = 4)
Coeficiente de Determinación
Métrica Valor
Coeficiente de determinación (R²) 0.6537

Interpretación del coeficiente de determinación (R²)

El coeficiente de determinación indica qué porcentaje de la variabilidad en la utilidad es explicado por las variables independientes. Esto significa que el 65.37% de la variabilidad en la utilidad es explicado por la participación en el mercado y el descuento concedido.

H) Modelo regresion final:

##punto h

# Cargar librerías necesarias
library(gt)
library(broom)
library(dplyr)

# Ajustar el modelo de regresión
mod2 <- lm(utilidad ~ mercado, data = data)

# Extraer los resultados y formatearlos
tabla_resultados_mod2 <- tidy(mod2) %>%
  select(term, estimate, std.error, statistic, p.value) %>%
  mutate(across(where(is.numeric), round, 4)) %>%
  mutate(p.value = ifelse(term == "(Intercept)", format(2.48e-06, scientific = TRUE), p.value)) %>% # Usar p-valor exacto del intercepto
  mutate(significacion = case_when(
    as.numeric(p.value) < 0.001 ~ "***",
    as.numeric(p.value) < 0.01 ~ "**",
    as.numeric(p.value) < 0.05 ~ "*",
    as.numeric(p.value) < 0.1 ~ ".",
    TRUE ~ ""
  ))

# Crear la tabla con gt()
tabla_resultados_mod2 %>%
  gt() %>%
  tab_header(
    title = "Resultados del Modelo de Regresión (mod2)",
    subtitle = "Estimaciones de los coeficientes"
  ) %>%
  cols_label(
    term = "Variable",
    estimate = "Coeficiente",
    std.error = "Error estándar",
    statistic = "t-value",
    p.value = "p-valor",
    significacion = "Significación"
  ) %>%
  fmt_number(columns = c(estimate, std.error, statistic), decimals = 4) %>%
  tab_source_note(
    source_note = paste("p-valor general del modelo:", "0.004675") # p-valor corregido
  )
Resultados del Modelo de Regresión (mod2)
Estimaciones de los coeficientes
Variable Coeficiente Error estándar t-value p-valor Significación
(Intercept) 234.5875 19.9262 11.7728 2.48e-06 ***
mercado 4.6982 1.2109 3.8800 0.0047 **
p-valor general del modelo: 0.004675

I) Evaluacion supuestos:

##punto i

par(mfrow=c(2,2))
plot(mod2)

La gráfica Q-Q Residuals permite evaluar si los residuos del modelo se distribuyen de manera aproximadamente normal. Si los puntos se alinean sobre la línea diagonal punteada, se puede concluir que los residuos siguen una distribución normal. En este caso, la mayoría de los puntos se encuentran cercanos a la línea, lo que indica que la normalidad de los residuos se cumple de forma aceptable. Sin embargo, algunas desviaciones en los extremos sugieren la posible presencia de valores atípicos que podrían afectar ligeramente la normalidad.

Punto 2:

Esta base de datos recopila información sobre el tiempo que los estudiantes de una universidad local dedican a la práctica deportiva y su posible relación con el rendimiento académico y otros factores.

Las variables incluidas son:

  • Y (Horas de deporte): Tiempo semanal dedicado a actividades deportivas.
  • X1 (Créditos matriculados): Cantidad de créditos académicos inscritos en el semestre.
  • X2 (Promedio acumulado): Calificación promedio del estudiante.
  • X3 (Horas de ocio): Tiempo semanal dedicado a actividades recreativas no académicas. El objetivo del estudio es analizar si el rendimiento académico y otros factores afectan la práctica deportiva de los estudiantes.
# Cargar librerías necesarias
library(readxl)
library(DT)  # Para tablas interactivas

# Definir la ruta del archivo
archivo <- "~/Datos 2 punto E..xlsx"

# Leer los datos
Datos_2_punto_E_ <- read_excel(archivo, sheet = 1)

# Mostrar la tabla interactiva sin índice y sin barra de búsqueda
datatable(Datos_2_punto_E_, 
          rownames = FALSE,  # Elimina la columna de índices
          options = list(pageLength = 10,  # Número de filas por página
                         dom = 'tip'  # Oculta el campo de búsqueda
                        ),
          caption = "Tabla de Datos")

A) Modelo de Regresion lineal Multiple:

# Cargar las librerías necesarias
library(readxl)
library(dplyr)
library(gt)
library(broom)

# Definir la ruta del archivo
file_path <- "~/Datos 2 punto E..xlsx"

# Cargar los datos desde el archivo Excel
df <- read_excel(file_path, sheet = "Sheet1")

# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(Y ~ X1 + X2 + X3, data = df)

# Extraer los coeficientes en un formato adecuado para tablas
tabla_resultados <- tidy(modelo) %>%
  mutate(
    Significancia = case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01 ~ "**",
      p.value < 0.05 ~ "*",
      p.value < 0.1 ~ ".",
      TRUE ~ ""
    )
  ) %>%
  select(term, estimate, std.error, statistic, p.value, Significancia) %>%
  rename(
    "Descripción" = term,
    "Coeficiente" = estimate,
    "Error estándar" = std.error,
    "t value" = statistic,
    "Pr(>|t|)" = p.value
  )

# Crear la tabla con `gt`
tabla_gt <- tabla_resultados %>%
  gt() %>%
  tab_header(
    title = "Resultados del Modelo de Regresión"
  ) %>%
  fmt_number(
    columns = 2:5,
    decimals = 4
  ) %>%
  cols_align(
    align = "center",
    columns = everything()
  ) %>%
  tab_source_note(
    source_note = paste("R² múltiple:", round(summary(modelo)$r.squared, 4))
  )

# Mostrar la tabla
tabla_gt
Resultados del Modelo de Regresión
Descripción Coeficiente Error estándar t value Pr(>|t|) Significancia
(Intercept) 24.4605 5.4585 4.4812 0.0004 ***
X1 −0.5072 0.3194 −1.5879 0.1331
X2 −3.4102 1.1950 −2.8539 0.0121 *
X3 0.1638 0.1119 1.4642 0.1638
R² múltiple: 0.6472

B) Evaluación de la significancia del modelo y de las variables:

Significancia del modelo:

  • El R² = 0.6472 indica que el modelo explica aproximadamente el 64.72% de la variabilidad en las horas dedicadas al deporte. Esto sugiere un ajuste moderado del modelo, aunque puede haber otros factores no considerados que influyan en la variable dependiente. Evaluación de las variables:

  • Intercepto: Es significativo (p = 0.0004, ***), lo que indica que, en ausencia de otras variables, los estudiantes aún realizan cierta cantidad de deporte.

  • X1 (Créditos matriculados): No es significativo (p = 0.1331), lo que implica que la carga académica no tiene un impacto claro en la práctica deportiva.

  • X2 (Promedio acumulado): Es significativo (p = 0.0121, *), con un coeficiente negativo, lo que sugiere que un mejor rendimiento académico se asocia con menos horas de deporte.

  • X3 (Horas de ocio): No es significativo (p = 0.1638), lo que indica que el tiempo de ocio no tiene una relación estadísticamente clara con las horas de deporte.

Interpretación de los coeficientes

  • Intercepto (24.46): Representa el tiempo estimado de práctica deportiva si X1, X2 y X3 fueran 0 (aunque esto no es realista en la práctica).

  • X1 (Créditos matriculados: -0.5072): Aunque no es significativo, su coeficiente negativo sugiere que más créditos matriculados tienden a reducir el tiempo dedicado al deporte.

  • X2 (Promedio acumulado: -3.4102): Es significativo y negativo, lo que sugiere que los estudiantes con un mejor rendimiento académico dedican menos tiempo al deporte. Esto podría deberse a una mayor carga de estudio o una mayor prioridad en el desempeño académico.

  • X3 (Tiempo de ocio: 0.1638): No es significativo, pero su coeficiente positivo sugiere que quienes tienen más tiempo libre tienden a practicar más deporte.

Explicación de los resultados

  • El modelo en general es significativo, lo que indica que las variables en conjunto explican una parte importante del tiempo dedicado al deporte (R^2 = 0.6472, es decir, el 64.72% de la variabilidad en Y es explicada por X1, X2 y X3).

  • El promedio académico (X2) es la única variable individualmente significativa, lo que sugiere que el rendimiento académico tiene un impacto importante en la dedicación deportiva.

  • El número de créditos matriculados (X1) y el tiempo de ocio (X3) no tienen un impacto estadísticamente significativo, aunque sus coeficientes sugieren tendencias lógicas.

C) Ajuste Modelo α=0.05:

# Cargar librerías necesarias
library(dplyr)
library(knitr)

# Ajustar un nuevo modelo eliminando variables no significativas
modelo_reducido <- lm(Y ~ X2, data = df)

# Extraer los coeficientes, errores estándar, t-values y p-values
resultados_reducidos <- summary(modelo_reducido)$coefficients

# Obtener el R² del modelo
r2 <- summary(modelo_reducido)$r.squared

# Convertir en un data frame sin la columna redundante
tabla_resultados_reducidos <- data.frame(
  Coeficiente = resultados_reducidos[, 1],
  `Error Estándar` = resultados_reducidos[, 2],
  `t-value` = resultados_reducidos[, 3],
  `p-value` = resultados_reducidos[, 4],
  Significancia = ifelse(resultados_reducidos[, 4] < 0.001, "***",
                         ifelse(resultados_reducidos[, 4] < 0.01, "**",
                                ifelse(resultados_reducidos[, 4] < 0.05, "*", "No significativo")))
)

# Mostrar la tabla en formato bonito con R² al final
kable(tabla_resultados_reducidos, digits = 5, caption = "Resultados del Modelo Reducido de Regresión") %>%
  kableExtra::kable_styling() %>%
  kableExtra::add_footnote(paste("R\u00b2 múltiple:", round(r2, 5)))
Resultados del Modelo Reducido de Regresión
Coeficiente Error.Estándar t.value p.value Significancia
(Intercept) 21.95415 4.37336 5.01998 0.00011 ***
X2 -4.74395 1.12227 -4.22711 0.00057 ***
a R² múltiple: 0.51245

El modelo reducido solo conserva X2, ya que las demás variables no eran significativas. X2 tiene un impacto claro (p < 0.001) y una relación negativa con la variable dependiente. El R2 de 51.25% indica que el modelo sigue explicando bien la variabilidad, confirmando que las variables eliminadas no eran relevantes.

D) Evaluacion Supuestos:

# Cargar librerías necesarias
library(ggplot2)

# Ajustar el modelo final con X2
modelo_final <- lm(Y ~ X2, data = df)

# 1. Evaluar la linealidad con un gráfico de dispersión
ggplot(df, aes(x = X2, y = Y)) +
  geom_point() +
  geom_smooth(method = "lm", col = "blue") +
  labs(
    title = "Relacion entre X2 y Y",
    x = "Promedio Acumulado (X2)",
    y = "Tiempo en Deporte (Y)"
  ) +
  theme_minimal()

# 2. Diagnóstico gráfico de residuos
par(mfrow = c(2,2))  # Dividir la pantalla en 4 gráficos
plot(modelo_final)  # Generar gráficos de residuos

E) Evaluacion de los resultados:

Respuesta a los interrogantes planteados Los objetivos eran responder:

¿Cuánto tiempo por semana invierte un estudiante en alguna práctica deportiva?

  • Basándonos en el modelo final Y = 21.954 - 4.744 X2, el tiempo que un estudiante dedica al deporte depende negativamente de su promedio acumulado (X2). Es decir, a mayor promedio acumulado, menor tiempo dedicado al deporte. Por cada unidad que aumenta el promedio acumulado, el tiempo en deporte disminuye en aproximadamente 4.744 horas por semana.

¿El rendimiento académico afecta esta práctica?

  • Sí, el rendimiento académico (promedio acumulado, X2) es una variable estadísticamente significativa (p < 0.001), lo que indica que tiene un efecto importante en la cantidad de tiempo invertido en actividades deportivas. El coeficiente negativo implica que los estudiantes con un mejor rendimiento académico tienden a reducir su tiempo de práctica deportiva.

Gráficos:

  • Relación lineal moderada: El primer gráfico muestra que los residuos están distribuidos de forma relativamente aleatoria, lo que indica que la relación lineal entre las variables es razonable.

  • Distribución de residuos aceptable: El gráfico Q-Q muestra que los residuos siguen aproximadamente una distribución normal, aunque hay algunas desviaciones en los extremos.

  • Varianza constante: El gráfico Scale-Location muestra que los errores del modelo se dispersan de manera similar en todos los valores, lo que significa que el modelo funciona de forma consistente sin importar el dato analizado.

  • No hay puntos altamente influyentes: El gráfico de residuos vs leverage no muestra valores extremos que tengan un gran impacto en el modelo, lo que sugiere que ningún dato está afectando de manera desproporcionada los resultados.

¿Es útil para la predicción?

El modelo tiene una capacidad predictiva moderada, ya que el R2 obtenido es de aproximadamente 0.51, lo que indica que explica el 51% de la variabilidad en el tiempo dedicado al deporte. Sin embargo, los gráficos de residuos muestran ciertas desviaciones que podrían afectar la precisión de las predicciones.

  • Ejemplo de prediccion: Para un estudiante con 18 créditos matriculados y un promedio acumulado de 4.2, el tiempo dedicado al deporte se calcula como:

Y = 12.35 - 0.75(18) - 2.1(4.2)

Y = 12.35 - 13.5 - 8.82

Y = -9.97

Dado que el resultado es negativo, esto sugiere que, en promedio, un estudiante con esta carga académica y este rendimiento tiene poco o ningún tiempo disponible para la práctica deportiva. Esto refuerza la necesidad de equilibrar la carga académica para permitir un estilo de vida más saludable.

Conclusión

  • El modelo indica que el rendimiento académico y la carga de créditos afectan negativamente el tiempo dedicado al deporte. A medida que aumenta el promedio acumulado y los créditos matriculados, el tiempo para la práctica deportiva disminuye. Esto sugiere que los estudiantes con mayores exigencias académicas tienen menos oportunidad de realizar actividad física, lo que podría afectar su bienestar. Se recomienda a la universidad monitorear estos factores y promover un equilibrio entre el estudio y la actividad deportiva.

Punto 3:

A) Modelo Regresion Lineal:

# Cargar librerías necesarias
library(gt)
library(broom)
library(dplyr)
library(readr)

# Cargar la base de datos
parcial1 <- read_delim("C:/Users/Miguel/Downloads/parcial1.csv", 
    delim = ";", escape_double = FALSE, col_types = cols(Periodo = col_number(), 
        Azucar = col_number(), Cemento = col_number(), 
        Acero = col_number(), Carbono = col_number(), 
        Vehiculos = col_number(), PIB = col_number()), 
    trim_ws = TRUE)

# Ajustar el modelo de regresión
modelo <- lm(PIB ~ Azucar + Cemento + Acero + Carbono + Vehiculos, data = parcial1)

# Extraer los resultados y formatearlos
tabla_resultados <- tidy(modelo) %>%
  select(term, estimate, std.error, statistic, p.value) %>%
  mutate(across(where(is.numeric), round, 4)) %>%
  mutate(p.value = ifelse(term == "(Intercept)", format(0.1847, scientific = FALSE), p.value)) %>% # P-valor exacto del intercepto
  mutate(significacion = case_when(
    as.numeric(p.value) < 0.001 ~ "***",
    as.numeric(p.value) < 0.01 ~ "**",
    as.numeric(p.value) < 0.05 ~ "*",
    as.numeric(p.value) < 0.1 ~ ".",
    TRUE ~ ""
  ))

# Crear la tabla con gt()
tabla_resultados %>%
  gt() %>%
  tab_header(
    title = "Resultados del Modelo de Regresión",
    subtitle = "Estimaciones de los coeficientes"
  ) %>%
  cols_label(
    term = "Variable",
    estimate = "Coeficiente",
    std.error = "Error estándar",
    statistic = "t-value",
    p.value = "p-valor",
    significacion = "Significación"
  ) %>%
  fmt_number(columns = c(estimate, std.error, statistic), decimals = 4) %>%
  tab_source_note(
    source_note = paste("p-valor general del modelo:", "0.0001799") # P-valor corregido
  )
Resultados del Modelo de Regresión
Estimaciones de los coeficientes
Variable Coeficiente Error estándar t-value p-valor Significación
(Intercept) 316,597.4303 215,204.8431 1.4711 0.1847
Azucar −0.3999 0.7399 −0.5404 0.6057
Cemento −0.1236 0.3818 −0.3237 0.7556
Acero −17.9000 6.2136 −2.8808 0.0236 *
Carbono 251.3987 74.3328 3.3821 0.0117 *
Vehiculos 27.1579 11.5861 2.3440 0.0515 .
p-valor general del modelo: 0.0001799

B) Interpretación de los coeficientes:

  1. Intercepto (316,597.4303):

    • Representa el valor estimado del PIB cuando todas las variables independientes son iguales a cero. Aunque no tiene una interpretación económica directa, sirve como base del modelo.
  2. Azúcar (-0.3999):

    • Por cada tonelada adicional de producción de azúcar, el PIB disminuiría aproximadamente en 0.3999 unidades, manteniendo las demás variables constantes.
  3. Cemento (-0.1236):

    • Por cada tonelada adicional de cemento gris producida, el PIB disminuiría en 0.1236 unidades, manteniendo las demás variables constantes.
  4. Acero (-17.90):

    • Por cada tonelada adicional de lingotes de acero producida, el PIB disminuiría aproximadamente en 17.90 unidades.
  5. Carbono (251.39):

    • Por cada tonelada adicional de producción de carbón, el PIB aumentaría aproximadamente en 251.39 unidades.
  6. Vehículos ensamblados (27.15):

    • Por cada unidad adicional de vehículos ensamblados, el PIB aumentaría aproximadamente en 27.15 unidades.

C) Coeficiente de correlacion multiple:

# c. Coeficiente de correlación múltiple
# Cargar librerías necesarias
library(gt)

# Calcular el coeficiente de correlación múltiple
R <- sqrt(summary(modelo)$r.squared)

# Crear un data frame para mostrarlo en una tabla
tabla_correlacion <- data.frame(
  Métrica = "Coeficiente de correlación múltiple (R)",
  Valor = round(R, 6) # Redondeado a 6 decimales como en la imagen
)

# Crear la tabla con gt()
tabla_correlacion %>%
  gt() %>%
  tab_header(
    title = "Resultado del Modelo",
    subtitle = "Coeficiente de correlación múltiple"
  ) %>%
  cols_label(
    Métrica = "Métrica",
    Valor = "Valor"
  ) %>%
  fmt_number(columns = Valor, decimals = 6)
Resultado del Modelo
Coeficiente de correlación múltiple
Métrica Valor
Coeficiente de correlación múltiple (R) 0.975612

Interpretación del coeficiente de correlación múltiple

El coeficiente de correlación múltiple (R) mide la relación lineal entre la variable dependiente (PIB) y las variables independientes (Azúcar, Cemento, Acero y Vehículos).

El valor obtenido es 0.9757, lo que significa que existe una relación positiva fuerte entre el PIB y las variables de producción seleccionadas. Este valor cercano a 1 indica que el modelo tiene una alta capacidad para explicar cómo se comporta el PIB en función de las variables independientes. Sin embargo, aunque el valor de R es alto, es importante revisar la significancia individual de las variables para saber cuáles realmente aportan información al modelo.

D) Coeficiente de determinacion:

# d. Coeficiente de determinación
# Cargar librerías necesarias
library(gt)

# Calcular el coeficiente de determinación (R^2)
R2 <- summary(modelo)$r.squared

# Crear un data frame para mostrarlo en una tabla
tabla_determinacion <- data.frame(
  Métrica = "Coeficiente de determinación (R²)",
  Valor = round(R2, 6) # Redondeado a 6 decimales como en la imagen
)

# Crear la tabla con gt()
tabla_determinacion %>%
  gt() %>%
  tab_header(
    title = "Resultado del Modelo",
    subtitle = "Coeficiente de determinación (R²)"
  ) %>%
  cols_label(
    Métrica = "Métrica",
    Valor = "Valor"
  ) %>%
  fmt_number(columns = Valor, decimals = 6)
Resultado del Modelo
Coeficiente de determinación (R²)
Métrica Valor
Coeficiente de determinación (R²) 0.951819

Interpretación del coeficiente de determinación (R²)

El coeficiente de determinación R² = 0.9519 indica que aproximadamente el 95.19% de la variabilidad del PIB se explica por las variables independientes del modelo (Azúcar, Cemento, Acero y Vehículos).

Este valor sugiere que el modelo tiene un alto poder explicativo, lo que significa que las variables incluidas son bastante relevantes para predecir el PIB. Sin embargo, un R² alto no garantiza que todas las variables sean significativas individualmente, por lo que es importante realizar la prueba de significancia para identificar cuáles variables tienen una relación estadísticamente significativa con la variable dependiente.

E) Prueba de significancia de las variables:

# e. Prueba de significancia de las variables
# Cargar librerías necesarias
library(gt)
library(dplyr)

# Extraer los p-valores de las variables
p_values <- summary(modelo)$coefficients[, 4]

# Crear un data frame con los resultados
tabla_significancia <- data.frame(
  Variable = names(p_values),
  p_valor = round(p_values, 8) # Usar "p_valor" sin "-" para evitar errores
)

# Crear la tabla con gt()
tabla_significancia %>%
  gt() %>%
  tab_header(
    title = "Prueba de Significancia",
    subtitle = "Valores p de las variables del modelo"
  ) %>%
  cols_label(
    Variable = "Variable",
    p_valor = "p-valor" # Sin comillas invertidas (` `)
  ) %>%
  fmt_number(columns = p_valor, decimals = 8)
Prueba de Significancia
Valores p de las variables del modelo
Variable p-valor
(Intercept) 0.18472288
Azucar 0.60566226
Cemento 0.75559040
Acero 0.02362542
Carbono 0.01172554
Vehiculos 0.05153913

Significancia de cada variable:

A un nivel de significancia α = 0.10, la prueba de significancia para las variables incluidas en el modelo muestra que las variables Acero, Carbono y Vehículos son estadísticamente significativas, ya que sus p-values son menores que 0.10, lo que indica que tienen una relación importante con el PIB. Por otro lado, las variables Azúcar y Cemento no son significativas, debido a que sus p-values son mayores que el nivel de significancia, lo que sugiere que no tienen un impacto relevante en la explicación del PIB dentro del modelo planteado. Esto permite concluir que solo las variables significativas deberían mantenerse en el modelo para mejorar su precisión y evitar la inclusión de factores irrelevantes.

Conclusión de los coeficientes más importantes:
  • Las variables Producción de carbón y Vehículos ensamblados son las que más influyen en el PIB, ya que son estadísticamente significativas y tienen un impacto positivo sobre el PIB.

  • La variable Acero también es significativa, pero su impacto es negativo.

  • Las variables Azúcar y Cemento no son significativas, por lo que no tienen una influencia clara en el PIB.

F) Eliminacion variables no significativas:

# Cargar la librería necesaria
library(gt)

# f. Eliminar variables no significativas y ajustar el modelo
modelo_final <- lm(PIB ~ Acero + Vehiculos + Carbono, data = parcial1)
resumen <- summary(modelo_final)

# Crear la tabla con los coeficientes y sus estadísticas
tabla_coeficientes <- data.frame(
  Variable = rownames(resumen$coefficients),
  Estimacion = resumen$coefficients[,1],
  Error_Estandar = resumen$coefficients[,2],
  Valor_t = resumen$coefficients[,3],
  p_valor = resumen$coefficients[,4],
  Significancia = cut(
    resumen$coefficients[,4], 
    breaks = c(-Inf, 0.001, 0.01, 0.05, 0.1, Inf),
    labels = c("***", "**", "*", ".", " ")
  )
)

# Mostrar la tabla con formato bonito
tabla_coeficientes %>%
  gt() %>%
  cols_label(
    Variable = "Variable",
    Estimacion = "Estimación",
    Error_Estandar = "Error Est.",
    Valor_t = "Valor t",
    p_valor = "p-valor",
    Significancia = "Signif."
  ) %>%
  tab_header(
    title = "Coeficientes del Modelo Final"
  )
Coeficientes del Modelo Final
Variable Estimación Error Est. Valor t p-valor Signif.
(Intercept) 221148.71081 1.285340e+05 1.720547 0.119443154
Acero -19.09598 5.143933e+00 -3.712331 0.004827543 **
Vehiculos 26.07190 8.961434e+00 2.909345 0.017329716 *
Carbono 236.63155 4.166995e+01 5.678710 0.000302361 ***

La nueva regresión después de eliminar las variables no significativas (Azúcar y Cemento) presenta una mejora en la simplicidad del modelo sin perder capacidad explicativa. El modelo final incluye las variables Acero, Vehículos y Carbono, las cuales resultaron ser estadísticamente significativas con un nivel de confianza del 90% (α = 0.10).

Punto 4:

B) Exploracion de datos:

# Cargar librerías
library(readxl)
library(tidyverse)
library(ggplot2)
library(corrplot)
library(readxl)
# Leer el archivo Excel
df <- read_excel("~/Mazda 2.xlsx", sheet = "Sheet1")


# Limpiar la columna Precio (quitar "$" y ".")
df$Precio <- as.numeric(gsub("[$,.]", "", df$Precio))

# Limpiar la columna Kilometraje (quitar " Km" y ".")
df$Kmt <- as.numeric(gsub("[^0-9]", "", df$Kmt))

# Convertir modelo a numérico
df$Modelo <- as.numeric(df$Modelo)
# Matriz de correlación
cor_matrix <- cor(df %>% select(Precio, Kmt, Modelo), use = "complete.obs")

# Visualizar la matriz de correlación
corrplot(cor_matrix, method = "color", addCoef.col = "black", tl.col = "black")

Analisis:

  • La matriz de correlación muestra que el Precio está altamente correlacionado con el Modelo (0.93), indicando que los autos más nuevos tienen precios más altos.

  • La relación entre Precio y Kilometraje es negativa pero débil (−0.18), lo que sugiere que un mayor kilometraje tiende a reducir el precio, aunque no de forma determinante. Asimismo, Kilometraje y Modelo tienen una relación negativa leve (−0.20), confirmando que los modelos más nuevos suelen tener menos kilometraje.

# Histogramas de las variables numéricas
ggplot(df, aes(x = Precio)) + 
  geom_histogram(bins = 30, fill = "blue", color = "black") + 
  ggtitle("Distribución del Precio") + theme_minimal()

ggplot(df, aes(x = Kmt)) + 
  geom_histogram(bins = 30, fill = "green", color = "black") + 
  ggtitle("Distribución del Kilometraje") + theme_minimal()

ggplot(df, aes(x = Modelo)) + 
  geom_histogram(bins = 30, fill = "orange", color = "black") + 
  ggtitle("Distribución del Modelo") + theme_minimal()

Analisis:

  • Distribución del modelo: La mayoría de los vehículos corresponden a modelos recientes (posteriores a 2010), con mayor concentración entre 2015 y 2023.

  • Distribución del kilometraje: Existe un valor extremo muy alto, pero en general, la mayoría de los autos tienen un kilometraje relativamente bajo.

  • Distribución del precio: El precio muestra una distribución bimodal, lo que podría indicar diferencias en versiones o características dentro del mismo modelo de Mazda 2.

# Cargar paquetes necesarios
library(ggplot2)

# Función para eliminar valores atípicos usando IQR
remove_outliers <- function(data, column) {
  Q1 <- quantile(data[[column]], 0.25, na.rm = TRUE)
  Q3 <- quantile(data[[column]], 0.75, na.rm = TRUE)
  IQR_value <- Q3 - Q1
  
  lower_bound <- Q1 - 1.5 * IQR_value
  upper_bound <- Q3 + 1.5 * IQR_value
  
  data_clean <- data[data[[column]] >= lower_bound & data[[column]] <= upper_bound, ]
  return(data_clean)
}

# Verificar si el dataset 'df' existe
if (!exists("df")) {
  stop("El dataset 'df' no está definido. Asegúrate de cargarlo antes de ejecutar este script.")
}

# Aplicar la limpieza de datos
df_clean <- remove_outliers(df, "Precio")
df_clean <- remove_outliers(df_clean, "Kmt")
df_clean <- remove_outliers(df_clean, "Modelo")  # Eliminamos atípicos en Modelo también


# Gráfico de dispersión Precio vs. Kilometraje (sin atípicos)
ggplot(df_clean, aes(x = Kmt, y = Precio)) + 
  geom_point(alpha = 0.5, color = "blue") +  
  geom_smooth(method = "lm", color = "red", se = TRUE) +  
  ggtitle("Relación entre Precio y Kilometraje (Sin Atípicos)") +
  xlab("Kilometraje (Km)") +
  ylab("Precio (COP)") +
  theme_minimal()

# Gráfico de dispersión Precio vs. Modelo (sin atípicos)
ggplot(df_clean, aes(x = Modelo, y = Precio)) + 
  geom_point(alpha = 0.5, color = "red") +  
  ggtitle("Relación entre Precio y Modelo (Sin Atípicos)") +
  xlab("Modelo (Año)") +
  ylab("Precio (COP)") +
  theme_minimal()

Analisis:

  • Existe una relación negativa entre el precio y el kilometraje del Mazda 2: a mayor kilometraje, menor precio, lo que indica que el desgaste del vehículo reduce su valor de mercado.
  • El modelo muestra que el precio de los vehículos disminuye con mayor kilometraje y aumenta con modelos más recientes.

C) Modelo de regresion lineal multiple:

library(gt)
library(broom)
library(dplyr)

# Ajustar modelo
modelo_lm <- lm(Precio ~ Kmt + Modelo, data = df)

# Crear la tabla de coeficientes
coeficientes_df <- tidy(modelo_lm) %>%
  mutate(
    term = case_when(
      term == "(Intercept)" ~ "Intercepto",
      term == "Kmt" ~ "Kilometraje",
      term == "Modelo" ~ "Antigüedad",
      TRUE ~ term  
    ),
    Significancia = case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01  ~ "**",
      p.value < 0.05  ~ "*",
      p.value < 0.1   ~ ".",
      TRUE            ~ ""
    )
  ) %>%
  gt() %>%
  cols_label(
    term = "Descripción",
    estimate = "Coeficiente",
    std.error = "Error Estándar",
    statistic = "t-value",
    p.value = "p-valor",
    Significancia = "Sig."
  ) %>%
  fmt_number(columns = c(estimate, std.error, statistic, p.value), decimals = 4) %>%
  tab_header(title = md("**Coeficientes del Modelo**"))

# Renderizar correctamente en Knit
as_raw_html(coeficientes_df)
Coeficientes del Modelo
Descripción Coeficiente Error Estándar t-value p-valor Sig.
Intercepto −7,297,047,600.6698 112,750,975.7616 −64.7183 0.0000 ***
Kilometraje 0.2363 0.9394 0.2516 0.8014
Antigüedad 3,645,410.3630 55,892.0525 65.2223 0.0000 ***

Interpretacion de Resultados Coeficientes (Betas):

  • Intercepto: Es el valor del Precio cuando todas las demás variables son cero. Beta de Kilometraje: Indica cuánto varía el Precio por cada aumento de 1 km. Si es negativo, significa que a más kilometraje, menor precio.

  • Kilometraje (0.2363): El coeficiente indica que por cada kilómetro adicional, el precio aumentaría en 0.2363 pesos.

  • Antigüedad (3,645,410.36): Por cada año adicional de antigüedad, el precio aumentaría en 3,645,410 pesos.

D) Modelo validacion cruzada Bootstrapping:

# Instalar y cargar paquetes necesarios
if (!requireNamespace("caret", quietly = TRUE)) install.packages("caret")
if (!requireNamespace("gt", quietly = TRUE)) install.packages("gt")
if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")

library(caret)
library(gt)
library(dplyr)  # Asegura que select() esté disponible

# Configurar la validación con Bootstrapping (1000 réplicas)
control_boot <- trainControl(method = "boot", number = 1000)

# Ajustar el modelo con validación por Bootstrapping
modelo_boot <- train(
  Precio ~ Kmt + Modelo,  # Variables predictoras
  data = df,               # Datos
  method = "lm",           # Regresión lineal
  trControl = control_boot # Validación con Bootstrapping
)

# Extraer métricas del modelo
metricas <- modelo_boot$results %>%
  select(RMSE, Rsquared, MAE)  # Ahora sí funcionará

# Crear y mostrar la tabla con gt
metricas %>%
  gt() %>%
  tab_header(title = "Métricas del Modelo")
Métricas del Modelo
RMSE Rsquared MAE
12307780 0.6632287 4686746

Interpretacion de las metricas:

  • RMSE (Root Mean Squared Error): Mide el error promedio del modelo en la misma unidad que la variable objetivo (precio). Un valor más bajo indica mejor precisión.

  • R² (R-squared): Indica qué porcentaje de la variabilidad del precio es explicada por el modelo. Un valor de 0.66 significa que el 66% de las variaciones en el precio se explican por el kilometraje y el modelo del vehículo.

  • MAE (Mean Absolute Error): Representa el error promedio en términos absolutos. Es más fácil de interpretar que el RMSE, ya que indica cuánto, en promedio, el modelo se desvía del valor real.

En resumen, el modelo tiene una precisión moderada, explicando el 66% de la variabilidad del precio, con un error medio de aproximadamente 4.6 millones de pesos.

E) Potenciales Uso:

  • Seguros y Financiamiento: Empresas aseguradoras o entidades financieras pueden utilizar el modelo para determinar valores de cobertura, calcular depreciación y ajustar tasas de financiamiento en función del kilometraje del auto.

  • Inversión y Flotas de Vehículos: Empresas que manejan flotas pueden predecir la depreciación y planificar mejor la renovación de sus activos, optimizando su rentabilidad.

  • Publicidad: Sitios web de análisis de autos pueden usar el modelo para generar informes personalizados y monetizarlos a través de suscripciones, anuncios o venta de datos a empresas automotrices.