Údaje

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

library(car)
## Loading required package: carData
library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:car':
## 
##     logit
climate_data <- read.csv("DailyDelhiClimateTest.csv", dec = ".", sep = ",", header = TRUE, stringsAsFactors = FALSE)

cat("## Kontrola Dát\n")
## ## Kontrola Dát
dim(climate_data)
## [1] 114   5
str(climate_data)
## 'data.frame':    114 obs. of  5 variables:
##  $ date        : chr  "2017-01-01" "2017-01-02" "2017-01-03" "2017-01-04" ...
##  $ meantemp    : num  15.9 18.5 17.1 18.7 18.4 ...
##  $ humidity    : num  85.9 77.2 81.9 70 74.9 ...
##  $ wind_speed  : num  2.74 2.89 4.02 4.54 3.3 ...
##  $ meanpressure: num  59 1018 1018 1016 1014 ...
summary(climate_data) # Súhrn pre všetky stĺpce
##      date              meantemp        humidity       wind_speed    
##  Length:114         Min.   :11.00   Min.   :17.75   Min.   : 1.387  
##  Class :character   1st Qu.:16.44   1st Qu.:39.62   1st Qu.: 5.564  
##  Mode  :character   Median :19.88   Median :57.75   Median : 8.069  
##                     Mean   :21.71   Mean   :56.26   Mean   : 8.144  
##                     3rd Qu.:27.71   3rd Qu.:71.90   3rd Qu.:10.069  
##                     Max.   :34.50   Max.   :95.83   Max.   :19.314  
##   meanpressure 
##  Min.   :  59  
##  1st Qu.:1007  
##  Median :1013  
##  Mean   :1004  
##  3rd Qu.:1017  
##  Max.   :1023
climate_data_selected <- climate_data[, c("meantemp", "humidity", "wind_speed", "meanpressure")]
head(climate_data_selected)

Regresný model

# Vytvorenie modelu
lrm_climate <- lm(meantemp ~ humidity + wind_speed + meanpressure, data = climate_data_selected)

# Súhrn modelu
summary(lrm_climate)
## 
## Call:
## lm(formula = meantemp ~ humidity + wind_speed + meanpressure, 
##     data = climate_data_selected)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.4346 -2.3787  0.0088  2.3849  7.3508 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  42.823718   3.741722  11.445   <2e-16 ***
## humidity     -0.296567   0.017141 -17.302   <2e-16 ***
## wind_speed   -0.140056   0.091436  -1.532    0.128    
## meanpressure -0.003272   0.003464  -0.945    0.347    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.261 on 110 degrees of freedom
## Multiple R-squared:  0.744,  Adjusted R-squared:  0.737 
## F-statistic: 106.6 on 3 and 110 DF,  p-value: < 2.2e-16

Tento regresný model sa snažil vysvetliť zmeny priemernej teploty pomocou údajov o vlhkosti, rýchlosti vetra a tlaku, pričom dosiahol pomerne silnú predikčnú silu s hodnotou (Multiple R-squared) rovnou 0,744, čo znamená, že tri zvolené premenné spoločne vysvetľujú takmer tri štvrtiny variability teploty. Analýza koeficientov a P-hodnôt ukázala, že zatiaľ čo vlhkosť a tlak sú pre predpoveď teploty štatisticky vysoko významné, rýchlosť vetra nemá preukázateľný vplyv. Koeficient pri vlhkosti je záporný, čo znamená, že so zvyšujúcou sa vlhkosťou teplota klesá, zatiaľ čo tlak má mierne pozitívny vzťah. Napriek tomu, že model funguje dobre, jeho typická chyba (Residual standard error) je 3,261 stupňa, čo znamená, že predpovede sa môžu od skutočnej teploty odchýliť o túto hodnotu.

Korelačná analýza

predictors <- climate_data_selected[, c("humidity", "wind_speed", "meanpressure")]

cat("## Korelačná matica prediktorov:\n")
## ## Korelačná matica prediktorov:
round(cor(predictors), 3)
##              humidity wind_speed meanpressure
## humidity        1.000     -0.341       -0.098
## wind_speed     -0.341      1.000        0.130
## meanpressure   -0.098      0.130        1.000
cat("\n## Scatterplotová matica:\n")
## 
## ## Scatterplotová matica:
pairs(predictors,
      main = "Scatterplotová matica – premenné humidity, wind_speed, meanpressure")

Model mi vyšiel celkom dobre, pretože R^2 je 0,744. To znamená, že vlhkosť, vietor a tlak spoločne vysvetľujú viac ako 74 % celkovej zmeny teploty. Pri pohľade na koeficienty a P-hodnoty vidím, že pre moju predpoveď sú najdôležitejšie vlhkosť a tlak, zatiaľ čo rýchlosť vetra nemá preukázateľný vplyv. Vlhkosť má záporný vplyv (-0,2965), čo znamená, že čím je vzduch vlhší, tým je chladnejšie. Tlak má, naopak, mierny pozitívny vplyv.Zároveň som si skontrolovala aj vzťahy medzi mojimi prediktormi pomocou korelačnej matice. Graf ukázal, že vlhkosť, vietor a tlak na sebe navzájom nezávisia, pretože body sú rozptýlené náhodne.

VIF – multikolinearita

lrm_climate <- lm(meantemp ~ humidity + wind_speed + meanpressure, data = climate_data_selected)

cat("## Variance Inflation Factor (VIF) pre pôvodný model:\n")
## ## Variance Inflation Factor (VIF) pre pôvodný model:
vif_result <- vif(lrm_climate)
print(vif_result)
##     humidity   wind_speed meanpressure 
##     1.134886     1.143445     1.020645

Môj regresný model pre predpovedanie priemernej teploty (meantemp) vyšiel veľmi dobre, pretože vysvetľuje viac ako 74 % variability v dátach. Zistila som, že vlhkosť a tlak sú štatisticky významné, pričom vlhkosť teplotu znižuje a tlak ju mierne zvyšuje, no rýchlosť vetra nemá žiaden vplyv. Vďaka scatterplotovej matici aj VIF testu viem, že v mojom modeli nie je problém s multikolinearitou, čo znamená, že dáta sú čisté a môžem sa spoľahnúť, že každá významná premenná prináša unikátnu informáciu.

Condition Number

lrm_climate_final <- lm(meantemp ~ humidity + meanpressure, data = climate_data_selected)

cat("## Súhrn finálneho (redukovaného) regresného modelu:\n")
## ## Súhrn finálneho (redukovaného) regresného modelu:
summary(lrm_climate_final)
## 
## Call:
## lm(formula = meantemp ~ humidity + meanpressure, data = climate_data_selected)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.1138 -2.2449  0.2842  2.5390  7.6612 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  41.744914   3.697055  11.291   <2e-16 ***
## humidity     -0.287846   0.016266 -17.697   <2e-16 ***
## meanpressure -0.003823   0.003466  -1.103    0.273    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.281 on 111 degrees of freedom
## Multiple R-squared:  0.7386, Adjusted R-squared:  0.7338 
## F-statistic: 156.8 on 2 and 111 DF,  p-value: < 2.2e-16

Po odstránení nevýznamnej premennej rýchlosti vetra som získala finálny model, ktorý predpovedá priemernú teplotu (meantemp) už len pomocou vlhkosti a tlaku. Výsledok je stále vynikajúci, keďže R^2 je 0,7386, čo znamená, že len tieto dve premenné vysvetľujú takmer 74 % zmien teploty. Vlhkosť zostáva vysoko významná a má záporný vplyv (-0,2878), no v tomto redukovanom modeli sa priemerný tlak stal štatisticky nevýznamným (P-hodnota 0,273). Z toho vyplýva, že jediným preukázateľným a silným prediktorom teploty je teraz len vlhkosť vzduchu, a to s typickou chybou modelu 3,281 stupňa.

Vynechanie premennej ‘rýchlosť vetra’

# Východiskový dátový rámec
# climate_data_selected <- climate_data[, c("meantemp", "humidity", "wind_speed", "meanpressure")]
# Používam ho z pamäte

model_no_windspeed <- lm(meantemp ~ humidity + meanpressure, data = climate_data_selected)
summary(model_no_windspeed)
## 
## Call:
## lm(formula = meantemp ~ humidity + meanpressure, data = climate_data_selected)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.1138 -2.2449  0.2842  2.5390  7.6612 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  41.744914   3.697055  11.291   <2e-16 ***
## humidity     -0.287846   0.016266 -17.697   <2e-16 ***
## meanpressure -0.003823   0.003466  -1.103    0.273    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.281 on 111 degrees of freedom
## Multiple R-squared:  0.7386, Adjusted R-squared:  0.7338 
## F-statistic: 156.8 on 2 and 111 DF,  p-value: < 2.2e-16

Po redukcii, kedy som z modelu pre predpoveď priemernej teploty (meantemp) odstránila nevýznamnú rýchlosť vetra, mi zostali len vlhkosť a tlak. Výsledný model je stále veľmi silný, pretože hodnota R^2 je 0,7386, čo znamená, že len tieto dve premenné vysvetľujú takmer 74 % zmien teploty. Vlhkosť zostáva vysoko významná a má záporný vplyv (-0,2878), no v tomto zjednodušenom modeli sa priemerný tlak stal štatisticky nevýznamným (P-hodnota 0,273). Z toho vyplýva, že jediným skutočne preukázateľným a silným prediktorom teploty je teraz len vlhkosť vzduchu, a to s typickou chybou modelu 3,281 stupňa.

Škálovanie premenných

climate_data_selected$humidity_c    <- scale(climate_data_selected$humidity, center=TRUE, scale=TRUE)
climate_data_selected$wind_speed_c  <- scale(climate_data_selected$wind_speed, center=TRUE, scale=TRUE)
climate_data_selected$meanpressure_c<- scale(climate_data_selected$meanpressure, center=TRUE, scale=TRUE)

model_centered <- lm(meantemp ~ humidity_c + wind_speed_c + meanpressure_c,
                     data = climate_data_selected)

cat("## Súhrn regresného modelu so škálovanými premennými:\n")
## ## Súhrn regresného modelu so škálovanými premennými:
summary(model_centered)
## 
## Call:
## lm(formula = meantemp ~ humidity_c + wind_speed_c + meanpressure_c, 
##     data = climate_data_selected)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.4346 -2.3787  0.0088  2.3849  7.3508 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     21.7131     0.3055  71.083   <2e-16 ***
## humidity_c      -5.6550     0.3268 -17.302   <2e-16 ***
## wind_speed_c    -0.5025     0.3281  -1.532    0.128    
## meanpressure_c  -0.2928     0.3100  -0.945    0.347    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.261 on 110 degrees of freedom
## Multiple R-squared:  0.744,  Adjusted R-squared:  0.737 
## F-statistic: 106.6 on 3 and 110 DF,  p-value: < 2.2e-16
cat("\n## VIF pre škálovaný model:\n")
## 
## ## VIF pre škálovaný model:
library(car)
vif(model_centered)
##     humidity_c   wind_speed_c meanpressure_c 
##       1.134886       1.143445       1.020645

Na začiatku som vytvorila model pre priemernú teplotu (meantemp) pomocou vlhkosti, rýchlosti vetra a tlaku, ktorý už v pôvodnej forme vysvetľoval viac ako 74 % dát. Testy VIF a scatterplotová matica potvrdili, že medzi mojimi prediktormi nie je problém s multikolinearitou, čo znamená, že údaje sú kvalitné a môžem sa na ne spoľahnúť. Zistila som, že rýchlosť vetra nebola významná, preto som ju z modelu odstránila. Finálny model s dvomi premennými si udržal skvelý výkon s R^2 približne 0,739, ale v ňom mi už ako jediný silný a významný prediktor zostala len vlhkosť, ktorá teplotu znižuje.