Aquest document presenta un estudi estadístic del conjunt de dades meteorològiques incloses al fitxer dades_meteo.RData.

Introducció

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.

1. Pregunta d’estudi

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.

2. Descripció del conjunt de dades

2.1. Importació de les dades

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.

Primeres files del dataset.
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.

2.2. Dimensions del dataset

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,…

2.3. Diccionari de variables

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.

2.4. Estadístiques descriptives

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.

Resum estadístic de les variables meteorològiques seleccionades.
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.

3. Plantejament de la hipòtesi

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

4. Metodologia estadística utilitzada

Seguirem una estratègia en tres etapes:

  1. Anàlisi exploratòria inicial
    • Correlació de Pearson entre Temp i Temp_sensacio.
    • Gràfics de dispersió bivariats i sobreposats.
  2. Modelització estadística
    • Regressió lineal simple (\(Temp\_sensacio \sim Temp\))
    • Regressió lineal múltiple (\(Temp\_sensacio \sim Temp + Humitat + Vent\_direccio + Pluja\))
  3. Inferència i validació
    • Contrastos t individuals dels coeficients.
    • Comparació de models mitjançant ANOVA.
    • Diagnòstic d’assumpcions del model lineal.

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.

4.1. Exploració inicial de les dades

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:

  • \(r = 0.922\)
  • \(t = 43.507\)
  • \(p-valor < 2.2e^{-16}\)

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.

4.2. Model de regressió simple

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.

4.3 Model de regressió múltiple

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.

4.4. Comparació de models

Comparem els dos models provats mitjançant ANOVA per acceptar o rebutjar la següent hipòtesi específica:

  • \(H_0 :\) el model simple explica significativament més variabilitat
  • \(H_1 :\) el model múltiple explica significativament més variabilitat
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ó.

5. Comprovació de les assumpcions

5.1. Linealitat i homoscedasticitat

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.

5.2. Normalitat dels residus

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.

5.3. Homoscedasticitat

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.

6. Resultats

A tall de resum, la interpretació final que fem de les variables és que:

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

7. Conclusions

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.