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

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 <- "C:/Users/Miguel/Downloads/Excel JD 2 punto.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 <- "C:/Users/Miguel/Downloads/Excel JD 2 punto.xlsx"

# Cargar los datos desde el archivo Excel, empezando desde la fila correcta
df <- read_excel(file_path, sheet = "Ejercicio 2", skip = 6)

# 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) 28.1576 4.2757 6.5855 0.0000 ***
X1 −0.9186 0.2284 −4.0227 0.0010 ***
X2 −2.3938 0.9223 −2.5954 0.0195 *
X3 0.0936 0.0932 1.0040 0.3303
R² múltiple: 0.7775

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

Significancia del modelo:

  • El R² = 0.7775 indica que el modelo explica aproximadamente el 77.77% de la variabilidad en las horas dedicadas al deporte. Este valor indica un buen ajuste del modelo, lo que sugiere que los factores incluidos tienen una influencia importante en la práctica deportiva de los estudiantes. Evaluación de las variables:

  • Intercepto (28.1576) Es altamente significativo (p < 0.001). Representa el tiempo estimado de práctica deportiva cuando todas las variables explicativas son cero. En la práctica, esto no es realista, pero sirve como punto de referencia en la ecuación del modelo.

  • X1 (Créditos matriculados, -0.9186) Es altamente significativo (p = 0.0010). Un aumento en los créditos matriculados se asocia con una reducción en el tiempo dedicado al deporte. Cada crédito adicional reduce el tiempo de deporte en aproximadamente 0.9186 horas por semana.

  • X2 (Promedio acumulado, -2.3938) Es significativo (p = 0.0195). Un aumento en el promedio acumulado se asocia con una reducción en el tiempo dedicado al deporte. Cada punto adicional en el promedio reduce en aproximadamente 2.3938 horas semanales la práctica deportiva. Esto sugiere que los estudiantes con mejor rendimiento académico priorizan más sus estudios que la actividad deportiva.

  • X3 (Horas de ocio, 0.0936) No es significativo (p = 0.3303). No hay evidencia estadística de que el tiempo de ocio tenga una relación clara con las horas de deporte. Aunque el coeficiente es positivo, la alta p-value sugiere que este resultado podría deberse al azar.

Interpretación de los coeficientes

  • El intercepto (28.1576) representa la cantidad estimada de horas de deporte cuando X1 (Créditos matriculados), X2 (Promedio acumulado) y X3 (Horas de ocio) son 0. Aunque este escenario no es realista, sirve como punto de referencia en la ecuación del modelo.

  • X1 (Créditos matriculados, -0.9186) es altamente significativo (p = 0.0010). Su coeficiente negativo indica que un mayor número de créditos matriculados está asociado con una menor cantidad de horas de deporte. Por cada crédito adicional matriculado, el tiempo de deporte disminuye en 0.9186 horas semanales. Esto sugiere que una mayor carga académica reduce el tiempo disponible para la actividad deportiva.

  • X2 (Promedio acumulado, -2.3938) es significativo (p = 0.0195). Un aumento en el promedio académico se asocia con una reducción en las horas de deporte. En promedio, un punto adicional en el promedio acumulado reduce 2.3938 horas el tiempo dedicado al deporte. Esto puede indicar que los estudiantes con mejor rendimiento académico priorizan más sus estudios y reducen el tiempo dedicado a actividades deportivas.

  • X3 (Horas de ocio, 0.0936) no es significativo (p = 0.3303). Aunque su coeficiente es positivo, la alta p-value indica que no hay suficiente evidencia estadística para afirmar que el tiempo de ocio influye en la práctica deportiva. Sin embargo, el signo positivo sugiere que, en promedio, quienes tienen más tiempo libre podrían dedicar más horas al 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. El coeficiente de determinación (R² = 0.7775) sugiere que el 77.75% de la variabilidad en las horas de deporte (Y) es explicada por las variables X1 (Créditos matriculados), X2 (Promedio acumulado) y X3 (Horas de ocio). Esto implica un buen ajuste del modelo, aunque aún hay un porcentaje de variabilidad que podría deberse a otros factores no considerados.

  • Tanto el promedio acumulado (X2) como los créditos matriculados (X1) son estadísticamente significativos, lo que indica que estas variables tienen un impacto relevante en la cantidad de horas dedicadas al deporte. X2 tiene un coeficiente negativo, lo que sugiere que un mejor desempeño académico está asociado con una menor práctica deportiva. X1 también tiene un coeficiente negativo, lo que indica que una mayor carga académica se asocia con menos horas de deporte.

  • El tiempo de ocio (X3) no es estadísticamente significativo, lo que sugiere que no hay suficiente evidencia para afirmar que esta variable influye en la práctica deportiva de manera consistente. Sin embargo, su coeficiente positivo sugiere que los estudiantes con más tiempo libre podrían dedicar más horas al deporte, aunque esta relación no es concluyente.

C) Ajuste Modelo α=0.05:

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

# Ajustar un nuevo modelo con X1 y X2
modelo_reducido <- lm(Y ~ X1 + 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") %>%
  kable_styling() %>%
  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) 30.41937 3.63494 8.36861 0.00000 ***
X1 -0.93805 0.22758 -4.12180 0.00071 ***
X2 -2.72632 0.86104 -3.16632 0.00564 **
a R² múltiple: 0.76343

El modelo reducido conserva únicamente las variables X1 y X2, lo que indica que las demás variables fueron eliminadas por no ser estadísticamente significativas.

X1 tiene un impacto claro y significativo (p < 0.001), con un coeficiente negativo, lo que sugiere que un mayor número de créditos matriculados está asociado con una menor cantidad de horas dedicadas al deporte.

X2 también es significativo (p = 0.00564, **), con un coeficiente negativo, lo que indica que un mejor desempeño académico (mayor promedio acumulado) se asocia con una reducción en la práctica deportiva.

El coeficiente de determinación (R² = 0.76343) indica que el modelo explica aproximadamente el 76.34% de la variabilidad en las horas dedicadas al deporte, lo que sugiere un buen ajuste y confirma que las variables eliminadas no aportaban información relevante al modelo. ### 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:

¿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:

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

¿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(readr)
library(kableExtra)
library(broom)
library(dplyr)

# Cargar la base de datos
parcial1 <- read_delim("C:/Users/Miguel/Downloads/parcial1.csv", 
    delim = ";", escape_double = FALSE, trim_ws = TRUE)

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

# Obtener los coeficientes del modelo y redondear valores
tabla_modelo <- tidy(modelo) %>%
  mutate(across(where(is.numeric), ~round(.x, 4))) %>%
  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)

# Renombrar columnas para que coincidan con la imagen
colnames(tabla_modelo) <- c("Descripción", "Coeficiente", "Error estándar", 
                            "t value", "Pr(>|t|)", "")

# Crear tabla con formato visual mejorado
tabla_modelo %>%
  kable(format = "html", caption = enc2utf8("Resumen del Modelo de Regresión")) %>% 
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE) %>%
  column_spec(1, bold = TRUE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#0073C2") %>%
  add_header_above(c(" " = 1, "Estimaciones del Modelo" = 5))
Resumen del Modelo de Regresión
Estimaciones del Modelo
Descripción Coeficiente Error estándar t value Pr(>|t|)
(Intercept) 364351.1634 217649.5716 1.6740 0.1380
Azucar -0.5554 0.7209 -0.7704 0.4663
Cemento -0.1877 0.3674 -0.5109 0.6251
Acero -17.8016 6.0016 -2.9662 0.0209
Vehiculos 27.9751 11.4777 2.4373 0.0449
Carbono 261.5639 71.8254 3.6417 0.0083 **

B) Interpretación de los coeficientes:

Interpretación de los coeficientes:

  • Intercepto (364351.163):Representa el valor estimado del PIB cuando todas las variables independientes son iguales a cero. No tiene una interpretación económica directa, pero sirve como punto de partida del modelo.

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

  • Cemento (-0.188):Por cada tonelada adicional de producción de cemento, el PIB disminuiría aproximadamente en 0.19 unidades, manteniendo las demás variables constantes.

  • Acero (-17.802):Por cada tonelada adicional de producción de acero, el PIB disminuiría aproximadamente en 17.8 unidades, manteniendo las demás variables constantes.

  • Carbono (261.564):Por cada tonelada adicional de producción de carbón, el PIB aumentaría aproximadamente en 261.56 unidades, manteniendo las demás variables constantes.

  • Vehículos ensamblados (27.975):Por cada unidad adicional de vehículos ensamblados, el PIB aumentaría aproximadamente en 27.98 unidades, manteniendo las demás variables constantes.

C) Coeficiente de correlacion multiple:

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

# Cargar librerías necesarias
library(kableExtra)

# Crear la tabla con formato bonito
kable(data.frame(Coeficiente = "Coeficiente de correlacion multiple (R)", Valor = round(R, 6)),
      caption = "Coeficiente de Correlacion Multiple",
      col.names = c("Metrica", "Valor"),
      align = c("l", "c")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
Coeficiente de Correlacion Multiple
Metrica Valor
Coeficiente de correlacion multiple (R) 0.976392

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
R2 <- summary(modelo)$r.squared
library(kableExtra)
kable(data.frame(Coeficiente = "R^2", Valor = R2),
      caption = "Coeficiente de Determinacion",
      col.names = c("Metrica", "Valor"),
      align = c("l", "c")) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
Coeficiente de Determinacion
Metrica Valor
R^2 0.9533416

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.13803841
Azucar 0.46628041
Cemento 0.62512280
Acero 0.02092156
Vehiculos 0.04493412
Carbono 0.00826886

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 = "Estimacion",
    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 Estimacion Error Est. Valor t p-valor Signif.
(Intercept) 220575.07656 1.310270e+05 1.683433 0.1265806482
Acero -19.14138 5.269978e+00 -3.632155 0.0054672409 **
Vehiculos 25.72397 9.050943e+00 2.842132 0.0193357898 *
Carbono 239.32622 4.211514e+01 5.682664 0.0003008476 ***

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.

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
11888998 0.6760775 4675983

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 Usos:

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