Korelacja Najwieksza korelacja zachodzi pomiedzy PM10 i PM2.5 poniewarz maj różne srednice.

korelacja <- cor(dane)
corrplot.mixed(korelacja)

Model regresji wielokrotna dla PM10

mod1<-lm(PM10~.,data=dane,na.action = na.exclude)
ols_plot_diagnostics(mod1)

Wykres rozrzutu

p1<-scatterplotMatrix(dane, spread=FALSE, lty.smooth=2)

Kryterium informacyjne Akaikego jeżeli warto jest nizsza to model jest dokadniejszy

mod2<-lm(PM10~PM2.5+RH+SO2*NO2*NOx*O3,data=dane)
mod3<-lm(PM10~.*.,data=dane)
AIC(mod1,mod2,mod3)
##      df      AIC
## mod1  8 36233.10
## mod2 19 35291.51
## mod3 23 35044.88

Algorytm LEAPS

mAIC <- stepAIC(mod3, direction="backward")
## Start:  AIC=20859.17
## PM10 ~ (RH + PM2.5 + SO2 + NO2 + NOx + O3) * (RH + PM2.5 + SO2 + 
##     NO2 + NOx + O3)
## 
##             Df Sum of Sq    RSS   AIC
## - PM2.5:NO2  1       8.3 321747 20857
## - RH:PM2.5   1      23.5 321762 20858
## <none>                   321738 20859
## - PM2.5:O3   1     281.2 322019 20862
## - SO2:O3     1     524.2 322262 20865
## - PM2.5:NOx  1     669.2 322407 20868
## - PM2.5:SO2  1     732.3 322471 20869
## - NO2:O3     1     741.8 322480 20869
## - SO2:NO2    1    1020.1 322758 20873
## - RH:SO2     1    1149.1 322887 20875
## - RH:O3      1    1377.3 323116 20879
## - RH:NO2     1    1623.0 323361 20882
## - NOx:O3     1    3761.4 325500 20915
## - RH:NOx     1   11525.5 333264 21033
## - SO2:NOx    1   11634.7 333373 21035
## - NO2:NOx    1   11810.7 333549 21037
## 
## Step:  AIC=20857.3
## PM10 ~ RH + PM2.5 + SO2 + NO2 + NOx + O3 + RH:PM2.5 + RH:SO2 + 
##     RH:NO2 + RH:NOx + RH:O3 + PM2.5:SO2 + PM2.5:NOx + PM2.5:O3 + 
##     SO2:NO2 + SO2:NOx + SO2:O3 + NO2:NOx + NO2:O3 + NOx:O3
## 
##             Df Sum of Sq    RSS   AIC
## - RH:PM2.5   1      17.3 321764 20856
## <none>                   321747 20857
## - PM2.5:O3   1     335.2 322082 20861
## - SO2:O3     1     566.8 322313 20864
## - PM2.5:SO2  1     741.7 322488 20867
## - NO2:O3     1     743.7 322490 20867
## - PM2.5:NOx  1     997.3 322744 20871
## - RH:SO2     1    1170.9 322918 20874
## - RH:O3      1    1502.8 323249 20879
## - RH:NO2     1    1797.5 323544 20883
## - SO2:NO2    1    2024.5 323771 20887
## - NOx:O3     1    3768.4 325515 20914
## - RH:NOx     1   12242.7 333989 21042
## - NO2:NOx    1   12936.7 334683 21052
## - SO2:NOx    1   15056.4 336803 21084
## 
## Step:  AIC=20855.57
## PM10 ~ RH + PM2.5 + SO2 + NO2 + NOx + O3 + RH:SO2 + RH:NO2 + 
##     RH:NOx + RH:O3 + PM2.5:SO2 + PM2.5:NOx + PM2.5:O3 + SO2:NO2 + 
##     SO2:NOx + SO2:O3 + NO2:NOx + NO2:O3 + NOx:O3
## 
##             Df Sum of Sq    RSS   AIC
## <none>                   321764 20856
## - PM2.5:O3   1     425.3 322189 20860
## - SO2:O3     1     550.9 322315 20862
## - NO2:O3     1     733.0 322497 20865
## - PM2.5:SO2  1     845.4 322609 20867
## - PM2.5:NOx  1    1037.7 322802 20870
## - RH:SO2     1    1276.5 323040 20873
## - RH:O3      1    1485.6 323250 20877
## - RH:NO2     1    1790.7 323555 20881
## - SO2:NO2    1    2025.3 323789 20885
## - NOx:O3     1    3804.0 325568 20912
## - RH:NOx     1   12766.0 334530 21048
## - NO2:NOx    1   12939.0 334703 21051
## - SO2:NOx    1   15242.5 337006 21085
mLEAPS<-regsubsets(PM10~.,data=dane,nbest=10)

p<-plot(mLEAPS,scale="r2")

Algorytm EARTH

mEarth<-earth(PM10~.,dane)
ev<-evimp (mEarth)
plot(ev)

plot(mEarth)

Algorytm BORUTA

mBoruta<-Boruta(PM10~.,dane) 
boruta_signif <- names(mBoruta$finalDecision[mBoruta$finalDecision %in% c("Confirmed", "Tentative")])  
plot(mBoruta, cex.axis=.8, las=3, xlab="")

Walicaja krzywoliniowa

Control <- trainControl(method = "cv", number = 10, verboseIter = F)
mCV <- caret::train(PM10~.,
                    data=dane,
                    method = "lm",
                    metric = 'MAE', 
                    trControl = Control,
                    na.action = na.omit,
                    tuneLength = 15
)

wCV<-predict(mCV)

plot(dane$PM10,wCV,ylab="wartosci predykcji", xlab="wartosc PM10",main="")

gof(wCV,dane$PM10)
##          [,1]
## ME       0.00
## MAE      5.49
## MSE     82.14
## RMSE     9.06
## NRMSE % 35.90
## PBIAS %  0.00
## RSR      0.36
## rSD      0.93
## NSE      0.87
## mNSE     0.68
## rNSE     0.88
## d        0.96
## md       0.83
## rd       0.97
## cp       0.16
## r        0.93
## R2       0.87
## bR2      0.84
## KGE      0.91
## VE       0.85
ggof(wCV,dane$PM10,ylab="wartosci", xlab="nr obserwacji",main="")

plot(dane$PM10-wCV,ylab="wartosci", xlab="nr obserwacji",main="RĂłznica PM10 i wartosci predykcji")

plot(abs(dane$PM10-wCV),ylab="wartosci", xlab="nr obserwacji",main="Wartoci bezwgledne z różnica PM10 i wartosci predykcji")

plot(sort(abs(dane$PM10-wCV)),ylab="wartosci", xlab="nr obserwacji",main="Posortowane wartosci bezwzgledne")

Regresja

reg1<-lm(dane$PM10~dane$PM2.5)

ggplot(dane,aes(x = PM10, y = PM2.5)) + 
  geom_point() +
  stat_smooth(method = "lm", col = "red")

Przedzial ufnosci

confint(reg1)
##                  2.5 %     97.5 %
## (Intercept) 12.6559248 13.5334823
## dane$PM2.5   0.9736836  0.9999065

Badanie rozkadu PM2.5

RH<-dane[,1]
 PM10<-dane[,2]
 PM2.5<-dane[,3]
 SO2<-dane[,4]
 NO2<-dane[,5]
 NOx<-dane[,6]
 O3<-dane[,7]
 plot(PM2.5)

 shapiro.test(PM2.5[1:2000])
## 
##  Shapiro-Wilk normality test
## 
## data:  PM2.5[1:2000]
## W = 0.82021, p-value < 2.2e-16

Badanie rozkadu O3

plot(O3)

shapiro.test(O3[1:2000])
## 
##  Shapiro-Wilk normality test
## 
## data:  O3[1:2000]
## W = 0.96429, p-value < 2.2e-16

Wykres reszt

regresja<-lm(PM2.5~PM10+RH+SO2+NO2+NOx+O3)
reszty<-resid(regresja)
reszty_sort<-sort(reszty)


boxplot(reszty)

plot(reszty_sort)

Wykres modelu predykcji PM2.5

model<-fitted(regresja)
model_pre<-predict(regresja)
plot(model_pre)

Test modelu predykcji

testowy=PM2.5~model
plot(testowy)

Inflacja wariacji VIF

vif(regresja)
##     PM10       RH      SO2      NO2      NOx       O3 
## 2.769157 2.464370 1.821476 4.294749 3.588674 4.132260

Wykres modelu regresji PM2.5

plot(regresja)

Walidacja zalozen modelu regresji PM2.5

gvlma(regresja)
## 
## Call:
## lm(formula = PM2.5 ~ PM10 + RH + SO2 + NO2 + NOx + O3)
## 
## Coefficients:
## (Intercept)         PM10           RH          SO2          NO2          NOx  
##   -20.80688      0.71343      0.26127      1.17993     -0.12596     -0.02046  
##          O3  
##    -0.02231  
## 
## 
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = regresja) 
## 
##                       Value p-value                   Decision
## Global Stat        104529.1       0 Assumptions NOT satisfied!
## Skewness             3994.2       0 Assumptions NOT satisfied!
## Kurtosis            99921.2       0 Assumptions NOT satisfied!
## Link Function         168.6       0 Assumptions NOT satisfied!
## Heteroscedasticity    445.1       0 Assumptions NOT satisfied!

Model regresji wielorakiej dla PM2.5 metoda najmniejszych kwadratów

ols_plot_diagnostics(regresja)