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