Biblioteki…
library(tidyverse)
library(ggplot2)
library(magrittr)
library(readxl)
library(DT)
library(ggpmisc)
library(Hmisc)
library(plotly)
library(lubridate)
library(scatterplot3d)
library(purrr)
library(cowplot)
library(openair)
library(psych)Wczytano dane z monitoringu stanu jakości zbiornika wodnego (w formacie xlsx). Zawierają osiem zmiennych badanych na przestrzeni trzech lat, z uwzględnieniem czterech punktów pomiarowo - kontrolnych.
dane2[,c(3:10)] <- round(dane2[,c(3:10)], digits = 2)
a <- datatable(dane2, caption = "Dane", options = list(scrollX = TRUE))
a## Nr_pomiaru Rok BOD5 COD
## Length:140 Min. :2017 Min. : 1.000 Min. :17.20
## Class :character 1st Qu.:2018 1st Qu.: 4.000 1st Qu.:21.50
## Mode :character Median :2018 Median : 5.000 Median :22.50
## Mean :2018 Mean : 5.371 Mean :22.57
## 3rd Qu.:2019 3rd Qu.: 7.000 3rd Qu.:23.73
## Max. :2019 Max. :12.000 Max. :27.10
## Ammonium Nitrogen Nitrite Nitrogen Nitrate Nitrogen Total Nitrogen
## Min. :0.1500 Min. :0.0300 Min. :0.0600 Min. :1.500
## 1st Qu.:0.3675 1st Qu.:0.1775 1st Qu.:0.1200 1st Qu.:1.837
## Median :0.4800 Median :0.2450 Median :0.1750 Median :2.335
## Mean :0.5508 Mean :0.2546 Mean :0.1984 Mean :2.546
## 3rd Qu.:0.6925 3rd Qu.:0.2925 3rd Qu.:0.2700 3rd Qu.:3.502
## Max. :1.1000 Max. :0.5700 Max. :0.5400 Max. :3.730
## Total Phosphorus Suspended matter
## Min. :0.1400 Min. :10.00
## 1st Qu.:0.2000 1st Qu.:12.00
## Median :0.2750 Median :13.00
## Mean :0.2614 Mean :15.32
## 3rd Qu.:0.3200 3rd Qu.:16.00
## Max. :0.3500 Max. :31.00
Wykonano wykresy przedstawiające wartości poszczególnych zmiennych na przestrzeni lat. Kolorami zaznaczono podział na punkty pomiarowo - kontrolne (P1, P2, P3, P4). Do rozdzielenia wykresów skorzytano z funkcji facet_wrap.
dane <- filter(dane, Nr_pomiaru%in%c("P1", "P2", "P3", "P4")) %>%
mutate(Nr_pomiaru = factor(Nr_pomiaru, levels = c("P1", "P2", "P3", "P4")))
ggplot(data = dane, aes(Rok, Wartosc, color = Nr_pomiaru)) +
theme_minimal()+
scale_x_continuous(expand=c(0,0), limits = c(2016,2020))+
geom_jitter()+
geom_line()+
labs(title = "Stan wszystkich zmiennych",
y = "Wartość", x = "")+
facet_wrap(~Zmienna, scales = "free", ncol = 2)W celu sprawdzenia występowania zależności między analizowanymi zmiennymi, obliczono wartości współczynnika korelacji. Wyniki zostały umieszczone w tabeli poniżej.
korelacje <- as.data.frame(round(cor(dane2_d), digits = 2))
k <- datatable(korelacje, options = list(scrollX = TRUE))
kPrzygotowano dwa identyczne wektory (l1, l2) zawierające nazwy zmiennych. Następnie napisano funkcję o nazwie scatter_fun, która kreśli wykres rozrzutu i dodaje linie regresji (za pomocą geom_smooth). Do zapętlenia użyto map() z biblioteki purrr. Proces tworzenia wykresów polegał na przekazaniu każdej zmiennej z l1 do pierwszego argumentu w scatter_fun() i ustawianiu drugiego argumentu na l2, czyli przejściu przez oba wektory zmiennych, tworząc wszystkie wykresy jednocześnie. Takie rozwiązanie było możliwe, dzięki zagnieżdżeniu jednej pętli w drugiej - zmienne z l1 umieszczono w pętli zewnętrznej, a z l2 - w pętli wewnętrznej.
W rezultacie powstały 64 wykresy - uwzględniając również te, na których ta sama zmienna znajduje się na obu osiach, czego efektem jest linia prosta, a także wykresy, które zawierają takie same zmienne, ale przedstawione w odwrotnej konfiguracji na osiach x i y.
Poniżej znajduje się rezultat wymienionych etapów działania, w postaci wykresów każdej kombinacji zmiennych, uwzględniając podział na konkretną zmienną.
l1 = names(dane2_d)[1:8]
l2 = names(dane2_d)[1:8]
scatter_fun = function(x, y) {
ggplot(dane2_d, aes(x = .data[[x]], y = .data[[y]]) ) +
geom_point() +
geom_smooth(method = "loess", se = FALSE, color = "#6DF373") +
theme_bw() +
labs(x = x,
y = y)
}
all_plots = map(l1,
~map(l2, scatter_fun, y = .x) )## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
##
## [[7]]
##
## [[8]]