Aquí tienes una tabla de contenido con una breve explicación para cada paso de la tarea:
shapiro.test() o
ks.test() para evaluar la normalidad de las variables en el
dataset.chart.Correlation() del paquete
PerformanceAnalytics para realizar un análisis completo de correlación
entre las variables del dataset.dwtest() del paquete lmtest
para realizar pruebas de autocorrelación en los residuos de los modelos
de regresión.nls() en R y la función curve_fit() del
paquete scipy en Python.lm() en R.stepAIC() del paquete MASS para
realizar la selección automática de variables en modelos de regresión
lineal múltiple.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.
Catalyn Romero Cruz María Catalina Gonzalez Teheran Nair Estrada Alvarez Carlos Martinez Trespalacios Ligia Aguas Peinado Karen Atencia Canchila
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.
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
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:
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")]
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.
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)
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.
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
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'
library(ggplot2)
ggplot(data = forestfires,mapping = aes(x=temp, y=area)) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
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
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")
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))
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))
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.
# 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
# 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
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:
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().
Min 1Q Median 3Q Max
-27.34 -14.68 -10.39 -3.42 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.
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 *
El intercepto no es significativo (valor p > 0.05), lo que indica que no es significativamente diferente de cero.
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.
temp indica que
es significativo al nivel del 5%.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.
Multiple R-squared: 0.009573, Adjusted R-squared: 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.
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).
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:
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
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.
Calculamos la matriz de correlación utilizando el método de Spearman debido a la no normalidad de las variables. Los resultados principales fueron:
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.
model <- lm(area ~ temp, data = forestfires)
summary(model)
dwtest(model) # DW = 1.9612, p-value = 0.0348
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.
nls_model <- nls(area ~ a * temp^b, data = forestfires, start = list(a = 1, b = 1))
summary(nls_model)
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.
modelo2 <- lm(area ~ DC + ISI + temp + RH + wind + rain, data = forestfires)
summary(modelo2)
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.
mejor_modelo <- stepAIC(modelo2)
summary(mejor_modelo)
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.
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.
¡Éxitos en el análisis y la modelización de datos!. ```