Aquest document presenta un estudi estadístic del conjunt de dades
meteorològiques incloses al fitxer dades_meteo.RData.
El conjunt dades_meteo és un recull de registres
meteorològics d’una setmana de desembre del 2024. Aquests provenen d’una
base de dades que conté mostres agafades cada mitja hora
ininterrupudament des de l’any 1991 a l’estació meteorològica oficial de
La Bisbal d’Empordà, el tècnic de la qual és el pare d’un membre del
grup.
Més concretament, hem escollit la setmana del 09/12/2024 al 15/12/2024 perquè és una data pròxima als dies que farem l’anàlisi estadística del conjunt i, a més a més, hi ha valors molt diversos que creiem que ens donaran molt de joc en les proves que farem.
La temperatura de sensació és una magnitud derivada que pretén reflectir com és percebuda la temperatura ambiental pels humans, tenint en compte no només la temperatura real sinó també altres factors meteorològics.
És per això que, per començar a analitzar el conjunt de dades, i així trencar una mica el gel, hem plantejat la següent qüestió:
L’objectiu principal és determinar, mitjançant eines estadístiques d’inferència i modelatge, quines variables meteorològiques tenen un efecte significatiu i rellevant sobre la temperatura de sensació més enllà de la temperatura mitjana.
Per importar el conjunt de dades col·loquem el fitxer dins del directori del projecte i el carreguem executant la següent ordre:
load("dades_meteo.RData")
El format original del fitxer era XLSX (Excel), però l’hem canviat a .RData per poder treballar amb R.
| Dia | Data | Hora | Temp | Temp_max | Temp_min | Pressio | Humitat | Rosada | Vent | Vent_max | Vent_dir | Vent_direccio | Temp_sensacio | Pluja |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dilluns | 9/12/2024 | 00:30 | 4.4 | 4.6 | 4.3 | 1010.7 | 92 | 3.2 | 3.2 | 9.7 | 10 | SW | 4.3 | 0 |
| Dilluns | 9/12/2024 | 01:00 | 4.3 | 4.4 | 4.0 | 1010.4 | 92 | 3.1 | 1.6 | 6.4 | 6 | SE | 4.3 | 0 |
| Dilluns | 9/12/2024 | 01:30 | 3.9 | 4.2 | 3.6 | 1010.3 | 93 | 2.9 | 0.0 | 4.8 | 6 | SE | 3.9 | 0 |
| Dilluns | 9/12/2024 | 02:00 | 3.5 | 3.7 | 3.3 | 1010.4 | 94 | 2.6 | 3.2 | 6.4 | 9 | SSW | 3.3 | 0 |
| Dilluns | 9/12/2024 | 02:30 | 3.2 | 3.4 | 2.9 | 1010.3 | 95 | 2.5 | 1.6 | 8.0 | 9 | SSW | 3.2 | 0 |
| Dilluns | 9/12/2024 | 03:00 | 2.8 | 3.1 | 2.6 | 1010.3 | 96 | 2.2 | 1.6 | 6.4 | 9 | SSW | 2.8 | 0 |
Inicialment, dades_meteo no disposava d’una columna amb
el nom dels dies de la setmana, i l’hem afegit per complir amb els
requeriments del projecte (almenys dues variables categòriques
diferents). Per contra, hem eliminat la columna del període d’observació
perquè es tractava del mateix interval (30 minuts) i era una dada
redundant al llarg de les files del conjunt.
El conjunt de dades dades_meteo conté 336 observacions
de 15 registres meteorològics recollits cada 30 minuts durant una
setmana.
# Vista ràpida del conjunt
glimpse(dades_meteo)
## Rows: 336
## Columns: 15
## $ Dia <chr> "Dilluns", "Dilluns", "Dilluns", "Dilluns", "Dilluns", "…
## $ Data <chr> "9/12/2024", "9/12/2024", "9/12/2024", "9/12/2024", "9/1…
## $ Hora <chr> "00:30", "01:00", "01:30", "02:00", "02:30", "03:00", "0…
## $ Temp <dbl> 4.4, 4.3, 3.9, 3.5, 3.2, 2.8, 2.6, 2.3, 2.0, 1.9, 2.0, 2…
## $ Temp_max <dbl> 4.6, 4.4, 4.2, 3.7, 3.4, 3.1, 2.8, 2.4, 2.2, 2.1, 2.2, 2…
## $ Temp_min <dbl> 4.3, 4.0, 3.6, 3.3, 2.9, 2.6, 2.3, 2.2, 1.8, 1.7, 1.8, 2…
## $ Pressio <dbl> 1010.7, 1010.4, 1010.3, 1010.4, 1010.3, 1010.3, 1010.2, …
## $ Humitat <dbl> 92, 92, 93, 94, 95, 96, 96, 97, 97, 97, 97, 97, 96, 96, …
## $ Rosada <dbl> 3.2, 3.1, 2.9, 2.6, 2.5, 2.2, 2.0, 1.9, 1.6, 1.5, 1.6, 1…
## $ Vent <dbl> 3.2, 1.6, 0.0, 3.2, 1.6, 1.6, 0.0, 1.6, 0.0, 1.6, 3.2, 1…
## $ Vent_max <dbl> 9.7, 6.4, 4.8, 6.4, 8.0, 6.4, 3.2, 6.4, 4.8, 9.7, 8.0, 8…
## $ Vent_dir <dbl> 10, 6, 6, 9, 9, 9, 9, 9, 14, 10, 10, 7, 10, 10, 9, 8, 8,…
## $ Vent_direccio <chr> "SW", "SE", "SE", "SSW", "SSW", "SSW", "SSW", "SSW", "NW…
## $ Temp_sensacio <dbl> 4.3, 4.3, 3.9, 3.3, 3.2, 2.8, 2.6, 2.3, 2.0, 1.9, 1.6, 2…
## $ Pluja <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
Les variables incloses descriuen condicions atmosfèriques mitjanes o derivades per a cada interval temporal. A continuació, presentem un taula resum de la seva estructura:
| Variable | Tipus | Descripció | Valors possibles / rang |
|---|---|---|---|
| Dia | caràcter | Nom del dia de la setmana | Dilluns – Diumenge |
| Data | caràcter | Data en format dd/mm/aaaa | 09/12/2024 – 15/12/2024 |
| Hora | caràcter | Hora en format hh:mm | 00:30 – 24:00 |
| Temp | numèrica | Temperatura mitjana en ºC | 1.9 – 14.4 |
| Temp_max | numèrica | Temperatura màxima en ºC | 2.1 – 14.5 |
| Temp_min | numèrica | Temperatura mínima en ºC | 1.6 – 14.2 |
| Pressio | numèrica | Pressió atmosfèrica en hPa (o mbar) | 1010.0 – 1037.1 |
| Humitat | numèrica | Humitat relativa en % | 50 – 100 |
| Rosada | numèrica | Punt de rosada en ºC | 1.2 – 11.2 |
| Vent | numèrica | Velocitat mitjana del vent en km/h | 0 – 27,4 |
| Vent_max | numèrica | Velocitat màxima del vent en km/h | 1,6 – 59,5 |
| Vent_dir | numèrica | Direcció del vent codificada | 0 – 15 |
| Vent_direcció | caràcter | Direcció del vent cardinal | N – NNW |
| Temp_sensació | numèrica | Temperatura de sensació en ºC | 1,6 – 14,4 |
| Pluja | numèrica | Precipitació en mm (o l/m²) | 0 – 6,20 |
Quan parlem de temperatura, velocitat del vent o qualsevol altra variable mitjana, el valor d’aquesta és la mitjana obtinguda durant l’interval d’observació. Per exemple, entre les 00:30 i les 01:00 de la matinada del dilluns 9 de desembre del 2024 s’ha registrat una temperatura mitjana de 4.4 ºC, amb màxima de 4.6 ºC i mínima de 4.3 ºC. Pel que fa al vent, provinent de llebeig (sud-oest), la velocitat mitjana observada ha sigut de 3.2 km/h, amb ratxes màximes de 9.7 km/h.
Tots els valors són complerts, no hi ha evidències de registres nuls o perduts. Tampoc es veuen punts estranys.
# Resum estadístic general
summary(dades_meteo)
## Dia Data Hora Temp
## Length:336 Length:336 Length:336 Min. : 1.900
## Class :character Class :character Class :character 1st Qu.: 6.100
## Mode :character Mode :character Mode :character Median : 8.100
## Mean : 7.776
## 3rd Qu.: 9.100
## Max. :14.400
## Temp_max Temp_min Pressio Humitat
## Min. : 2.100 Min. : 1.600 Min. :1010 Min. : 50.00
## 1st Qu.: 6.300 1st Qu.: 5.900 1st Qu.:1019 1st Qu.: 75.00
## Median : 8.300 Median : 7.900 Median :1022 Median : 96.00
## Mean : 8.011 Mean : 7.547 Mean :1022 Mean : 87.66
## 3rd Qu.: 9.300 3rd Qu.: 8.900 3rd Qu.:1025 3rd Qu.: 99.00
## Max. :14.500 Max. :14.200 Max. :1037 Max. :100.00
## Rosada Vent Vent_max Vent_dir
## Min. : 1.200 Min. : 0.000 Min. : 1.60 Min. : 0.000
## 1st Qu.: 3.100 1st Qu.: 1.600 1st Qu.: 6.40 1st Qu.: 0.000
## Median : 5.650 Median : 3.200 Median : 8.85 Median : 8.000
## Mean : 5.626 Mean : 5.099 Mean :12.87 Mean : 5.595
## 3rd Qu.: 8.100 3rd Qu.: 6.400 3rd Qu.:14.90 3rd Qu.: 9.000
## Max. :11.200 Max. :27.400 Max. :59.50 Max. :15.000
## Vent_direccio Temp_sensacio Pluja
## Length:336 Min. : 1.600 Min. :0.000
## Class :character 1st Qu.: 5.575 1st Qu.:0.000
## Mode :character Median : 7.050 Median :0.000
## Mean : 7.170 Mean :0.128
## 3rd Qu.: 8.700 3rd Qu.:0.000
## Max. :14.400 Max. :6.200
sum(is.na(dades_meteo))
## [1] 0
Les variables que utilitzarem en aquesta anàlisi estadística són:
# Selecció de variables d'interès per a la pregunta d'estudi
meteo <- dades_meteo %>% select(Temp, Temp_sensacio, Humitat, Vent_direccio, Pluja)
Les variables explicatives Temp (temperatura mitjana),
Humitat (humitat relativa mitjana),
Vent_direccio (direcció del vent) i Pluja
(precipitació acumulada en l’interval) són valors observats, mentre que
la variable resposta de la pregunta d’estudi Temp_sensacio
(temperatura de sensació) és un valor calculat a partir d’altres
paràmetres meteorològics mitjançant una equació desconeguda que voldrem
aproximar.
Altres paràmetres disponibles, com la velocitat del vent, no s’inclouen directament en el model principal per ajustar-se estrictament a la pregunta formulada, tot i que podrien ser rellevants en la discussió. Ho veurem més endavant a les conclusions.
# Convertim la direcció del vent en factor
meteo$Vent_direccio <- as.factor(meteo$Vent_direccio)
La direcció del vent és una variable categòrica perquè les seves dades corresponen a un nombre limitat de categories, que en aquest cas serien les setze direccions principals. Una de les opcions que tenim en R per poder treballar amb dades categòriques és convertint-les a factors per poder analitzar per grups correctament.
| Temp | Temp_sensacio | Humitat | Vent_direccio | Pluja | |
|---|---|---|---|---|---|
| Min. : 1.900 | Min. : 1.600 | Min. : 50.00 | N :118 | Min. :0.000 | |
| 1st Qu.: 6.100 | 1st Qu.: 5.575 | 1st Qu.: 75.00 | SSW : 75 | 1st Qu.:0.000 | |
| Median : 8.100 | Median : 7.050 | Median : 96.00 | S : 38 | Median :0.000 | |
| Mean : 7.776 | Mean : 7.170 | Mean : 87.66 | SW : 22 | Mean :0.128 | |
| 3rd Qu.: 9.100 | 3rd Qu.: 8.700 | 3rd Qu.: 99.00 | NNE : 13 | 3rd Qu.:0.000 | |
| Max. :14.400 | Max. :14.400 | Max. :100.00 | NNW : 9 | Max. :6.200 | |
| NA | NA | NA | (Other): 61 | NA |
L’anàlisi descriptiva ens mostra que cap de les dues temperatures ha superat els 15 ºC i que tampoc han arribat a prendre valors negatius. La mitjana de sensació i d’ambient durant la setmana examinada es troba entre els 7 i 8 ºC respectivament. La humitat presenta valors elevats (mediana del 96 %), amb moltes observacions entre el 90 i el 100 %. La mitjana és força alta també, gairebé del 90 %, i no baixa del 50 %. Sobre la direcció del vent, ara factoritzada, veiem un recompte de tots els registres de cada vent, ordenats de major a menor. Predominen els vents del nord, del sud i del sud-oest, generalment. La precipitació és nul·la en la majoria d’obervacions. Es pot apreciar que la mitjana és de 0.1 mm, i amb alguns episodis puntuals, en l’interval que va ploure més es van registrar 6.2 mm.
El treball es basa en un model de regressió lineal múltiple:
\[\begin{align*} Temp\_sensacio = \beta_0 + \beta_1 · Temp + \beta_2 · Humitat + \beta_3 · Vent\_direccio + \beta_4 · Pluja \end{align*}\]
La hipòtesi nul·la global és que cap de les variables explicatives té efecte significatiu sobre la temperatura de sensació (els coeficients del model complet siguin zero):
\[\begin{align*} H_0 : \beta_1 = \beta_2 = \beta_3 = 0 \end{align*}\]
I la hipòtesi alternativa és que almenys una d’aquestes variables contribueix significativament a explicar la variabilitat de la temperatura de sensació (almenys un dels coeficients del model complet sigui diferent de zero).
A nivell individual, les hipòtesis específiques per blocs de variables serien:
\[\begin{align*} H_0 : \beta_i = 0 \\ H_1 : \beta_i \ne 0 \end{align*}\]
per \(i = 1, 2, 3, 4\).
Seguirem una estratègia en tres etapes:
Temp i
Temp_sensacio.La regressió lineal múltiple ens serà l’eina adequada perquè la
variable de resposta Temp_sensacio és contínua, volem
quantificar l’efecte parcial de diverses variables simultàniament, i ens
permetrà fer inferència estadística clara amb l’ús d’intervals de
confiança, contrastos d’hipòtesis i tests varis.
Començarem fent un test de correlació de Pearson entre
Temp i Temp_sensacio perquè són dos variables
contínues i, juntament amb el gràfic de dispersió, buscarem els primers
indicis de relació lineal.
cor.test(meteo$Temp, meteo$Temp_sensacio)
##
## Pearson's product-moment correlation
##
## data: meteo$Temp and meteo$Temp_sensacio
## t = 43.507, df = 334, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9041594 0.9365696
## sample estimates:
## cor
## 0.921963
La correlació entre la temperatura mitjana i temperatura de sensació és:
L’interval de confiança del 95 % indica que, amb un alt nivell de confiança, la correlació poblacional entre la temperatura mitjana i la temperatura de sensació es troba entre \([0.904, 0.937]\). El fet que l’interval sigui completament positiu i molt proper a 1 evidencia una relació lineal molt forta i positiva que justifica l’ús de models de regressió lineal.
ggplot(meteo) +
geom_point(aes(x = Temp, y = Temp_sensacio),
color = "blue", alpha = 0.4) +
# Afegim una recta de referència (y = x) vermella discontínua que indica igualtat entre variables.
# Si el punt està sobre la línia, Temp_sensacio = Temp.
# Si està per sota, fa més fred de la que marca el termòmetre.
geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "red") +
labs(
x = "Temperatura real (ºC)",
y = "Temperatura de sensació (ºC)",
title = "Temperatura de sensació vs Temperatura real"
) +
theme_minimal()
Observem que molts valors queden representats en una línia recta diagonal (amb pendent unitari) perquè en bona part dels casos la temperatura real és la mateixa que la de sensació. No intervé cap variable que provoqui refredament, que justament és el que queda reflectit en la part de la gràfica que es veu més dispersió de punts. Podem veure que aquest núvol només és en el costat que simbolitza valors de temperatura de sensació inferiors a la real. Si disposéssim d’una mostra més extensa descobriríem si aquest núvol de punts tendeix a configurar una línia recta també o d’un altre tipus. Aquesta gràfica no ens demostra quin és l’element que determina la temperatura de sensació, sinó només la conseqüència.
Així doncs, per intentar anticipar si la humitat, la direcció del vent o la pluja poden explicar la variabilitat de la temperatura de sensació respecte de la temperatura real, hem provat de sobreposar les dues temperatures en funció de cadascuna de les variables restants i representar-ho en una sèrie de gràfics.
ggplot(meteo) +
geom_point(aes(x = Humitat, y = Temp),
color = "red", alpha = 0.4) +
geom_point(aes(x = Humitat, y = Temp_sensacio),
color = "blue", alpha = 0.4) +
geom_smooth(aes(x = Humitat, y = Temp),
method = "lm", se = FALSE, colour = "red") +
geom_smooth(aes(x = Humitat, y = Temp_sensacio),
method = "lm", se = FALSE, colour = "blue") +
labs(
x = "Humitat (%)",
y = "Temperatures (°C)",
title = "Temperatura real (vermell) i de sensació (blau) en funció de la humitat"
) +
theme_minimal()
En aquest cas, la dispersió de punts és gran. Podem distingir com els núvols de les dues temperatures segueixen una mateixa tendència amb línies rectes verticals imaginàries al llarg dels valors que presenta la humitat fins gairebé recòrrer tota la gràfica, sent la temperatura de sensació més baixa que la real. La part on es veu més confluència de punts respon al fet que en les mostres de valors inicials predominaven els situats entre el 96 i el 100 %. En aquest mateix sector, podem veure com l’acumulació de registres fa que es barregin els colors i que sigui pràcticament impossible de detectar algun patró que expliqui aquesta variabilitat. A priori, sembla que no hàgim de treure cap conclusió que ens pugui fer pensar que la temperatura de sensació té alguna relació amb la humitat, però si ens ajudem de les línies de regressió podem veure una tendència en el sentit que la diferència entre la temperatura real i la de sensació disminueix a mesura que augmenta la humitat fins a confluir en el punt de saturació que és el 100 %.
ggplot(meteo) +
geom_point(aes(x = Vent_direccio, y = Temp),
color = "red", alpha = 0.4) +
geom_point(aes(x = Vent_direccio, y = Temp_sensacio),
color = "blue", alpha = 0.4) +
labs(
x = "Direcció del vent",
y = "Temperatures (°C)",
title = "Temperatura real (vermell) i de sensació (blau) en funció de la direcció del vent"
) +
theme_minimal()
Aquí també observem un gràfic amb patrons similars a l’anterior. Per una mateixa direcció de vent trobem multitud de registres de temperatura real i de sensació, depenent exclusivament de les coincidències derivades de la mostra de valors examinada. Cada temperatura de sensació que hi trobem es produeix amb una o altra direcció de vent en aquell moment. Com que també passa el mateix amb cada temperatura real, gran part dels punts es barregen en les mateixes direccions i es torna molt complicat de detectar diferències clares entre les dues temperatures. Per això observem diverses línies verticals en el gràfic, una per cada direcció del mostreig, contenint més o menys punts segons les temperatures de sensació s’hagin produït amb una direcció o una altra, sense que es pugui establir una relació de causa-efecte entre elles. En aquest supòsit no ens podem ajudar de les línies de regressió perquè els valors corresponents a les abscisses no formen part d’un camp numèric, sinó categòric perquè són les direccions del vent.
ggplot(meteo) +
geom_point(aes(x = Pluja, y = Temp),
color = "red", alpha = 0.4) +
geom_point(aes(x = Pluja, y = Temp_sensacio),
color = "blue", alpha = 0.4) +
geom_smooth(aes(x = Pluja, y = Temp),
method = "lm", se = FALSE, colour = "red") +
geom_smooth(aes(x = Pluja, y = Temp_sensacio),
method = "lm", se = FALSE, colour = "blue") +
labs(
x = "Pluja (mm)",
y = "Temperatures (°C)",
title = "Temperatura real (vermell) i de sensació (blau) en funció de la pluja"
) +
theme_minimal()
Podem veure reproduït un tipus de gràfica similar als dos casos anteriors, amb línies rectes verticals que són més ben definides quants més registres de temperatures coincidents amb moments de precipitació trobem a la mostra inicial. Per alguns valors de la pluja es pot arribar a observar que la temperatura de sensació és més baixa que la temperatura real, però es tracta d’una dispersió tan poc densa que no podem determinar cap relació més enllà de la que ja coneixem que tenen aquests dos paràmetres entre ells. Si aquesta mostra fos més extensa segurament trobaríem més línies o columnes de valors de temperatura de sensació i real per cadascun dels possibles valors dels registres de precipitació, però no podríem concloure ni evidenciar que la pluja determini la variabilitat entre una temperatura i l’altra, en el supòsit que aquesta es produeixi. Aplicant línies de regressió en aquest cas, tampoc podem deduir una causa-efecte entre la temperatura de sensació i la pluja.
El model base sobre Temp_sensacio només inclou la
variable Temp.
\[\begin{align*} Temp\_sensacio = \beta_0 + \beta_1 · Temp \end{align*}\]
model_simple <- lm(Temp_sensacio ~ Temp, data = dades_meteo)
summary(model_simple)
##
## Call:
## lm(formula = Temp_sensacio ~ Temp, data = dades_meteo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6367 -0.2864 0.3921 0.6449 1.2149
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.10899 0.17093 0.638 0.524
## Temp 0.90806 0.02087 43.507 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9828 on 334 degrees of freedom
## Multiple R-squared: 0.85, Adjusted R-squared: 0.8496
## F-statistic: 1893 on 1 and 334 DF, p-value: < 2.2e-16
confint(model_simple)
## 2.5 % 97.5 %
## (Intercept) -0.2272324 0.4452209
## Temp 0.8670037 0.9491154
El coeficient \(\beta_1 = 0.91\) de
la temperatura mitjana indica quants graus canvia la temperatura de
sensació per cada grau real, i és altament significatiu. A més, \(R^{2} = 0.85\) ens diu que la temperatura
mitjana sola explica el 85 % de la variabilitat de la temperatura de
sensació, fet evident perquè sabem que Temp_sensacio és una
variable derivada caldulada a partir de Temp, tal com hem
explicat al plantejament inicial.
Tot i l’excel·lent ajust, en ser un model base no estem considerant altres factors meteorològics potencialment rellevants.
El model complet sobre Temp_sensacio inclou les
variables Temp, Humitat,
Vent_direccio i Pluja.
\[\begin{align*} Temp\_sensacio = \beta_0 + \beta_1 · Temp + \beta_2 · Humitat + \beta_3 · Vent\_direccio + \beta_4 · Pluja \end{align*}\]
model_multiple <- lm(Temp_sensacio ~ Temp + Humitat + Vent_direccio + Pluja, data = dades_meteo)
summary(model_multiple)
##
## Call:
## lm(formula = Temp_sensacio ~ Temp + Humitat + Vent_direccio +
## Pluja, data = dades_meteo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.31819 -0.25177 -0.04146 0.32927 1.85220
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.500926 0.501406 -6.982 1.71e-11 ***
## Temp 1.054372 0.016552 63.700 < 2e-16 ***
## Humitat 0.036102 0.003274 11.028 < 2e-16 ***
## Vent_direccioENE 0.041141 0.442482 0.093 0.925980
## Vent_direccioESE -0.504850 0.494439 -1.021 0.308006
## Vent_direccioN -1.284253 0.375662 -3.419 0.000712 ***
## Vent_direccioNE -0.040865 0.584099 -0.070 0.944268
## Vent_direccioNNE -1.368082 0.411815 -3.322 0.000998 ***
## Vent_direccioNNW -0.899504 0.432111 -2.082 0.038176 *
## Vent_direccioNW -0.396511 0.434104 -0.913 0.361725
## Vent_direccioS -0.277540 0.389878 -0.712 0.477073
## Vent_direccioSE -0.139495 0.454151 -0.307 0.758926
## Vent_direccioSSE -0.344975 0.432689 -0.797 0.425884
## Vent_direccioSSW -0.236924 0.384537 -0.616 0.538252
## Vent_direccioSW -0.337050 0.402112 -0.838 0.402550
## Vent_direccioW -0.449713 0.436703 -1.030 0.303893
## Vent_direccioWNW -0.161276 0.456801 -0.353 0.724282
## Vent_direccioWSW -0.606043 0.448086 -1.353 0.177175
## Pluja -0.033855 0.062566 -0.541 0.588816
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6398 on 317 degrees of freedom
## Multiple R-squared: 0.9397, Adjusted R-squared: 0.9362
## F-statistic: 274.3 on 18 and 317 DF, p-value: < 2.2e-16
confint(model_multiple)
## 2.5 % 97.5 %
## (Intercept) -4.48743107 -2.51442145
## Temp 1.02180665 1.08693823
## Humitat 0.02966104 0.04254315
## Vent_direccioENE -0.82943117 0.91171276
## Vent_direccioESE -1.47764681 0.46794640
## Vent_direccioN -2.02335942 -0.54514615
## Vent_direccioNE -1.19006567 1.10833601
## Vent_direccioNNE -2.17831831 -0.55784494
## Vent_direccioNNW -1.74967070 -0.04933653
## Vent_direccioNW -1.25059948 0.45757707
## Vent_direccioS -1.04461625 0.48953587
## Vent_direccioSE -1.03302574 0.75403477
## Vent_direccioSSE -1.19628000 0.50632958
## Vent_direccioSSW -0.99349227 0.51964373
## Vent_direccioSW -1.12819473 0.45409538
## Vent_direccioW -1.30891577 0.40948990
## Vent_direccioWNW -1.06002121 0.73746897
## Vent_direccioWSW -1.48764151 0.27555601
## Pluja -0.15695261 0.08924287
L’error estàndard residual del model múltiple és \(RSE = 0.64\) ºC, mentre que el del model simple és \(RSE = 0.98\) ºC. Com que aquest error és més petit, podem dir que el model múltiple ajusta millor les dades i té menys variabilitat no explicada. Això indica que el fet d’haver afegit variables com la humitat o la direcció del vent, sembla que millora la capacitat predictiva respecte el model base. A més, \(R^{2} = 0.94\) ens diu que la temperatura mitjana, juntament amb la humitat, la direcció del vent i la pluja, explica el 94 % de la variabilitat de la temperatura de sensació.
L’estadístic F del model múltiple és \(F = 274.3\). Com que és un valor prou gran, aquesta millora que introdueix el model respecte a no tenir-ne no pot ser atribuïble a l’atzar (\(Pr(>F) = 2e^{-16}\)). Si ens fixem en l’estadístic F del model simple, \(F = 1893\) encara és més gran, i ens indica que la probabilitat d’obtenir una relació tan forta si la temperatura mitjana no tingués cap efecte és pràcticament nul·la (\(Pr(>F) = 2.2e^{-16}\)).
De moment podem dir que el conjunt de variables explica força la temperatura de sensació. Si ens fixem en els efectes individuals:
Temperatura real (Temp): coeficient positiu i molt
significatiu. L’efecte és encara més gran que en el model base
Humitat (Humitat): coeficient positiu i
significatiu. A igual temperatura, una humitat més elevada incrementa la
sensació tèrmica.
Direcció del vent (Vent_direccio): algunes
direccions del nord (N, NNE, NNW) mostren coeficients negatius i
significatius, indicant una sensació més freda associada a vents
d’origen septentrional.
Pluja (Pluja): no és significativa. Això suggereix
que la pluja no té un efecte directe mesurable sobre la sensació
tèrmica, un cop controlades la temperatura mitjana i la
humitat.
Per altra banda, els intervals de confiança al 95 % mostren la precisió amb la que els predictors afecten la temperatura de sensació:
Temperatura (Temp): interval positiu entre \([1.021, 1.086]\). No conté el 0 i és molt
estret, indicant una relació positiva molt forta i precisa.
Humitat (Humitat): interval positiu entre \([0.029, 0.042]\). Tampoc conté el 0 i és
prou estret, cosa que també evidencia una relació positiva i força
precisa, però no tant com la temperatura mitjana real.
Direcció del vent (Vent_direccio): algunes
direccions septentrionals tenen intervals amb un rang completament
negatiu sense incloure el 0 (\(N : [-2.023,
-0.545]\), \(NNE : [-2.178,
-0.557]\), \(NNW : [-1.749,
-0.049]\)). Encara que demostrin una relació negativa, com que
són intervals amples manquen de més precisió.
Pluja (Pluja): interval entre \([-0.156, 0.089]\). En aquest cas l’interval
conté el 0 i no es pot comprovar si presenta una relació positiva o
negativa amb la sensació tèrmica.
Comparem els dos models provats mitjançant ANOVA per acceptar o rebutjar la següent hipòtesi específica:
anova(model_simple, model_multiple)
## Analysis of Variance Table
##
## Model 1: Temp_sensacio ~ Temp
## Model 2: Temp_sensacio ~ Temp + Humitat + Vent_direccio + Pluja
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 334 322.59
## 2 317 129.76 17 192.83 27.711 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tant l’estadístic \(F = 27.711\) com el p-valor \(Pr(>F) = 2.2e^{-16}\) fan que rebutgem la hipòtesi que el model simple sigui suficient. Les variables addicionals aporten informació significativa a la relació.
plot(model_multiple, which = 1)
Els residus es distribueixen al voltant del zero sense patrons clars.
No s’observen tendències sistemàtiques greus.
Hi ha certa variabilitat no constant, però moderada.
plot(model_multiple, which = 2)
shapiro.test(residuals(model_multiple))
##
## Shapiro-Wilk normality test
##
## data: residuals(model_multiple)
## W = 0.9628, p-value = 1.501e-07
El Q-Q plot mostra ajust raonable al centre, amb desviacions a les cues.
El test de Shapiro-Wilk és extremadament significatiu (\(p-valor < 0.05\)) i, per tant, determina que les dades no segueixen una distribució normal. Tanmateix, s’ha de tenir en compte que amb \(n = 336\) aquest test és molt sensible a qualsevol imperfecció.
Aleshores, cal destacar que amb un p-valor tan baix, la precisió dels intervals de confiança es pot veure afectada.
bptest(model_multiple)
##
## studentized Breusch-Pagan test
##
## data: model_multiple
## BP = 111.35, df = 18, p-value = 1.762e-15
El test indica heteroscedasticitat (\(p-valor < 0.05\)).
Això suggereix que la variància dels errors no és constant i, per tant, els errors del model no tenen la mateixa variabilitat per a tots els valors de les variables explicatives.
A tall de resum, la interpretació final que fem de les variables és que:
La temperatura mitjana real (Temp) té un efecte fort
i significatiu sobre la temperatura de sensació
(Temp_sensacio) i n’és la principal determinant. De fet ho
esperàvem perquè aquesta segona és fruit d’aplicar una córmula concreta
a la primera i, en certa manera, ja ho havíem corroborat en l’anàlisi
exploratòria inicial.
La humitat (Humitat) també presenta un efecte clar i
positiu. Tot i tenir un coeficient força petit el model considera que és
una variable força significativa.
La direcció del vent (Vent_direcció) mostra
diferències segons l’origen del vent, especialment del nord, que
influeixen una temperatura de sensació més freda segons el model
(coeficients negatius).
La pluja (Pluja) no explica un efecte directe gaire
significatiu sobre la temperatura de sensació un cop controlades la
resta de variables.
Podríem dir que es rebutja la hipòtesi nul·la global i es conclou que la temperatura de sensació depèn de diversos factors meteorològics com la humitat o la direcció del vent a més de la temperatura mitjana real, però tenim suficient validesa per fer aquesta afirmació?
El model complet no ha passat cap dels tests d’assumpcions fetes sobre les dades. Si tornem a fixar-nos en les gràfiques de linealitat, veurem una sèrie desajustos en la dispersió dels punts que reforcen la resposta dels test.
Una de les causes que podria explicar que el model múltiple no passi els tests de normalitat o d’homoscedasticitat podria ser la manera en com es registren els valors de temperatura i, per extensió, en major o menor mesura la resta de paràmetres. Perquè en realitat, la meteorologia és un fet que té una continuitat durant les 24 hores del dia, i l’únic que fan aquests registres és prendre mostres cada mitja hora. Però és evident que entre aquests períodes resultants hi ha una relació, sobretot entre els més immediats. Per exemple, els registres de temperatura màxima i mínima de cada semihora han d’enllaçar d’alguna manera amb els de la semihora posterior i anterior. No pot haver-hi cap salt o desajust de valors perquè la temperatura es mou o canvia de manera progressiva de manera que les condicions de sortida d’una semihora no poden ser massa diferents de l’entrada posterior (es mourà per dècimes).
Tot i que els coeficients estimats continuen sent interpretables, els resultats dels test no ens indiquen el mateix, i no podem concloure si les proves queden invalidades dins del marc teòric treballat. Com que no hem quedat satisfets dels resultats, i tampoc volíem quedar-nos de braços creuats, hem decidit que una mica de recerca per esbrinar d’on podria provenir el problema.
Una cosa que ens va cridar l’atenció des d’un primer moment és que una de les causes freqüents d’absència d’homoscedasticitat que es poden donar, entre d’altres, és “l’omisió de variables importants dins el model a estimar”. S’explica que si s’omet una variable de rellevància en l’especificació, aquesta variable resta parcialment recollida a dins de les pertorbacions aleatòries, en les quals hi introdueix la seva pròpia variació no necessàriament fixa. Dit en altres paraules, si una variable rellevant no està inclosa, la seva variabilitat queda “amagada” dins els errors, fent que aquests siguin irregulars. Per exemple, imaginem que una variable concreta influeix molt en la temperatura de sensació, però no la tenim en compte al model estadístic. L’efecte d’aquesta variable aparaixerà de manera diferent segons la situació, quedarà dins els residus i farà que aquests tinguin també una variància diferent segons la temperatura real, la humitat, la direcció del vent o la pluja.
Per acabar de descartar possibilitats, hem fet creuaments entre la
temperatura real, la de sensació i la resta de paràmetres numèrics
continguts en la mostra inicial (temperatura màxima i mínima, pressió,
punt de rosada, velocitat mitjana i màxima del vent). En cap dels casos
s’ha observat una relació causa-efecte excepte en el cas de les
variables de la velocitat mitjana i màxima del vent (Vent i
Vent_max). Partint de la base que els registres de
Vent_max estan molt directament relacionats amb els
registres de Vent, hem simplificat les conclusions i
treballat només amb els registres d’aquest darrer paràmetre. La gràfica
que s’observa és la següent:
ggplot(dades_meteo) +
geom_point(aes(x = Vent, y = Temp),
color = "red", alpha = 0.4) +
geom_point(aes(x = Vent, y = Temp_sensacio),
color = "blue", alpha = 0.4) +
geom_smooth(aes(x = Vent, y = Temp),
method = "lm", se = FALSE, colour = "red") +
geom_smooth(aes(x = Vent, y = Temp_sensacio),
method = "lm", se = FALSE, colour = "blue") +
labs(
x = "Velocitat del vent (km/h)",
y = "Temperatures (°C)",
title = "Temperatura real (vermell) i de sensació (blau) en funció de la velocitat del vent"
) +
theme_minimal()
Observant les línies de regressió, aquí sí que es pot veure clarament un patró de causa-efecte: la temperatura de sensació baixa quan la velocitat del vent augmenta. Tot i això, les dues rectes no parteixen del mateix punt al valor zero del gràfic (que és on entenem que hauria de ser), sinó que es creuen una mica més endavant pel fet que la columna on hi ha més mostres de valors no és exactament aquesta. Per altra banda, amb registres de velocitats de vent més elevades no tenim tantes mostres de valors, fet que determina que l’orientació de les línies de regressió tampoc tingui tota la precisió que hauria de tenir. Probablement, si disposéssim de més valors, el punt de creuament equivaldria a la velocitat zero.
Per assegurar que la conclusió a la que arribem és certa, hem consultat les característiques tècniques que determina el fabricant de l’estació meteorològica amb la que s’ha près el mostreig de dades estudiat. Es confirma que aquest aparell calcula la temperatura de sensació exclusivament a partir de la velocitat mitjana del vent. Existeixen altres fórmules per calcular temperatures de sensació que poden contemplar més paràmetres, però no és el cas de l’aparell registrador que ens ocupa.
En aquest punt faltaria demostrar el motiu pel qual la gràfica comparativa de les temperatures amb la humitat, que semblava que també indicava una tendència, finalment es pot descartar. Consultat el funcionament de les taules psicomètriques, queda demostrat que les variacions de temperatura incideixen directament sobre els valors d’humitat, de la mateixa manera que és exclusivament la temperatura real el paràmetre determinant i no la temperatura de sensació, que no deixa de ser una mena de subproducte d’aquesta variable. Ho demostrarem amb un exemple: si en un laboratori mantenim constant el valor de temperatura real de l’aire, en cap cas podrem observar variacions en la humitat. Si afegim el paràmetre vent, veurem com la temperatura de sensació va baixant a mesura que la velocitat d’aquest vent augmenta, sense que en cap cas puguem veure que la temperatura real s’alteri. Si no s’altera la temperatura real, tampoc s’altera la humitat, arribant a la conclusió que la temperatura de sensació no té cap incidència directa sobre aquesta humitat.