Na przestrzeni ostatnich 60 lat da się zauważyć stopniowe karłowacenie śledzi oceanicznych wyławianych w Europie. Analiza danych była procesem wieloetapowym. Z powodu brakujących wartości konieczne okazało się wypełnienie ich przed przejściem do kolejnego etapu. Do ich zastąpienia została wykorzystana średnia wartość ze zbioru pogrupowanych parametrów. W kolejnym etapie przeprowadzona została analiza podstawowych statystyk, a także rozkładu wartości atrybutów i korelacji między nimi. W ostatnim etapie stworzony został regresor przewidujący rozmiar śledzia.
Podczas przeprowadzania analizy zauważono silny wpływ temperatury
przy powierzchni wody sst na długość łowionych śledzi
length (im wyższa temperatura, tym śledź był mniejszy).
Kolejnymi prametrami, które mogą wpływać na długość są:
fbar,totaln,recr.Przyczyną tego mogą być działania ludzi, czyli zwiększenie liczby wyławianych śledzi, co spowodowało opóźnienie ich rozwoju.
Celem projektu jest określenie jakie mogą być główne przyczyny stopniowego karłowacenia śledzi oceanicznych wyławianych w Europie. Dane do analizy zawierają pomiary śledzi i warunków w jakich żyją z ostatnich 60 lat, były one pobierane z połowów komercyjnych jednostek. W ramach połowu jednej jednostki losowo wybierano od 50 do 100 sztuk trzyletnich śledzi. Dane są uporządkowane chronologicznie.
Kolejne kolumny w zbiorze danych to:
W tej części następuje załadowanie wykorzystanych w projekcie bibliotek, zapewnienie powtarzalności wyników, wczytywanie danych i wstępne przygotowanie danych.
library(dplyr)
library(tidyr)
library(skimr)
library(ggplot2)
library(plotly)
library(ggcorrplot)
library(caret) set.seed(23)Wartości puste w zbiorze danych oznaczone są znakiem ‘?’, przy
wczytywaniu, korzystając z parametru na.string, zostaną
zastąpione wartością NA.
df <- read.csv('sledzie.csv', na.string='?')
head(df)dim(df)## [1] 52582 16
Zbiór danych zawiera 52582 obserwacji opisanych 16 cechami.
Z powyższego wykresu widać, że brakujące wartości występują w kolumnach, które opisują:
W przypadku odrzucenia tych pomiarów utracone zostanie zbyt dużo istotnych informacji. Można zauważyć, że dane te są silnie ze sobą powiązane (dla danego połowu przyjmują stałe wartości).
df[200:215,]Jak widać w powyższym zestawieniu, brakujące dane można zastąpić danymi z podobnych wierszy (obserwacji).
impute.mean <- function(x) replace(x, is.na(x), mean(x, na.rm = TRUE))
df <- df %>%
group_by(recr, xmonth) %>%
mutate(
cfin1 = impute.mean(cfin1),
cfin2 = impute.mean(cfin2),
chel1 = impute.mean(chel1),
chel2 = impute.mean(chel2),
lcop1 = impute.mean(lcop1),
lcop2 = impute.mean(lcop2),
sst = impute.mean(sst)
) %>% ungroup()W tej części następuje opisane głównych statystyk zbioru, dokonanie analizy wartości atrybutów oraz przedstawienie wykresu zagęszczenia planktonu w czasie.
| Wartość | |
|---|---|
| Liczba kolumn (zmiennych) | 16 |
| Liczba wierszy (obserwacji) | 52582 |
prettyTable(skim(df), show_entries=16)Na poniższym wykresie można z łatwością zauważyć, że rozkład długości
złowionego śledzia length przypomina rozkład normalny.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 19.00 24.00 25.50 25.30 26.50 32.50 1.65
Z wykresu wynika, że dostępność planktonu cfin1 była
zdecydowanie niska.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 0.0000 0.0000 0.1111 0.4457 0.3333 37.6667 0.9500
Podobnie jak w przypadku cfin1, rozkład
cfin2 jest zdominowany przez niskie wartości, jednak
w znacznie mniejszym stopniu.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 0.0000 0.2778 0.7012 2.0258 1.7936 19.3958 3.7100
Podobnie jak w poprzednich cechach można zauważyć niską dostępność
planktonu chel1.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 0.000 2.469 5.750 10.003 11.500 75.000 14.270
Można zauważyć, że rozkład dostępności planktonu chel2
jest zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 5.238 13.427 21.435 21.219 27.193 57.706 9.980
Można zauważyć, że rozkład dostępności planktonu lcop1
jest zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 0.3074 2.5479 7.0717 12.8048 21.2315 115.5833 15.0400
Widać, że rozkład dostępności planktonu lcop2 jest
zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 7.849 17.808 24.859 28.422 37.232 68.736 13.850
Widać, że rozkład natężenia połowów w regionie fbar jest
zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 0.0680 0.2270 0.3320 0.3304 0.4560 0.8490 0.1600
Widać, że rozkład rocznego narybeku recr jest
zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 140515 360061 421391 520367 724151 1565890 271063
Widać, że rozkład łącznego roczne natężenia połowów w regionie
cumf jest zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 0.06833 0.14809 0.23191 0.22981 0.29803 0.39801 0.09000
Widać, że rozkład łącznej liczby ryb złowionych w ramach połowu
totaln jest zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 144137 306068 539558 514973 730351 1015595 221382
Widać, że rozkład temperatury przy powierzchni wody sst
jest zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 12.77 13.60 13.86 13.87 14.16 14.73 0.44
Widać, że rozkład poziomu zasolenia wody sal jest
zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 35.40 35.51 35.51 35.51 35.52 35.61 0.04
Z wykresu można odczytać, że większość obserwacji pochodzi z okresu letnio-jesiennego (lipiec, sierpień, wrzesień, październik).
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## 1.000 5.000 8.000 7.258 9.000 12.000 2.760
Widać, że rozkład oscylacji północnoatlantyckiej nao
jest zróżnicowany.
## Min. 1st Qu. Median Mean 3rd Qu. Max. SD
## -4.89000 -1.89000 0.20000 -0.09236 1.63000 5.08000 2.25000
Wykres przedstawia dostępność planktonów w czasie.
W tej części następuje analiza korelacji między zmiennymi.
corrMatrix <- round( cor(df %>% select(-X)), 2)
ggcorrplot(round(corrMatrix,1), type = "lower", lab = TRUE)Bardzo silne korelacje dodatnie:
1.0 między chel1, a
lcop1,0.9 między chel2, a
lcop2.Silne korelacje dodatnie:
0.8 między fbar, a cumf (oba
parametry opisują natężenie połowów w regionie)0.7 między cfin2, a
lcop2Silna korelacja ujemna:
-0.7 między totaln, a cumf
(parametry opisują liczbę złowionych śledzi i ułamek pozostawionego
narybku)Do oszacowania długości śledzia length istotny wydaje
się być parametr temperatury przy powierzchni wody sst,
oraz w mniejszym stopniu parametry: oscylacja północnoatlantycka
nao, zagęszczenie Calanus helgolandicus gat. 1
chel1, zagęszczenie widłonogów gat. 1 lcop1
oraz ułamek pozostawionego narybku fbar. Zmienne te warto
brać pod uwagę podczas analizy karłowacenia się śledzi.
Wykres przedstawia zmianę rozmiaru złowionych śledzi na przestrzeni lat.
W tej części zostanie zaproponowany przykładowy model do predykcji długości śledzia. Zbiór został podzielony na dane uczące, walidujące i testowe w proporcjach 14:3:3.
Do modelu został wykorzystany algorytm Random Forest, a
najlepsze wyniki uzyskano dla modelu o parametrze
mtry = 4.
inTrainging <- createDataPartition(df$length,
p = .7,
list = FALSE)
training <- df[ inTrainging, ] %>% select(-c(X, xmonth))
testing <- df[-inTrainging, ]
ctrl <- trainControl(
method = "repeatedcv",
number = 2,
repeats = 5
)
fit <- train(length ~ .,
data = training,
method = "rf",
trControl = ctrl,
tuneGrid = expand.grid(mtry = 4:4),
ntree = 32
)
fit## Random Forest
##
## 36810 samples
## 13 predictor
##
## No pre-processing
## Resampling: Cross-Validated (2 fold, repeated 5 times)
## Summary of sample sizes: 18405, 18405, 18405, 18405, 18405, 18405, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 1.187991 0.4840271 0.9401704
##
## Tuning parameter 'mtry' was held constant at a value of 4
knitr::kable(fit$results[,1:3], caption="Tabela wyników ze zbioru uczącego")| mtry | RMSE | Rsquared |
|---|---|---|
| 4 | 1.187991 | 0.4840271 |
predictions <- predict(fit, newdata = testing %>% select(-c(X, xmonth)))
result_predictions <- postResample(pred = predictions, obs=testing$length)
knitr::kable(result_predictions[1:2], caption = "Tabela wyników ze zbioru testującego")| x | |
|---|---|
| RMSE | 1.1873360 |
| Rsquared | 0.4826705 |
W tej części zostanie przedstawiona analiza ważności atrybutów modelu regresji.
ggplotly(
ggplot(varImp(fit)) + geom_col(fill = 'steelblue') + theme_minimal() +
labs(y="Ważność", x="Cecha") )Z wykresu wynika, że parametry: temperatura przy powierzchni wody
sst, natężenie połowów fbar, łączna liczba ryb
złowionych w ramach połowu totaln oraz roczny narybek
recr zdecydowanie wyróżniają się od pozostałych parametrów.
Zmiany temperatury mogą powodować zmiany w rozwoju planktonów, które
mogą pogarszać warunki środowiska życia śledzi i ograniczać ich wzrost.
Logiczne wydaje się, że jeśli zwiększymy liczbę wyławianych śledzi to
z biegiem czasu doprowadzi do zmniejszenia ich populacji, co wiąże się
ze zmniejszeniem ich rozwoju do czasu kolejnego połowu.