2024-06-02

Configuración del primer chunk

#Configuración

{r setup, include=FALSE}

knitr::opts_chunk$set(echo = TRUE, eval = FALSE)

Cargar librerías

require(pacman)
pacman::p_load(dplyr, readr, knitr, ggplot2, corrplot, flextable, readxl,
GGally, lmtest, car, stargazer, rsm, PerformanceAnalytics, openxlsx)

EJERCICIO 1

Producción de madera aserrada en un período de 10 años (1990-1999) expresada en miles de m³.

Cargar datos

df <- as.data.frame(read.xlsx("E:/[FAT32]/ACTIVIDAD DE TITULACION I (2023)/CLASE 10 REGRESION LINEAL/madera.xlsx"))

Tabla con datos

#Mostrar tabla con datos de las variables

flextable(df)

Tipos de variables

#Estructura del set de datos

str(df)

Attachar memoria

#Fijar nombre de variables en la memoria

attach(df)

Summary

#Resumen del set de datos (datos numéricos de las variables)

summary(df)

Gráfico de dispersión

#Gráfico de dispersión del conjunto de variables

ggplot(data=df, mapping= aes(x= Años, y= Madera)) +
  geom_point(color = "blue", size= 2) +
  labs(title= "Diagrama de Dispersión", x= "pH", y= "Biomasa") +
  theme_bw() + 
  theme(plot.title = element_text(hjust = 0.5))

Gráfico de correlaciones

#Gráfico de correlaciones

chart.Correlation(df)
cor(df)  

Pruebas de Correlación

#Test de correlación (“pearson”, “kendall”, “spearman”)

cor.test(x = Años, y = Madera, method = "pearson") #cuantitativas con comportamiento normal
cor.test(x = Años, y = Madera, method = "kendall") #variables cualitativas de tipo ordinal
cor.test(x = Años, y = Madera, method = "spearman") #cuantitativas no siguen un comportamiento normal

Correlación de Pearson

#Otra forma de aplicar la Correlación de Pearson entre 2 variables

cor(Años, Madera)
cor(Madera, Años)

Cálculo del modelo de regresión lineal simple

#Modelo de regresión lineal simple

modelo.lineal <- lm(Madera ~ Años, data = df)
summary(modelo.lineal)

Nota:

Modelo 1

Modelo 1: \[\hat{y}=38.681{x}-76560.279\]

Evaluación de los supuestos

#Contraste de hipótesis (normalidad de los residuos)

shapiro.test(modelo.lineal$residuals)

Comentarios:

Prueba de homocedasticidad

#Test de Breush-Pagan (homocedasticidad de los residuos)

bptest(modelo.lineal)

Comentarios:

Test de Autocorrelación

#Prueba de Durbin – Watson Usando libreria “lmtest”

  • \(H_0\): No existe correlación entre los residuales

  • \(H_1\): Los resisuales están autocorrelacionados

dwtest(modelo.lineal,alternative ="two.sided",iterations = 1000)

Comentarios:

Identificación de posibles valores atípicos o influyentes

#Residuos estudentizados

df$studentized_residual <- rstudent(modelo.lineal)
ggplot(data = df, aes(x = predict(modelo.lineal), y = abs(df$studentized_residual))) +
  geom_hline(yintercept = 3, color = "grey", linetype = "dashed") +
  geom_point(aes(color = ifelse(abs(df$studentized_residual) > 3, 'red', 'black'))) +
  scale_color_identity() +
  labs(title = "Distribución de los residuos studentized",
       x = "predicción modelo") + 
  theme_bw() + theme(plot.title = element_text(hjust = 0.5))
which(abs(df$studentized_residual) > 3)

No aparecen valores de color rojo, es decir, no existen valores atípicos o extremos

Valores influyentes

#Valores influyentes

summary(influence.measures(model = modelo.lineal))

Nota:

Gráfico de valores influyentes

#Gráfico de valores influyentes

influencePlot(model = modelo.lineal)

Recta de regresión

#Recta de regresión con y sin valor de mayor influencia

ggplot(data = df, mapping = aes(x = Años, y = Madera)) +
  geom_point(color = "grey50", size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  geom_point(data = df[10, ], color = "red", size = 2) +
  geom_smooth(data = df[-10, ], method="lm", se =FALSE,color = "blue") +
  labs(x = "Años", y = "Madera Aserrada") +   
  theme_bw() + 
  theme(plot.title = element_text(hjust = 0.5), legend.position = "none")

Modelo 2 (sin dato número 10)

#Modelo eliminando el dato número 10

modelo.lineal2 <- lm(Madera ~ Años, data = df[-10,])
summary(modelo.lineal2)

Modelo 2: \[\hat{y}=36.40{x}-72008.94\]

Uso del modelo para predecir nuevas observaciones

  • Volumen de Madera Aserrada PROMEDIO que esperaríamos para los años 2000, 2001 y 2002

#Predecir nuevos valores creando un data frame

nuevos.Valores <- data.frame(Años = c(2000, 2001, 2002))
nuevos.Valores

Ejecutando la predicción

#Ejecución de la predicción

prediccion <- predict(modelo.lineal2, newdata = nuevos.Valores, interval="prediction")
prediccion

Detachar memoria

#Liberar nombres de variables de la memoria

detach(df)

Limpieza del ambiente de trabajo

#Limpiar Ambiente de Trabajo

rm(list = ls())