Airquality

Author

Aleksander Bartnik

1 Wprowadzenie

Analizowany jest zbiór danych airquality, zawiera on pomiary jakości powietrza w Nowym Jorku z 1973 roku. Dane te obejmują informacje o średnim poziomie ozonu,średniej temperaturze,średniej prędkości wiatru oraz promieniowanie słoneczne z okresu 5 miesięcy w Nowym Yorku z roku 1973.

attach(airquality)
head(airquality,10)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
10    NA     194  8.6   69     5  10

2 Podstawowe danych

Wszystkie dane przedstawione na wykresie pudełkowym:

library(ggplot2)
library(tidyr)
airquality_long <- airquality %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Value")

ggplot(data = airquality_long, aes(x = Variable, y = Value)) +
  geom_boxplot(aes(fill = Variable)) +
  theme_minimal() +
  labs(title = "Rozkład wartości zmiennych w zbiorze airquality",
       x = "Zmienna", y = "Wartość")

2.1 Statystyki opisowe

Dla każdej zmiennej możemy łatwo obliczyć podstawowe statystyki opisowe.Robimy to za pomocą funkcji summary.

summary(subset(airquality, select = -c(Month, Day)))
     Ozone           Solar.R           Wind             Temp      
 Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00  
 1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00  
 Median : 31.50   Median :205.0   Median : 9.700   Median :79.00  
 Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88  
 3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00  
 Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00  
 NA's   :37       NA's   :7                                       

Widizmy tu podsumowanie dla każdej zmiennej: wartość minimalna i maksymalna, średnia, a także kwantyle rzędu: pierwszego, drugiego (jako mediana), trzeciego. Z tego wykluczone są oczywiście zmienne dnia i miesiąca. Dla poziomu ozonu i promieni słonecznych dla niektórych dni nie wykonano pomiarów.

3 Wizualizacja danych

3.1 Histogramy

Niżej mamy histogramy dla poziomu ozonu, temperatury oraz wiatru.

ggplot(airquality, aes(x = Ozone)) +
  geom_histogram(binwidth = 10, fill = "skyblue", color = "black") +
  theme_light() +
  labs(title = "Histogram poziomu ozonu", x = "Ozon", y = "Częstość")

ggplot(airquality, aes(x = Temp)) +
  geom_histogram(binwidth = 5, fill = "orange", color = "black") +
  theme_light() +
  labs(title = "Histogram temperatury", x = "Temperatura", y = "Częstość")

ggplot(airquality, aes(x = Wind)) +
  geom_histogram(binwidth = 5, fill = "green", color = "black") +
  theme_light() +
  labs(title = "Histogram temperatury", x = "Prędkośc wiatru", y = "Częstość")

Możemy zobaczyć, że wrtości ozonu im większa tym mniej razy wystepuje. Zupełnie odwrotną zależność możemy zobaczyć na histogramie temperatury. Średnia prędkość wiatru ma rozkład zbliżony do normalnego.

Histogram poziomu ozonu z podziałem na miesiące.

airquality$Month = factor(airquality$Month, 
                           levels = 5:9, 
                           labels = c("Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień"))
ggplot(airquality, aes(x = Ozone, fill = factor(Month))) +
  geom_histogram(binwidth = 10, color = "black", position = "dodge") +
  theme_minimal() +
  labs(title = "Histogram poziomu ozonu z podziałem na miesiące",
       x = "Poziom ozonu", y = "Częstość", fill = "Miesiąc")

3.2 Związki między zmiennymi

Analiza związku między poziomem ozonu a temperaturą za pomocą wykresu punktowego z linią trendu.

ggplot(airquality, aes(x = Temp, y = Ozone)) +
  geom_point(aes(color = Wind), size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  theme_minimal() +
  labs(title = "Poziom ozonu a temperatura", x = "Temperatura", y = "Ozon")

Na lini trendu widać zależność, że wraz z wzrostem temperatury, poziom ozonu także rośnie. Możemy to zaobserwować po dodatnim współczynniku determinacji R-kwadrat:

summary(lm(Ozone ~ Temp, data = airquality))

Call:
lm(formula = Ozone ~ Temp, data = airquality)

Residuals:
    Min      1Q  Median      3Q     Max 
-40.729 -17.409  -0.587  11.306 118.271 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -146.9955    18.2872  -8.038 9.37e-13 ***
Temp           2.4287     0.2331  10.418  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 23.71 on 114 degrees of freedom
  (37 obserwacji zostało skasowanych z uwagi na braki w nich zawarte)
Multiple R-squared:  0.4877,    Adjusted R-squared:  0.4832 
F-statistic: 108.5 on 1 and 114 DF,  p-value: < 2.2e-16

Korelacja pomiędzy temperaturą a promieniowaniem słonecznym.

ggplot(airquality, aes(x = Temp, y = Solar.R)) +
  geom_point(aes(color = Wind), size = 3) +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  theme_minimal() +
  labs(title = "Korelacja między temperaturą a promieniowaniem słonecznym",
       x = "Temperatura", y = "Promieniowanie słoneczne")

Jak widać nie ma dużej korelacji między tymi zmiennymi. Utwierdzić nas w przekonaniu może współczynnik determinacji R-kwadrat bliski zeru.

summary(lm(Solar.R ~ Temp, data = airquality))

Call:
lm(formula = Solar.R ~ Temp, data = airquality)

Residuals:
     Min       1Q   Median       3Q      Max 
-169.697  -59.315    6.224   67.685  186.083 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -24.431     61.508  -0.397 0.691809    
Temp           2.693      0.782   3.444 0.000752 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 86.86 on 144 degrees of freedom
  (7 obserwacji zostało skasowanych z uwagi na braki w nich zawarte)
Multiple R-squared:  0.07609,   Adjusted R-squared:  0.06967 
F-statistic: 11.86 on 1 and 144 DF,  p-value: 0.0007518

3.3 Analiza czasowa

Zmienność poziomu ozonu w czasie na przestrzeni miesięcy.

ggplot(airquality, aes(x = factor(Month), y = Ozone)) +
  geom_boxplot(aes(fill = factor(Month))) +
  theme_minimal() +
  labs(title = "Zmienność poziomu ozonu w zależności od miesiąca",
       x = "Miesiąc", y = "Poziom ozonu")

Widać na wykresie pudełkowym wartości ozonu widać, że najwyższą średnią uzyskiwał w sieprniu i lipcu. w innych miesiącach gdzie temperatura była mniejsza poziom ten się zmienijszał co można było zobaczyć na wcześniejszym wykresie.

Zmienność prędkości wiatru w czasie na przestrzeni miesięcy.

ggplot(airquality, aes(x = factor(Month), y = Wind)) +
  geom_boxplot(aes(fill = factor(Month))) +
  theme_minimal() +
  labs(title = "Zmienność prędkości wiatru w zależności od miesiąca",
       x = "Miesiąc", y = "Prędkość wiatru")

Widać na wykresie nieduże zróżnicowanie w prędkości wiatru w tym okresie. W każdym miesiącu mamy podobną, niewiele różniącą się od siebie, średnią.

Zmienność promieniowania słonecznego w czasie na przestrzeni miesięcy.

ggplot(airquality, aes(x = factor(Month), y = Solar.R)) +
  geom_boxplot(aes(fill = factor(Month))) +
  theme_minimal() +
  labs(title = "Zmienność promieniowania słonecznego w zależności od miesiąca",
       x = "Miesiąc", y = "Promieniowanie słoneczne")

Ewidetnie miesiącem który tu się wyróżnia jest lipiec, którego średnia jest ewidentnie wyższa od pozostałych miesięcy.

4 Zakończenie

Zaprezentowałem tutaj sposoby na analize zboru danych airquality. Została ona wyliczona oraz przedstawiona graficznie z pomocą Rstudio.Z analizy tej można zaobserwować, że jakość powietrza w Nowym Jorku w 1973 roku była zróżnicowana w zależności od pory roku oraz innych czynników, takich jak temperatura czy prędkość wiatru. Widać, że występują wyraźne powiącania między różnymi zmiennymi.