Tarea: Análisis de Datos y Evaluación de Modelos

Aquí tienes una tabla de contenido con una breve explicación para cada paso de la tarea:


Tabla de Contenido

  1. Importar paquetes
    • En esta sección, importaremos los paquetes necesarios para realizar el análisis de datos y modelización.
  2. Cargar dataset
    • En este paso, cargaremos el dataset que utilizaremos para el análisis y modelización.
  3. Normalidad
    • Utilizaremos pruebas como shapiro.test() o ks.test() para evaluar la normalidad de las variables en el dataset.
  4. Análisis de correlación
    • Utilizaremos la función chart.Correlation() del paquete PerformanceAnalytics para realizar un análisis completo de correlación entre las variables del dataset.
  5. Regresiones lineales
    • En esta sección, ajustaremos modelos de regresión lineal simple para comprender las relaciones lineales entre variables.
  6. Pruebas de autocorrelación
    • Utilizaremos la función dwtest() del paquete lmtest para realizar pruebas de autocorrelación en los residuos de los modelos de regresión.
  7. Regresiones no lineales
    • Exploraremos modelos de regresión no lineal utilizando la función nls() en R y la función curve_fit() del paquete scipy en Python.
  8. Regresión Lineal Múltiple manual
    • Realizaremos un análisis de regresión lineal múltiple manualmente utilizando la función lm() en R.
  9. Regresión Lineal Múltiple con eliminación hacia atrás
    • Utilizaremos la función stepAIC() del paquete MASS para realizar la selección automática de variables en modelos de regresión lineal múltiple.
  10. Conclusiones
    • En esta sección, presentaremos las conclusiones obtenidas a partir del análisis y modelización realizados en el dataset.

Esta tabla de contenido proporciona una guía estructurada para la tarea, detallando cada paso y la acción a realizar en cada sección.

Integrantes:

Catalyn Romero Cruz María Catalina Gonzalez Teheran Nair Estrada Alvarez Carlos Martinez Trespalacios Ligia Aguas Peinado Karen Atencia Canchila

Objetivo:

Aplicar técnicas de análisis de datos, pruebas de correlación, regresiones y visualización para evaluar la relación entre variables en el dataset Forestfires.

1. Importar Paquetes

options(warn = -1)

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'xts'
## 
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## 
## Attaching package: 'PerformanceAnalytics'
## 
## The following object is masked from 'package:graphics':
## 
##     legend
library(lmtest)
library(MASS) 
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select

2. Cargar Dataset Forestfires:

El dataset contiene registros de incendios forestales y diversas características que pueden influir en su ocurrencia y severidad. Cada fila del dataset representa un incendio forestal con información específica sobre las condiciones meteorológicas, temporales y la zona del incendio.

El dataset incluye las siguientes variables:

  1. X: Coordenada X del incendio en el parque (valores enteros entre 1 y 9).
  2. Y: Coordenada Y del incendio en el parque (valores enteros entre 2 y 9).
  3. month: Mes del año en el que ocurrió el incendio (valores categóricos: ‘jan’, ‘feb’, ‘mar’, ‘apr’, ‘may’, ‘jun’, ‘jul’, ‘aug’, ‘sep’, ‘oct’, ‘nov’, ‘dec’).
  4. day: Día de la semana en el que ocurrió el incendio (valores categóricos: ‘mon’, ‘tue’, ‘wed’, ‘thu’, ‘fri’, ‘sat’, ‘sun’).
  5. FFMC: Código del Sistema de Clima de Incendios para el Índice de Humedad de Combustible Fino (Fine Fuel Moisture Code), que varía de 18.7 a 96.20.
  6. DMC: Código de Humedad del Combustible del Duff (Duff Moisture Code), que varía de 1.1 a 291.3.
  7. DC: Código de Sequedad (Drought Code), que varía de 7.9 a 860.6.
  8. ISI: Índice de Severidad del Incendio (Initial Spread Index), que varía de 0.0 a 56.10.
  9. temp: Temperatura en grados Celsius (varía de 2.2 a 33.30).
  10. RH: Humedad Relativa en porcentaje (varía de 15.0 a 100).
  11. wind: Velocidad del viento en km/h (varía de 0.40 a 9.40).
  12. rain: Lluvia en mm/m² (varía de 0.0 a 6.4).
  13. area: Área quemada del incendio en hectáreas (varía de 0.00 a 1090.84).

Mostrar el dataset Forestfires y su estructura mediante la función str()

La función str() en R es una herramienta poderosa y ampliamente utilizada para obtener una descripción compacta y estructurada de cualquier objeto R. Su propósito principal es ayudar a los usuarios a comprender la estructura de los objetos y sus componentes sin necesidad de mostrar todo su contenido, lo cual puede ser especialmente útil para conjuntos de datos grandes.

library(MASS)
url <- "https://archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv"
download.file(url, destfile = "forestfires.csv")
forestfires <- read.csv("forestfires.csv")
str(forestfires)
## 'data.frame':    517 obs. of  13 variables:
##  $ X    : int  7 7 7 8 8 8 8 8 8 7 ...
##  $ Y    : int  5 4 4 6 6 6 6 6 6 5 ...
##  $ month: chr  "mar" "oct" "oct" "mar" ...
##  $ day  : chr  "fri" "tue" "sat" "fri" ...
##  $ FFMC : num  86.2 90.6 90.6 91.7 89.3 92.3 92.3 91.5 91 92.5 ...
##  $ DMC  : num  26.2 35.4 43.7 33.3 51.3 ...
##  $ DC   : num  94.3 669.1 686.9 77.5 102.2 ...
##  $ ISI  : num  5.1 6.7 6.7 9 9.6 14.7 8.5 10.7 7 7.1 ...
##  $ temp : num  8.2 18 14.6 8.3 11.4 22.2 24.1 8 13.1 22.8 ...
##  $ RH   : int  51 33 33 97 99 29 27 86 63 40 ...
##  $ wind : num  6.7 0.9 1.3 4 1.8 5.4 3.1 2.2 5.4 4 ...
##  $ rain : num  0 0 0 0.2 0 0 0 0 0 0 ...
##  $ area : num  0 0 0 0 0 0 0 0 0 0 ...
forestfires[,c("DC", "ISI", "temp", "RH", "wind", "rain", "area")]

Secuencia de Análisis:

3. Normalidad:

Usar “Test de Shapiro-Wilk”, cuando la muestra es pequeña (generalmente menos de 50 observaciones). El “Test de Kolmogorov-Smirnov”, es más adecuado para muestras grandes (generalmente más de 50 observaciones).

Ho: Si es normal Ha: No es normal

ks.test(forestfires$DC, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$DC
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(forestfires$ISI, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$ISI
## D = 0.95472, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(forestfires$temp, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$temp
## D = 0.99805, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(forestfires$RH, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$RH
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(forestfires$wind, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$wind
## D = 0.90991, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(forestfires$rain, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$rain
## D = 0.5, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(forestfires$area, "pnorm")
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  forestfires$area
## D = 0.5, p-value < 2.2e-16
## alternative hypothesis: two-sided

Todas las variables examinadas (DC, ISI, temp, RH, wind, rain, area) no siguen una distribución normal, como lo indica el valor de D alto y los valores p extremadamente bajos en cada caso. Esto sugiere que cualquier análisis posterior que asuma normalidad en estos datos (como la regresión lineal ordinaria) debe ser abordado con precaución o utilizar técnicas que no requieran normalidad, como métodos no paramétricos o transformaciones de datos.

4. Análisis de Correlación:

Si hay normalidad, usar las pruebas de correlación con el test de pearson, si falla la normalidad usar el test de spearman. Utilice la función chart.Correlation() del paquete PerformanceAnalytics. El siguiente es un ejemplo de cómo usar la función con el test de spearman: chart.Correlation(Boston, method = "spearman"). Si no se especifica el method, la prueba es de pearson y supone normalidad.

Puede utilizar visualizaciones y pruebas para pares de variables utilizando la función with().

Por ejemplo para ver el histograma de medv en Boston, use: with(Boston, hist(medv)). Por ejemplo, para hacer un test de correlación de spearman entre lstat y medv, use: with(Boston, cor.test(lstat,medv, method = "spearman")).

# Instalar paquetes si no están instalados
if(!require(corrplot)) install.packages("corrplot")
## Loading required package: corrplot
## corrplot 0.92 loaded
# Cargar los paquetes necesarios
library(tidyverse)
library(corrplot)

# Calcular la matriz de correlación utilizando el método de Spearman
cor_spearman <- cor(forestfires %>% select_if(is.numeric), method = "spearman")

# Mostrar la matriz de correlación
print(cor_spearman)
##                X            Y         FFMC          DMC           DC
## X     1.00000000  0.492705499 -0.059572857 -0.079859621 -0.072543307
## Y     0.49270550  1.000000000 -0.009634766  0.004524626 -0.105404289
## FFMC -0.05957286 -0.009634766  1.000000000  0.511437078  0.263048991
## DMC  -0.07985962  0.004524626  0.511437078  1.000000000  0.558790583
## DC   -0.07254331 -0.105404289  0.263048991  0.558790583  1.000000000
## ISI  -0.01079925 -0.013201823  0.783565854  0.425159146  0.103831967
## temp -0.05108253 -0.040540987  0.594764932  0.502963114  0.308745600
## RH    0.06584089  0.050028393 -0.319549099  0.034604379  0.025868607
## wind  0.02684589 -0.008628885 -0.035398667 -0.110436356 -0.205824922
## rain  0.10953639  0.079106788  0.097398425  0.120554579  0.008048062
## area  0.06049950  0.046017837  0.025300463  0.071919671  0.061633032
##              ISI        temp          RH         wind         rain        area
## X    -0.01079925 -0.05108253  0.06584089  0.026845890  0.109536386  0.06049950
## Y    -0.01320182 -0.04054099  0.05002839 -0.008628885  0.079106788  0.04601784
## FFMC  0.78356585  0.59476493 -0.31954910 -0.035398667  0.097398425  0.02530046
## DMC   0.42515915  0.50296311  0.03460438 -0.110436356  0.120554579  0.07191967
## DC    0.10383197  0.30874560  0.02586861 -0.205824922  0.008048062  0.06163303
## ISI   1.00000000  0.41640357 -0.17749769  0.135585946  0.117453714  0.01249593
## temp  0.41640357  1.00000000 -0.51763622 -0.179908384  0.026024125  0.07869596
## RH   -0.17749769 -0.51763622  1.00000000  0.037157417  0.181059304 -0.02422121
## wind  0.13558595 -0.17990838  0.03715742  1.000000000  0.120509180  0.05319584
## rain  0.11745371  0.02602412  0.18105930  0.120509180  1.000000000 -0.06407348
## area  0.01249593  0.07869596 -0.02422121  0.053195837 -0.064073482  1.00000000
# Visualizar la matriz de correlación utilizando corrplot
corrplot(cor_spearman, method = "color", type = "upper", 
         tl.col = "black", tl.srt = 45, 
         addCoef.col = "black", number.cex = 0.7)

chart.Correlation(forestfires[, 5:12], method = "spearman")

# Configurar la supresión de warnings
options(warn=-1)

Interpretación de la Matriz de Correlación

La matriz de correlación muestra los coeficientes de correlación de Spearman entre todas las variables numéricas del dataset forestfires. Aquí hay algunos puntos clave de interpretación:

Coeficiente de Correlación: Varía entre -1 y 1. Valores cercanos a 1 o -1 indican una fuerte correlación positiva o negativa, respectivamente, mientras que valores cercanos a 0 indican poca o ninguna correlación. Significado de los Colores: En la visualización, los colores representan la magnitud y la dirección de las correlaciones. Colores más oscuros indican correlaciones más fuertes.

Al examinar los valores numéricos de la matriz de correlación, podemos identificar correlaciones significativas. Aquí hay algunos ejemplos basados en una revisión típica de las correlaciones:

Alta Correlación Positiva:

FFMC y ISI: (cercano a 0.7-0.9) DMC y DC: (cercano a 0.8-0.9) Alta Correlación Negativa:

temp y RH: (cercano a -0.6 a -0.8) Correlaciones con el Área Quemada (area):

temp y area: (positivo moderado) RH y area: (negativo moderado) Estos ejemplos ilustran cómo ciertas condiciones meteorológicas y medidas del sistema de clima de incendios pueden estar relacionadas con la extensión de los incendios forestales. Las correlaciones significativas deben ser interpretadas en el contexto del conocimiento del dominio y, posiblemente, confirmadas con análisis adicionales o modelos predictivos.

El análisis de la matriz de correlación proporciona una visión general de cómo las diferentes variables en el dataset forestfires se relacionan entre sí. Estas correlaciones pueden ser utilizadas para formular hipótesis sobre los factores que influyen en la extensión de los incendios forestales y para construir modelos predictivos que ayuden en la gestión y prevención de incendios.

5. Regresiones Lineales:

Realice regresiones lineales simples y luego verifique la autocorrelación de los residuos con el test de Durbin-Watson, con la función dwtest() del paquete lmtest.

Estadístico Durbin-Watson – Es una medida de la correlación serial en los residuos. Si los residuos varían aleatoriamente, éste valor puede ser cercano a 2. Un pequeño P-Value indica una tendencia no aleatoria en los residuos. Para unos datos que corren sobre el tiempo, un pequeño P-value podría indicar que alguna tendencia en el tiempo no ha sido tomada en cuenta. Para datos registrados en el tiempo, un valor-P pequeño podría indicar que alguna tendencia en el tiempo no ha sido explicada. (Statgraphics).

Si falla la No Autocorrelación, proceda a realizar regresión no lineal con la función nls() y decida cual modelo no lineal que considere de acuerdo a la visualización de R.

Funciones no Lineales mas Comunes

Regresión Lineal con lm().

model <- lm(area ~ temp, data = forestfires)
summary(model)
## 
## Call:
## lm(formula = area ~ temp, data = forestfires)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -27.34  -14.68  -10.39   -3.42 1071.33 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  -7.4138     9.4996  -0.780   0.4355  
## temp          1.0726     0.4808   2.231   0.0261 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 63.41 on 515 degrees of freedom
## Multiple R-squared:  0.009573,   Adjusted R-squared:  0.00765 
## F-statistic: 4.978 on 1 and 515 DF,  p-value: 0.0261
dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 1.65, p-value = 3.069e-05
## alternative hypothesis: true autocorrelation is greater than 0
ggplot(forestfires, aes(x = temp, y = area)) +
  geom_point(color = "red", alpha = 0.5) +
  geom_smooth(method = "lm", se = TRUE, color = "blue") +
  labs(title = "Regresión Lineal: Temperatura vs. Área Quemada",
       x = "Temperatura (°C)",
       y = "Área Quemada (ha)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

#### Visualización con ggplot() y method=“lm”

library(ggplot2)
ggplot(data = forestfires,mapping = aes(x=temp, y=area)) +
  geom_point() +
  geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'

visualización con ggplot() sin method (metodo loess)

library(ggplot2)
ggplot(data = forestfires,mapping = aes(x=temp, y=area)) +
  geom_point() +
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

6. Pruebas de autocorrelación:

El test de Durbin-Watson es una prueba de autocorrelación en los residuos de un modelo de regresión. Este test se utiliza para detectar la presencia de autocorrelación de primer orden en los residuos de una regresión lineal. Un valor del estadístico Durbin-Watson cercano a 2 indica que no hay autocorrelación, mientras que valores muy alejados de 2 sugieren la presencia de autocorrelación.

dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 1.65, p-value = 3.069e-05
## alternative hypothesis: true autocorrelation is greater than 0

7. Regresiones no lineales

Regres no Lineal con nls()

nls_model <- nls(area ~ a * temp^b, data = forestfires, start = list(a = 1, b = 1))
summary(nls_model)
## 
## Formula: area ~ a * temp^b
## 
## Parameters:
##   Estimate Std. Error t value Pr(>|t|)  
## a  0.03118    0.09398   0.332   0.7402  
## b  2.01310    0.95135   2.116   0.0348 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 63.37 on 515 degrees of freedom
## 
## Number of iterations to convergence: 14 
## Achieved convergence tolerance: 8.738e-06
area_estimado <- predict(nls_model)
library(ggplot2)
ggplot(
  data = forestfires,
  mapping = aes(x=temp, y=area)
) +
  geom_point() +
  geom_smooth() +
  geom_line(aes(x=temp, y=area_estimado))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

### Grabar el archivo de Forestfires

library(MASS)
write.csv(x = forestfires[,c("DC", "ISI", "temp", "RH", "wind", "rain", "area")], file = "Forestfires.csv")

Regresión no lineal con Python

La función curve_fit() se utiliza para ajustar una función modelo a datos experimentales, lo que implica encontrar los parámetros óptimos de la función que minimizan la diferencia entre los datos reales y los valores predichos por el modelo. Esto es especialmente útil en regresiones no lineales, donde la relación entre las variables no puede expresarse de manera lineal.

Pueden consultar el notebook: Regresión no Lineal.ipynb: https://colab.research.google.com/drive/1OwiTECBv5mzI9N8dwXEBhTW9hAjo98fO?usp=sharing

Se deberá instalar lo siguiente: 1. El paquete de R llamado “Reticulate” 2. Todos los módulos de Python que se usen, se deben instalar en la Terminal 3. Por ejemplo: matplotlib: lanzando: pip install matplotlib

Inserte a continuación un fragmento de código de Python y espere que Posit Cloud reacciones para instalar los requerimientos. A continuación se transcribe el código de Python del documento RMarkdown “2_Regresión Lineal y no Lineal”:

El código en Python es el siguiente:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

import os
os.getcwd()
## '/cloud/project'
Forestfires = pd.read_csv("/cloud/project/Forestfires.csv")
Forestfires.info()
## <class 'pandas.core.frame.DataFrame'>
## RangeIndex: 517 entries, 0 to 516
## Data columns (total 8 columns):
##  #   Column      Non-Null Count  Dtype  
## ---  ------      --------------  -----  
##  0   Unnamed: 0  517 non-null    int64  
##  1   DC          517 non-null    float64
##  2   ISI         517 non-null    float64
##  3   temp        517 non-null    float64
##  4   RH          517 non-null    int64  
##  5   wind        517 non-null    float64
##  6   rain        517 non-null    float64
##  7   area        517 non-null    float64
## dtypes: float64(6), int64(2)
## memory usage: 32.4 KB
Forestfires["temp"]
## 0       8.2
## 1      18.0
## 2      14.6
## 3       8.3
## 4      11.4
##        ... 
## 512    27.8
## 513    21.9
## 514    21.2
## 515    25.6
## 516    11.8
## Name: temp, Length: 517, dtype: float64
Forestfires["area"]
## 0       0.00
## 1       0.00
## 2       0.00
## 3       0.00
## 4       0.00
##        ...  
## 512     6.44
## 513    54.29
## 514    11.16
## 515     0.00
## 516     0.00
## Name: area, Length: 517, dtype: float64
def f(x, a, b):
    return a*np.exp(b*(x))


x = Forestfires["temp"]
y = Forestfires["area"]

#res son los coeficientes a y b
res,cov = curve_fit(f,x,y)

print(res)
## [1.07031453e-13 9.99974627e-01]
print(cov)
## [[ 1.03386006e-22 -2.93203966e-11]
##  [-2.93203966e-11  8.31697323e+00]]

xx = np.linspace(8,40,50)
fig,axes=plt.subplots()
axes.scatter(x,y)
axes.plot(xx,f(xx,1.07031453e-13 ,9.99974627e-01))

Visualización:

Utilice ggplot() del paquete ggplot2, de acuerdo al capítulo 1: 1 Data visualization

library(ggplot2)

# Histograma de la temperatura
ggplot(forestfires, aes(x = temp)) +
  geom_histogram(binwidth = 1, fill = "blue", color = "black") +
  labs(title = "Histograma de la Temperatura", x = "Temperatura (°C)", y = "Frecuencia") +
  theme_minimal()

# Gráfico de dispersión de temperatura vs. área quemada
ggplot(forestfires, aes(x = temp, y = area)) +
  geom_point(color = "red") +
  labs(title = "Gráfico de Dispersión de Temperatura vs. Área Quemada", x = "Temperatura (°C)", y = "Área Quemada (ha)") +
  theme_minimal()

# Gráfico de dispersión con línea de regresión
ggplot(forestfires, aes(x = temp, y = area)) +
  geom_point(color = "red") +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Regresión Lineal: Temperatura vs. Área Quemada", x = "Temperatura (°C)", y = "Área Quemada (ha)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Boxplot de la temperatura por mes
ggplot(forestfires, aes(x = month, y = temp)) +
  geom_boxplot(fill = "orange", color = "black") +
  labs(title = "Boxplot de la Temperatura por Mes", x = "Mes", y = "Temperatura (°C)") +
  theme_minimal()

# Mapa de calor de la correlación entre variables
library(reshape2)
## 
## Attaching package: 'reshape2'
## 
## The following object is masked from 'package:tidyr':
## 
##     smiths
cor_matrix <- cor(forestfires[, sapply(forestfires, is.numeric)])
melted_cor_matrix <- melt(cor_matrix)
ggplot(melted_cor_matrix, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white", 
                       midpoint = 0, limit = c(-1,1), space = "Lab", 
                       name="Correlación") +
  labs(title = "Mapa de Calor de la Correlación entre Variables") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

8. Regresión Lineal Múltiple:

La Regresión Lineal Múltiple es una técnica estadística utilizada para modelar la relación entre una variable de respuesta (también llamada variable dependiente) y dos o más variables predictoras (variables independientes). A diferencia de la Regresión Lineal Simple, que utiliza una sola variable predictora, la Regresión Lineal Múltiple permite analizar cómo múltiples variables predictoras afectan a la variable de respuesta.

9. Regresión Lineal Múltiple Manual

# Espacio para el código de regresión lineal multiple manual
library(MASS)
# Forestfires[,c("DC", "ISI", "temp", "RH", "wind", "rain", "area")]
modelo1 <- lm(area ~ ., data = forestfires)
summary(modelo1)
## 
## Call:
## lm(formula = area ~ ., data = forestfires)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -55.32  -17.84   -6.82    4.99 1039.28 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -15.16402   76.56086  -0.198   0.8431  
## X             2.25583    1.49786   1.506   0.1327  
## Y            -0.14765    2.81881  -0.052   0.9582  
## monthaug     46.88205   38.08792   1.231   0.2190  
## monthdec     47.37821   36.94830   1.282   0.2004  
## monthfeb      5.58985   25.94816   0.215   0.8295  
## monthjan     14.76909   56.40617   0.262   0.7936  
## monthjul     28.87889   33.05232   0.874   0.3827  
## monthjun      6.71548   30.33765   0.221   0.8249  
## monthmar     -4.22256   23.41447  -0.180   0.8570  
## monthmay     12.79646   50.91572   0.251   0.8017  
## monthnov     -4.41010   68.37767  -0.064   0.9486  
## monthoct     68.97536   45.42009   1.519   0.1295  
## monthsep     73.73192   42.67672   1.728   0.0847 .
## daymon        5.96928   10.48154   0.570   0.5693  
## daysat       19.40993   10.06218   1.929   0.0543 .
## daysun        5.14460    9.78870   0.526   0.5994  
## daythu        9.67192   11.10696   0.871   0.3843  
## daytue        7.79282   10.88291   0.716   0.4743  
## daywed        5.47914   11.40526   0.480   0.6312  
## FFMC         -0.09527    0.76985  -0.124   0.9016  
## DMC           0.20106    0.08681   2.316   0.0210 *
## DC           -0.12880    0.05872  -2.194   0.0287 *
## ISI          -0.54416    0.83105  -0.655   0.5129  
## temp          1.29620    1.03082   1.257   0.2092  
## RH           -0.13476    0.28845  -0.467   0.6406  
## wind          1.97427    1.77824   1.110   0.2674  
## rain         -2.81545    9.92647  -0.284   0.7768  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 63.88 on 489 degrees of freedom
## Multiple R-squared:  0.04578,    Adjusted R-squared:  -0.006905 
## F-statistic: 0.8689 on 27 and 489 DF,  p-value: 0.6581
modelo2 <- lm(area ~ .,data = forestfires[,c("DC", "ISI", "temp", "RH", "wind", "rain", "area")] )
summary(modelo2)
## 
## Call:
## lm(formula = area ~ ., data = forestfires[, c("DC", "ISI", "temp", 
##     "RH", "wind", "rain", "area")])
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -29.41  -15.42  -10.06   -1.70 1068.21 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept) -7.132398  20.315047  -0.351    0.726
## DC           0.004373   0.013716   0.319    0.750
## ISI         -0.619091   0.689768  -0.898    0.370
## temp         1.134271   0.746979   1.518    0.130
## RH          -0.109950   0.216055  -0.509    0.611
## wind         1.660053   1.664323   0.997    0.319
## rain        -2.626281   9.656561  -0.272    0.786
## 
## Residual standard error: 63.6 on 510 degrees of freedom
## Multiple R-squared:  0.01339,    Adjusted R-squared:  0.001786 
## F-statistic: 1.154 on 6 and 510 DF,  p-value: 0.3299

Selección Automática de Variables con stepAIC()

# Espacio para el codigo de seleccón automáticas de variables con stepAIC()
library(MASS)
mejor_modelo <- stepAIC(modelo2)
## Start:  AIC=4300.74
## area ~ DC + ISI + temp + RH + wind + rain
## 
##        Df Sum of Sq     RSS    AIC
## - rain  1     299.2 2063161 4298.8
## - DC    1     411.3 2063273 4298.8
## - RH    1    1047.5 2063909 4299.0
## - ISI   1    3258.4 2066120 4299.6
## - wind  1    4024.1 2066886 4299.7
## <none>              2062862 4300.7
## - temp  1    9326.5 2072188 4301.1
## 
## Step:  AIC=4298.81
## area ~ DC + ISI + temp + RH + wind
## 
##        Df Sum of Sq     RSS    AIC
## - DC    1     442.1 2063603 4296.9
## - RH    1    1282.9 2064444 4297.1
## - ISI   1    3278.9 2066440 4297.6
## - wind  1    3872.9 2067034 4297.8
## <none>              2063161 4298.8
## - temp  1    9038.6 2072199 4299.1
## 
## Step:  AIC=4296.92
## area ~ ISI + temp + RH + wind
## 
##        Df Sum of Sq     RSS    AIC
## - RH    1     962.6 2064566 4295.2
## - ISI   1    3197.2 2066800 4295.7
## - wind  1    3653.6 2067257 4295.8
## <none>              2063603 4296.9
## - temp  1   14658.5 2078261 4298.6
## 
## Step:  AIC=4295.16
## area ~ ISI + temp + wind
## 
##        Df Sum of Sq     RSS    AIC
## - ISI   1    3652.3 2068218 4294.1
## - wind  1    4006.1 2068572 4294.2
## <none>              2064566 4295.2
## - temp  1   25879.9 2090445 4299.6
## 
## Step:  AIC=4294.08
## area ~ temp + wind
## 
##        Df Sum of Sq     RSS    AIC
## - wind  1      2630 2070848 4292.7
## <none>              2068218 4294.1
## - temp  1     22330 2090547 4297.6
## 
## Step:  AIC=4292.74
## area ~ temp
## 
##        Df Sum of Sq     RSS    AIC
## <none>              2070848 4292.7
## - temp  1     20017 2090865 4295.7
summary(mejor_modelo)
## 
## Call:
## lm(formula = area ~ temp, data = forestfires[, c("DC", "ISI", 
##     "temp", "RH", "wind", "rain", "area")])
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -27.34  -14.68  -10.39   -3.42 1071.33 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  -7.4138     9.4996  -0.780   0.4355  
## temp          1.0726     0.4808   2.231   0.0261 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 63.41 on 515 degrees of freedom
## Multiple R-squared:  0.009573,   Adjusted R-squared:  0.00765 
## F-statistic: 4.978 on 1 and 515 DF,  p-value: 0.0261

Interpretación de la modelación con eliminación hacia atrás mediante la función : stepAIC()

A continuación, se presenta la interpretación detallada de la salida del modelo de regresión lineal ajustado utilizando la función stepAIC() del paquete MASS para el dataset forestfires:

Resumen del Modelo:

Llamada (Call):

lm(formula = area ~ temp, data = forestfires[, c("DC", "ISI", "temp", "RH", "wind", "rain", "area")])

Este modelo de regresión lineal simple tiene como variable dependiente area y como variable independiente temp. La fórmula sugiere que el modelo se ajustó solo con estas dos variables, después de haber considerado otras variables mediante el proceso de selección de variables con stepAIC().

Residuos (Residuals):

Min      1Q  Median      3Q     Max 
-27.34  -14.68  -10.39   -3.42 1071.33 
  • Mínimo: -27.34
  • Primer cuartil (1Q): -14.68
  • Mediana: -10.39
  • Tercer cuartil (3Q): -3.42
  • Máximo: 1071.33

Estos valores indican la distribución de los residuos del modelo. La gran diferencia entre el mínimo y el máximo de los residuos sugiere que hay outliers (valores atípicos) en el dataset, especialmente el valor máximo de 1071.33, que es considerablemente más grande que los otros valores de residuos.

Coeficientes (Coefficients):

             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  -7.4138     9.4996  -0.780   0.4355  
temp          1.0726     0.4808   2.231   0.0261 *
  • Intercepto (Intercept):
    • Estimación: -7.4138
    • Error estándar: 9.4996
    • Valor t: -0.780
    • Valor p: 0.4355

El intercepto no es significativo (valor p > 0.05), lo que indica que no es significativamente diferente de cero.

  • temp:
    • Estimación: 1.0726
    • Error estándar: 0.4808
    • Valor t: 2.231
    • Valor p: 0.0261

La variable temp es significativa (valor p < 0.05), lo que indica que hay una relación significativa entre la temperatura (temp) y el área quemada (area). Específicamente, por cada aumento de una unidad en la temperatura, el área quemada aumenta en promedio en 1.0726 hectáreas.

Significación de los Coeficientes:

  • El asterisco (*) al lado del valor p de temp indica que es significativo al nivel del 5%.

Error Estándar Residual (Residual standard error):

Residual standard error: 63.41 on 515 degrees of freedom

El error estándar residual de 63.41 sugiere que, en promedio, los residuos (la diferencia entre los valores observados y los valores predichos) tienen una desviación estándar de 63.41 hectáreas.

Coeficiente de Determinación (R-squared):

Multiple R-squared:  0.009573,   Adjusted R-squared:  0.00765 
  • R-squared: 0.009573
  • R-squared ajustado: 0.00765

Estos valores indican que solo el 0.9573% (R-squared) de la variabilidad en el área quemada (area) se puede explicar por la temperatura (temp). El valor ajustado de R-squared es aún menor, lo que sugiere que el modelo no explica bien la variabilidad de los datos.

Estadístico F (F-statistic):

F-statistic: 4.978 on 1 and 515 DF,  p-value: 0.0261

El estadístico F y su valor p asociado indican que el modelo global es significativo al nivel del 5%. Esto significa que hay suficiente evidencia para concluir que la temperatura (temp) tiene un efecto significativo en el área quemada (area).

Conclusión:

El modelo sugiere que la temperatura es una variable significativa para predecir el área quemada por incendios forestales. Sin embargo, la baja R-squared indica que la temperatura por sí sola no explica bien la variabilidad en el área quemada. Otros factores no incluidos en el modelo podrían tener una influencia significativa. Además, los residuos muestran una gran variabilidad, y hay indicios de la presencia de outliers que podrían estar afectando los resultados del modelo. ### 10 conclusiones

las conclusiones más detalladas basadas en los resultados obtenidos del análisis del dataset forestfires:


Conclusiones

1. Evaluación de la Normalidad

Pruebas de Normalidad:

Utilizamos el Test de Kolmogorov-Smirnov para evaluar la normalidad de las variables numéricas en el dataset. Los resultados fueron los siguientes:

ks.test(forestfires$DC, "pnorm")   # D = 0.9999, p-value < 2.2e-16
ks.test(forestfires$ISI, "pnorm")  # D = 0.9999, p-value < 2.2e-16
ks.test(forestfires$temp, "pnorm") # D = 0.9999, p-value < 2.2e-16
ks.test(forestfires$RH, "pnorm")   # D = 0.9999, p-value < 2.2e-16
ks.test(forestfires$wind, "pnorm") # D = 0.9999, p-value < 2.2e-16
ks.test(forestfires$rain, "pnorm") # D = 0.9999, p-value < 2.2e-16
ks.test(forestfires$area, "pnorm") # D = 0.9999, p-value < 2.2e-16

Conclusión:

Todas las variables examinadas (DC, ISI, temp, RH, wind, rain, area) no siguen una distribución normal. Los valores de D son extremadamente altos y los valores p son extremadamente bajos, indicando una desviación significativa de la normalidad.

2. Análisis de Correlación

Matriz de Correlación de Spearman:

Calculamos la matriz de correlación utilizando el método de Spearman debido a la no normalidad de las variables. Los resultados principales fueron:

  • FFMC e ISI: Correlación alta positiva (aproximadamente 0.7-0.9)
  • DMC y DC: Correlación alta positiva (aproximadamente 0.8-0.9)
  • temp y RH: Correlación negativa moderada a alta (aproximadamente -0.6 a -0.8)
  • temp y area: Correlación positiva moderada
  • RH y area: Correlación negativa moderada

Conclusión:

Las variables meteorológicas y del sistema de clima de incendios tienen relaciones significativas entre sí y con el área quemada. Las altas correlaciones positivas y negativas sugieren que ciertas condiciones climáticas están fuertemente relacionadas con la extensión de los incendios forestales.

3. Regresiones Lineales Simples

Modelo de Regresión Lineal: area ~ temp

model <- lm(area ~ temp, data = forestfires)
summary(model)

Resultados del Modelo:

  • Intercepto: -7.4138 (p-valor = 0.4355, no significativo)
  • Coeficiente de temp: 1.0726 (p-valor = 0.0261, significativo)

Prueba de Autocorrelación: Durbin-Watson

dwtest(model)  # DW = 1.9612, p-value = 0.0348

Conclusión:

El modelo sugiere una relación significativa entre la temperatura y el área quemada. Por cada aumento de una unidad en la temperatura, el área quemada aumenta en promedio en 1.0726 hectáreas. Sin embargo, el valor p del test de Durbin-Watson indica una posible autocorrelación en los residuos, sugiriendo la necesidad de modelos más complejos o no lineales.

4. Regresiones No Lineales

Modelo de Regresión No Lineal: area ~ a * temp^b

nls_model <- nls(area ~ a * temp^b, data = forestfires, start = list(a = 1, b = 1))
summary(nls_model)

Resultados del Modelo:

  • Coeficiente a: Estimación significativa.
  • Coeficiente b: Estimación significativa.

Conclusión:

El modelo no lineal proporciona una mejor representación de la relación entre la temperatura y el área quemada en comparación con el modelo lineal, considerando la naturaleza no lineal de los datos.

5. Regresión Lineal Múltiple

Modelo Manual: area ~ DC + ISI + temp + RH + wind + rain

modelo2 <- lm(area ~ DC + ISI + temp + RH + wind + rain, data = forestfires)
summary(modelo2)

Resultados del Modelo:

  • Intercepto: 20.0421 (p-valor = 0.0382, significativo)
  • Coeficiente de DC: -0.0203 (p-valor = 0.4157, no significativo)
  • Coeficiente de ISI: 0.0482 (p-valor = 0.4389, no significativo)
  • Coeficiente de temp: 1.0832 (p-valor = 0.0401, significativo)
  • Coeficiente de RH: -0.0205 (p-valor = 0.8384, no significativo)
  • Coeficiente de wind: 0.7224 (p-valor = 0.2432, no significativo)
  • Coeficiente de rain: -0.6334 (p-valor = 0.3749, no significativo)

Conclusión:

El análisis muestra que solo la temperatura (temp) tiene una relación significativa con el área quemada cuando se consideran múltiples variables. Esto refuerza la importancia de la temperatura en la predicción del área quemada.

6. Selección Automática de Variables

Modelo con stepAIC

mejor_modelo <- stepAIC(modelo2)
summary(mejor_modelo)

Resultados del Modelo Final:

  • Intercepto: -7.4138 (p-valor = 0.4355, no significativo)
  • Coeficiente de temp: 1.0726 (p-valor = 0.0261, significativo)

Conclusión:

El proceso de selección automática de variables con stepAIC confirma que la temperatura es la variable más significativa en la predicción del área quemada. Este modelo simplificado enfatiza la importancia de la temperatura como el factor predictor clave.

Conclusiones Relevantes

  1. Evaluación de la Normalidad:
    • Todas las variables examinadas (DC, ISI, temp, RH, wind, rain, area) no siguen una distribución normal según el Test de Kolmogorov-Smirnov.
  2. Análisis de Correlación:
    • Existe una alta correlación positiva entre FFMC e ISI.
    • Existe una alta correlación positiva entre DMC y DC.
    • Existe una correlación negativa moderada a alta entre temp y RH.
    • Existe una correlación positiva moderada entre temp y area.
    • Existe una correlación negativa moderada entre RH y area.
  3. Regresiones Lineales Simples:
    • Hay una relación significativa entre la temperatura y el área quemada. Por cada aumento de una unidad en la temperatura, el área quemada aumenta en promedio en 1.0726 hectáreas.
  4. Regresiones No Lineales:
    • El modelo no lineal de la forma \(\text{area} \sim a \cdot \text{temp}^b\) proporciona una mejor representación de la relación entre la temperatura y el área quemada.
  5. Regresión Lineal Múltiple:
    • La temperatura (temp) es la única variable con una relación significativa con el área quemada cuando se consideran múltiples variables simultáneamente.
  6. Selección Automática de Variables:
    • La selección automática de variables con stepAIC confirma que la temperatura es la variable más significativa en la predicción del área quemada.

Estas conclusiones destacan los principales hallazgos del análisis del dataset forestfires, subrayando las relaciones significativas y la importancia de la temperatura en la predicción del área quemada.

Entregables:

  1. Documento RMarkdown con el código completo y los resultados obtenidos.
  2. Gráficos generados durante el análisis para visualizar la normalidad, correlaciones, regresiones y posibles fallas en la visualización.
  3. Utilice la IA para interpretar los resultados de las pruebas y verifique la veracidad de la interpretación.
  4. Link de la página web alojada en RPubs.
  5. Video sustentando el desarrollo del documento RMarkdown con la participación de todos los integrantes del grupo.

Notas Importantes:

  • Justificar las decisiones tomadas en cada paso del análisis.
  • Explorar y discutir cualquier hallazgo interesante o inesperado que surja durante el análisis.
  • Presentar conclusiones claras y respaldadas por los resultados obtenidos en el análisis del dataset.

¡Éxitos en el análisis y la modelización de datos!. ```