# minimalni broj lokacija, foragingtrips() funkcija će filtrirati kraće tripove:
opt_minp <- 3
# radijus oko gnijezda za definiranje "kolonije" (u metrima):
opt_radius <- 500
# definiranje CRS-ova
wgs84 <- crs("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
htrs96 <- crs("+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 \
+x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
# definiranje mjesta gniježđenja (središte kolonije)
nest <- SpatialPoints(list(longitude = 549608, latitude = 4735945), proj4string = htrs96)
# definiranje spola
sextab <- data.frame(GpsID = c("CROG01", "CROG02", "CROG03", "CROG04", "CROG05"),
Sex = as.factor(c("Female", "Female", "Male", "Male", "Female")))
# dohvaćanje podloga
# funkcija raster::getData() dohvaća s GADM online baze državne granice:
hr <- getData(name = "GADM", country = "HRV", level = 0, path = 'data/')
it <- getData(name = "GADM", country = "ITA", level = 0, path = 'data/')
al <- getData(name = "GADM", country = "ALB", level = 0, path = 'data/')
mn <- getData(name = "GADM", country = "BIH", level = 0, path = 'data/')
bh <- getData(name = "GADM", country = "MNE", level = 0, path = 'data/')
sl <- getData(name = "GADM", country = "SVN", level = 0, path = 'data/')
# transformacija CRS-a za HR granicu
hr_proj <- spTransform(hr, CRSobj = htrs96)
# spajanje pojedinačnih država u jedan sloj
drzave <- rbind(hr, it, al, mn, bh, sl) %>% spTransform(CRSobj = htrs96)
plot(drzave)
# manje precizne granice za cijeli svijet
svijet <- readOGR(dsn = 'data/worldborders/', layer = 'TM_WORLD_BORDERS-0.3')
## OGR data source with driver: ESRI Shapefile
## Source: "data/worldborders/", layer: "TM_WORLD_BORDERS-0.3"
## with 246 features
## It has 11 fields
GPS podatke s Ecotone servera direktno dohvaća funkcija get_ecotone_data() koja se nalazi u odvojenoj skripti s funkcijama telemetry_f.R. Zatim odvojene mjesece posprema u jednu tablicu, tab, koju funkcijom mkspat() pretvara u R-ov prostorni format (sptab).
# username i šifra za pristup ecotone website-u
auth <- readLines("data/auth_laraud.txt")
# funkcija get_ecotone_data() dohvaća sa ecotone servera posljednju verziju podataka za određeni mjesec i godinu:
suppressMessages({
mj05 <- get_ecotone_data(2017, 5, "crogull", auth[1], auth[2])
mj06 <- get_ecotone_data(2017, 6, "crogull", auth[1], auth[2])
mj07 <- get_ecotone_data(2017, 7, "crogull", auth[1], auth[2])
mj08 <- get_ecotone_data(2017, 8, "crogull", auth[1], auth[2])
})
tab <- bind_rows(mj05, mj06, mj07, mj08) %>%
rename(Longitude = Longtitude) # tipfeler u Ecotone formatu
tab$GpsID <- as.factor(tab$GpsDescription)
# mkspat() funkcija od obične tablice radi prostornu tablicu, tj. spatialpoints dataframe
# movestats() fja dodaje point-to-point udaljenosti, vremensku razliku i brzinu
sptab <- mkspat(tab, crs = htrs96) %>%
movestats() %>%
left_join(sextab, by = "GpsID") # dodaje spol, prethodno zadan u sextab varijabli
plot(mkspat(tab, crs = wgs84), col = sptab$GpsID, pch = "o")
plot(svijet, add = TRUE)
Dodan je logički vektor sptab$AtColony koji govori je li pojedina GPS točka ‘na koloniji’ (TRUE) ili nije (FALSE). Radijus kolonije definiran je u varijabli opt_radius (vidi “Postavke”).
# dodavanje logičkog vektora za prisutnost na koloniji
sptab$AtColony <- spatfilter(input = sptab, excl_geom = nest, radius = opt_radius)
{
plot.c(drzave, radius = 1, col = "grey")
plot(gBuffer(nest, width = opt_radius), add = TRUE)
plot(sptab[sptab$AtColony,], add = TRUE)
plot(sptab[!sptab$AtColony,], add = TRUE, col = rgb(1, 0, 0))
}
U varijabli period su zadani početak (tj. vrijeme označavanja) i kraj gniježđenja.
# definiranje perioda gniježđenja za svaku jedinku
period <- tibble(GpsID = as.factor(c("CROG01", "CROG02", "CROG03", "CROG04", "CROG05")),
# ovdje je definiran početak sezone, tj. za 2017. trenutak postavljanja trackera
pocetak = as.POSIXct(c("2017-05-02 11:00:00",
"2017-05-02 11:00:00",
"2017-05-03 13:00:00",
"2017-05-03 13:00:00",
"2017-05-03 13:00:00"),
format = "%Y-%m-%d %H:%M:%S",
tz = "UTC"),
# ovdje je definiran kraj gniježđenja, tj. trenutak od kojeg se iz ponašanja ptice
# može zaključiti da više ne gnijezdi ("ručno" utvrđeno uvidom u podatke):
kraj = as.POSIXct(c("2017-06-04 03:00:00",
"2017-07-09 12:00:00",
"2017-06-30 10:00:00",
"2017-06-08 07:30:00",
"2017-06-25 07:00:00"),
format = "%Y-%m-%d %H:%M:%S",
tz = "UTC"))
# filtriranje prema periodu gniježđenja
sptab_g <- sptab %>%
left_join(period, by = "GpsID") %>%
filter(GPSTime > pocetak & GPSTime < kraj)
{
plot.p(drzave)
plot(sptab_g, col = sptab$GpsID, pch = '*', add = TRUE)
}
Podaci su grupirani prema pticama i izlascima s kolonije (foraging trips, u daljnjem tekstu “izlasci”) te su izračunati sljedeći podaci:
pocetak - vrijeme odlaska s kolonije.kraj - vrijeme povratka na koloniju.pocetak_mj - mjesec u kojem je jedinka otišla s kolonije, kao nominalna varijabla.kraj_mj - mjesec u kojem se jedinka vratila na koloniju, kao nominalna varijabla.l_p2p_total - ukupna prijeđena udaljenost tijekom izlaska \([km]\).l_nest_mean - srednja zračna udaljenost od gnijezda tijekom izlaska \([km]\).l_nest_max - najveća zračna udaljenost od gnijezda tijekom izlaska \([km]\).nest_max_x, nest_max_y - x i y koordinate najudaljenije točke od gnijezda tijekom izlaska.srednja_brzina - srednja brzina kretanja tijekom izlaska \([m/s]\).Cijela tablica je snimljena u laraud_trips.csv.
# ponovno spaja podatke za pojedine galebove u jednu tablicu
g <- rbind(g1, g2, g3, g4, g5)
gt <- g %>%
as.tibble() %>%
group_by(GpsID, TripID) %>%
summarise(pocetak = min(GPSTime),
kraj = max(GPSTime),
pocetak_mj = month(min(GPSTime), label = TRUE),
kraj_mj = month(max(GPSTime), label = TRUE),
l_p2p_total = sum(Distance) / 1000,
l_nest_mean = mean(Dist_from_nest) / 1000,
l_nest_median = median(Dist_from_nest) / 1000,
l_nest_max = max(Dist_from_nest) / 1000,
nest_max_x = LonProj[[which.max(Dist_from_nest)]],
nest_max_y = LatProj[[which.max(Dist_from_nest)]],
# trajanje = sum(Timediff) / 3600, # stara metoda za izračun
srednja_brzina = mean(Speed, na.rm = TRUE)) %>%
mutate(trajanje = difftime(kraj, pocetak, units = 'hours')) %>%
left_join(sextab, by = "GpsID")
Ovom metodom su u izlascima (“foraging trips”) identificirane 7938 GPS točke, od ukupno zabilježenih 16197 GPS točaka.
Isti podaci su izračunati i skupno po jedinci i prikazani u donjoj tablici, iz koje je vidljivo:
l_nest_mean vidi se da postoji jasna razlika između ponašanja jedinki CROG02 i CROG04 te svih ostalih s obzirom na zadržavanje u blizini kolonije.l_p2p_total vidi se da ne postoji velika razlika između ukupne udaljenosti koju su prešle ptice koje su se tijekom vremena istraživanja zadržavale u blizini kolonije (CROG02, CROG04) i ostalih ptica.gi <- g %>%
as.tibble() %>%
group_by(GpsID) %>%
summarise(pocetak = min(GPSTime),
kraj = max(GPSTime),
pocetak_mj = month(min(GPSTime), label = TRUE),
kraj_mj = month(max(GPSTime), label = TRUE),
l_p2p_total = sum(Distance) / 1000,
l_nest_mean = mean(Dist_from_nest) / 1000,
l_nest_median = median(Dist_from_nest) / 1000,
l_nest_max = max(Dist_from_nest) / 1000,
nest_max_x = LonProj[[which.max(Dist_from_nest)]],
nest_max_y = LatProj[[which.max(Dist_from_nest)]],
# trajanje = sum(Timediff) / 3600, # stara metoda za izračun
srednja_brzina = mean(Speed, na.rm = TRUE)) %>%
mutate(trajanje = difftime(kraj, pocetak, units = 'hours')) %>%
left_join(sextab, by = "GpsID")
gi %>%
dplyr::select(-pocetak_mj, -kraj_mj, -nest_max_x, -nest_max_y, -Sex) %>%
knitr::kable()
| GpsID | pocetak | kraj | l_p2p_total | l_nest_mean | l_nest_median | l_nest_max | srednja_brzina | trajanje |
|---|---|---|---|---|---|---|---|---|
| CROG01 | 2017-05-02 14:00:11 | 2017-06-03 12:30:24 | 3572.563 | 186.45974 | 200.92648 | 220.55897 | 1.725691 | 766.5036 hours |
| CROG02 | 2017-05-02 11:00:14 | 2017-07-09 10:00:19 | 7283.771 | 29.43883 | 32.90945 | 50.28673 | 1.590056 | 1631.0014 hours |
| CROG03 | 2017-05-04 04:00:13 | 2017-06-29 20:30:26 | 6853.602 | 145.65600 | 213.51673 | 246.95580 | 1.994603 | 1360.5036 hours |
| CROG04 | 2017-05-03 14:00:15 | 2017-06-08 07:00:15 | 4690.498 | 48.54801 | 25.82479 | 219.89667 | 2.376933 | 857.0000 hours |
| CROG05 | 2017-05-06 07:00:21 | 2017-06-25 06:30:13 | 6346.502 | 161.84477 | 219.55259 | 255.92294 | 2.444955 | 1199.4978 hours |
Korišteni paketi: adehabitatLT i trip.
# generiranje trip objekata za sve track-ove
g1_trip <- trip(g1, TORnames = c("GPSTime", "TripID"))
g2_trip <- trip(g2, TORnames = c("GPSTime", "TripID"))
g3_trip <- trip(g3, TORnames = c("GPSTime", "TripID"))
g4_trip <- trip(g4, TORnames = c("GPSTime", "TripID"))
g5_trip <- trip(g5, TORnames = c("GPSTime", "TripID"))
# kreiranje "trajectory" objekta
g1_traj <- as.ltraj(xy = coordinates(g1), date = g1$GPSTime, id = g1$TripID)
g2_traj <- as.ltraj(xy = coordinates(g2), date = g2$GPSTime, id = g2$TripID)
g3_traj <- as.ltraj(xy = coordinates(g3), date = g3$GPSTime, id = g3$TripID)
g4_traj <- as.ltraj(xy = coordinates(g4), date = g4$GPSTime, id = g4$TripID)
g5_traj <- as.ltraj(xy = coordinates(g5), date = g5$GPSTime, id = g5$TripID)
{
plot(g1_trip, main = "CROG01")
lines(drzave)
lines(g1_trip)
plot(g2_trip, main = "CROG02")
lines(drzave)
lines(g2_trip)
plot(g3_trip, main = "CROG03")
lines(drzave)
lines(g3_trip)
plot(g4_trip, main = "CROG04")
lines(drzave)
lines(g4_trip)
plot(g5_trip, main = "CROG05")
lines(drzave)
lines(g5_trip)
}
Korišten paket ggplot2.
p <- ggplot(gt) +
labs(x = "Jedinka")
p + geom_boxplot(aes(GpsID, l_p2p_total)) + labs(y = "Ukupna duljina puta tijekom izlaska [m]")
p + geom_boxplot(aes(GpsID, srednja_brzina)) + labs(y = "Srednja brzina tijekom izlaska [m/s]")
p + geom_boxplot(aes(GpsID, l_nest_mean)) + labs(y = "Srednja zračna udaljenost od gn. tijekom izlaska [m]")
p + geom_boxplot(aes(GpsID, l_nest_median)) + labs(y = "Srednja zračna udaljenost od gn. tijekom izlaska [m]")
p + geom_boxplot(aes(GpsID, l_nest_max)) + labs(y = "Maksimalna zračna udaljenost od gn. tijekom izlaska [m]")
p + geom_boxplot(aes(GpsID, as.numeric(trajanje))) + labs(y = "Ukupno trajanje izlaska [h]")
p <- ggplot(gt) +
labs(x = "Spol")
p + geom_boxplot(aes(Sex, l_p2p_total)) + labs(y = "Ukupna duljina puta tijekom izlaska [m]")
p + geom_boxplot(aes(Sex, srednja_brzina)) + labs(y = "Srednja brzina tijekom izlaska [m/s]")
p + geom_boxplot(aes(Sex, l_nest_mean)) + labs(y = "Srednja zračna udaljenost od gn. tijekom izlaska [m]")
p + geom_boxplot(aes(Sex, l_nest_median)) + labs(y = "Srednja zračna udaljenost od gn. tijekom izlaska [m]")
p + geom_boxplot(aes(Sex, l_nest_max)) + labs(y = "Maksimalna zračna udaljenost od gn. tijekom izlaska [m]")
p + geom_boxplot(aes(Sex, as.numeric(trajanje))) + labs(y = "Ukupno trajanje izlaska [h]")
Vrijeme odlaska i povratka na koloniju, prema vremenskim kategorijama:
p_kat - vrijeme odlaskak_kat - vrijeme povratkagt$p_kat <- NA
gt$k_kat <- NA
# timecat() kategorizira datetime varijablu u 4 kategorije
gt$p_kat <- timecat(gt$pocetak,
cutpoints = c(5, 11, 17, 23), # u UTC vremenskoj zoni
categories = c("01-07 h",
"07-13 h",
"13-19 h",
"19-01 h"))
gt$k_kat <- timecat(gt$kraj,
cutpoints = c(5, 11, 17, 23),
categories = c("01-07 h",
"07-13 h",
"13-19 h",
"19-01 h"))
gggt <- gt %>%
dplyr::select(GpsID, TripID, pocetak, kraj, Odlazak = p_kat, Povratak = k_kat, Sex) %>%
gather(oznaka, vrijeme, Odlazak:Povratak)
p <- ggplot(data = gggt, aes(x = vrijeme, fill = oznaka))
p + geom_bar(stat = "count", position = "dodge") + facet_grid(~Sex) +
labs(y = "frekvencija")
p <- ggplot(data = gggt, aes(x = vrijeme, fill = Sex))
p + geom_bar(stat = "count", position = "dodge") + facet_grid(~oznaka) +
labs(y = "frekvencija")
Dan i noć definirani su zavisno od izlaska i zalaska sunca prema datumu i lokaciji koristeći NOAA tablicu efemerida (funkcija sunriset iz paketa maptools).
dayornight <- function(latitude, longitude, datetime) {
library(maptools)
location <- matrix(c(longitude, latitude), nrow=1)
sunrise <- sunriset(location, datetime, direction = "sunrise", POSIXct.out = TRUE)
sunset <- sunriset(location, datetime, direction = "sunset", POSIXct.out = TRUE)
# print(sunrise)
# print(sunset)
if (datetime < sunrise$time | datetime > sunset$time) {return("night")}
if (datetime >= sunrise$time & datetime <= sunset$time) {return("day")}
}
Lokacija na kojoj je jedinka aktivna definirana je kao GPS točka minimalno 300 m udaljena od prethodne zabilježene GPS točke, što eliminira GPS ‘drift’ i vrlo vjerojatno upućuje na aktivno kretanje. Potencijalni problem za ovaj način definiranja može biti odmaranje na moru u uvjetima s prisutnom površinskom morskom strujom.
tab2 <- as_tibble(sptab)
tab2$daynight <- NA
for (i in 1:nrow(tab2)) {
tab2[i,]$daynight <- dayornight(latitude = tab2[i,]$Latitude,
longitude = tab2[i,]$Longitude,
datetime = tab2[i,]$GPSTime)
}
## Checking rgeos availability: TRUE
tab2$isactive <- FALSE
tab2[tab2$Distance >= 300,]$isactive <- TRUE
p4 <- ggplot(data = tab2, aes(x = isactive, y = (..count..)/sum(..count..)))
p4 + geom_bar(stat = "count", position = "dodge") + facet_grid(~daynight) +
labs(y = "rel. frequency", x = "activity")
Iz gornjeg grafa je vidljivo da je razina aktivnosti znatno veća tijekom dana, što potvrđuje i hi-kvadrat test:
conttab <- tab2 %>% dplyr::select(daynight, isactive) %>% table
hikv <- chisq.test(conttab)
hikv
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: conttab
## X-squared = 1360.3, df = 1, p-value < 2.2e-16
hikv$observed
## isactive
## daynight FALSE TRUE
## day 3866 6133
## night 4245 1953
hikv$expected
## isactive
## daynight FALSE TRUE
## day 5007.217 4991.783
## night 3103.783 3094.217
Za vremensku analizu potrebno je isključiti točke za koje je Timediff varijabla jako dugačka, jer ako je prošlo više sati ili dana, ne možemo znati je li ptica bila aktivna za vrijeme dana ili noći. Ovdje je 3600 sekundi uzeto kao cutoff vrijednost.
activehours <- tab2 %>%
filter(Timediff < 3600) %>%
group_by(isactive, daynight) %>%
summarise(activehours = sum(Timediff)/3600)
sati_noc <- activehours %>% filter(daynight == "night") %>% .$activehours %>% sum
akt_sati_noc <- activehours %>% filter(daynight == "night", isactive) %>% .$activehours %>% sum
akt_sati_noc/sati_noc * 100
## [1] 28.08149
sati_dan <- activehours %>% filter(daynight == "day") %>% .$activehours %>% sum
akt_sati_dan <- activehours %>% filter(daynight == "day", isactive) %>% .$activehours %>% sum
akt_sati_dan/sati_dan * 100
## [1] 59.46125
Dakle noću su ptice bile aktivne 28.0814883% vremena, a danju 59.4612461% vremena.
hikv2 <- activehours %>%
xtabs(activehours ~ daynight + isactive, .) %>%
chisq.test()
hikv2
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: .
## X-squared = 660.31, df = 1, p-value < 2.2e-16
hikv2$observed
## isactive
## daynight FALSE TRUE
## day 1755.0281 2574.2319
## night 1964.4861 767.0583
hikv2$expected
## isactive
## daynight FALSE TRUE
## day 2280.582 2048.678
## night 1438.932 1292.612
ggplot(data = activehours, aes(x = isactive, y = activehours)) +
geom_bar(stat = "identity") +
facet_grid(~daynight)
Učitani su podaci o kretanju ribarskih brodica za period gniježđenja galebova.
brod <- read.csv(file = "data/brodovi/brodovi.csv", sep = ";", header = TRUE) %>%
tbl_df() %>%
mutate(time = dmy_hm(GPS_DTIME)) %>%
rename(Latitude = WGS84_LAT, Longitude = WGS84_LONG) %>%
nodups %>%
mkspat(., crs = htrs96) %>%
mutate(DateTime = dmy_hm(GPS_DTIME))
plot(brod, pch = "."); lines(hr)
Područje za ovu analizu definirano je kao minimalni konveksni poligon koji obuhvaća 99% GPS lokacija ribarskih brodova iz dostupnog seta podataka, iz kojeg je izrezano kopno.
brodmcp <- brod %>% mutate(id = 1) %>% dplyr::select(id) %>% mcp(percent = 100)
razlika <- gDifference(brodmcp, drzave)
plot(brodmcp)
lines(drzave, col = rgb(0.4, 0.4, 0.4))
lines(razlika, col = rgb(1, 0, 0))
Unutar područja analize nasumično je generirano 5000 točaka (kontrola).
randomsample <- spsample(x = razlika, n = 5000, type = "random")
plot(randomsample)
plot(drzave, add = TRUE)
Za svaku GPS lokaciju galeba izračunate su sljedeće mjere: * dist_to_ship - minimalna udaljenost od lokacija brodica u rasponu ±7200 sekundi od trenutka bilježenja GPS točke * dist_to_random - minimalna udaljenost od kontrole, tj. 5000 točaka nasumično raspoređenih unutar područja analize
Budući da sad ne gledamo gledamo prosječnu nego minimalnu udaljenost, ovaj oblik kontrole s 5000 nasumičnih točaka po meni nema smisla, jer veličina uzorka utječe na vrijednost – što je veći n za kontrolu, veća je šansa da će se naći točka blizu GPS lokacije galeba.
brodovi_sad <- function(brod, datetime, window) {
diff_temp <- abs(difftime(brod$DateTime, datetime, units = "s"))
return(brod[diff_temp < window,])
}
p2p_dist <- function(x1, y1, x2, y2) {
dx <- x1 - x2
dy <- y1 - y2
return(sqrt(dx^2 + dy^2))
}
min_dist <- function(x, y, comparison_table) {
distances <- array()
for (i in 1:nrow(comparison_table)) {
distances[i] <- p2p_dist(x, y, comparison_table[i,1], comparison_table[i,2])
}
return(min(distances))
}
sptab_br <- sptab[!is.na(over(sptab, razlika)),]
sptab_br$dist_to_ship <- NA
sptab_br$dist_to_random <- NA
for (i in 1:nrow(sptab_br)) {
comparison_table <- brodovi_sad(brod,
sptab_br$GPSTime[i],
window = 7200)@coords
if(nrow(comparison_table) != 0) {
sptab_br$dist_to_ship[i] <- min_dist(x = sptab_br$LonProj[i],
y = sptab_br$LatProj[i],
comparison_table = comparison_table)
}
sptab_br$dist_to_random[i] <- min_dist(x = sptab_br$LonProj[i],
y = sptab_br$LatProj[i],
comparison_table = randomsample@coords)
}
# window = ±3600 s
sptab_br_1h <- sptab[!is.na(over(sptab, razlika)),]
sptab_br_1h$dist_to_ship <- NA
sptab_br_1h$dist_to_random <- NA
for (i in 1:nrow(sptab_br_1h)) {
comparison_table <- brodovi_sad(brod,
sptab_br_1h$GPSTime[i],
window = 3600)@coords
if(nrow(comparison_table) != 0) {
sptab_br_1h$dist_to_ship[i] <- min_dist(x = sptab_br_1h$LonProj[i],
y = sptab_br_1h$LatProj[i],
comparison_table = comparison_table)
}
sptab_br_1h$dist_to_random[i] <- min_dist(x = sptab_br_1h$LonProj[i],
y = sptab_br_1h$LatProj[i],
comparison_table = randomsample@coords)
}
# window = ±1800 s
sptab_br_30m <- sptab[!is.na(over(sptab, razlika)),]
sptab_br_30m$dist_to_ship <- NA
sptab_br_30m$dist_to_random <- NA
for (i in 1:nrow(sptab_br_30m)) {
comparison_table <- brodovi_sad(brod,
sptab_br_30m$GPSTime[i],
window = 1800)@coords
if(nrow(comparison_table) != 0) {
sptab_br_30m$dist_to_ship[i] <- min_dist(x = sptab_br_30m$LonProj[i],
y = sptab_br_30m$LatProj[i],
comparison_table = comparison_table)
}
sptab_br_30m$dist_to_random[i] <- min_dist(x = sptab_br_30m$LonProj[i],
y = sptab_br_30m$LatProj[i],
comparison_table = randomsample@coords)
}
hist(sptab_br$dist_to_ship, main = "histogram udaljenosti od brodova, prozor ±7200 sekundi")
hist(sptab_br_1h$dist_to_ship, main = "histogram udaljenosti od brodova, prozor ±3600 sekundi")
hist(sptab_br_30m$dist_to_ship, main = "histogram udaljenosti od brodova, prozor ±1800 sekundi")
summary(sptab_br$dist_to_ship)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 13.54 18202.82 37480.01 53614.85 74359.48 231573.96 2268
summary(sptab_br_1h$dist_to_ship)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 34.83 19238.00 39871.22 54717.21 81250.64 231573.96 2391
summary(sptab_br_30m$dist_to_ship)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 34.83 19709.19 41580.58 55522.60 81754.59 231972.51 2455
hist(sptab_br$dist_to_random)
summary(sptab_br$dist_to_random)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.859 634.727 950.896 1035.329 1350.982 4671.624
Iscrtane su sljedeće konture za kernel density analizu: 95%, 90%, 80%, 75%.
g2points <- SpatialPoints(sptab_g)
g2grid <- gridmaker(g2points, resolution = 500, extend = 200)
g2gridsp <- as(g2grid, "SpatialPixels")
crs(g2grid) <- htrs96
crs(g2points) <- htrs96
crs(g2gridsp) <- htrs96
kda_g2 <- kernelUD(g2points, grid = g2gridsp)
# kda_g3 <- kernelUD(g2points, grid = g2gridsp, boundary = as(hr_proj, "SpatialLines"))
# ne radi zbog ograničenja algoritma -- prerazvedena geometrija
# kda_g2a <- kernelUD(spatfilter(g2points, excl_geom = hr_proj , radius = 0), grid = g2gridsp)
plot(getverticeshr(kda_g2, percent = 95), col = rgb(1,1,1))
plot(g2points, pch = 16, col = rgb(0, 0, 0, 0.3), add = TRUE)
lines(hr_proj)
lines(getverticeshr(kda_g2, percent = 95), col = rgb(1, 0.3, 0.3))
lines(getverticeshr(kda_g2, percent = 90), col = rgb(0, 0.5, 0.5))
lines(getverticeshr(kda_g2, percent = 80), col = rgb(0.2, 0.2, 1))
lines(getverticeshr(kda_g2, percent = 75))
Kad se razmatraju sve točke iz perioda gniježđenja, rezultat nije jako informativan. Kad uzmemo samo točke iz hrvatskog teirtorijalnog mora (što bi imalo smisla ako radimo kernel analizu u svrhu određivanja zaštićenih područja) onda dobivene konture izgledaju puno smislenije.
hr_more <- readOGR(dsn = "data/worldborders/", layer = "hr_more")
## OGR data source with driver: ESRI Shapefile
## Source: "data/worldborders/", layer: "hr_more"
## with 1 features
## It has 3 fields
crs(hr_more) <- htrs96
g2points <- SpatialPoints(sptab_g)
crs(g2points) <- htrs96
g2points <- g2points[!is.na(over(g2points, hr_more)[1]),]
g2grid <- gridmaker(g2points, resolution = 500, extend = 200)
g2gridsp <- as(g2grid, "SpatialPixels")
crs(g2grid) <- htrs96
crs(g2gridsp) <- htrs96
kda_g2 <- kernelUD(g2points, grid = g2gridsp)
# kda_g3 <- kernelUD(g2points, grid = g2gridsp, boundary = as(hr_proj, "SpatialLines"))
# ne radi zbog ograničenja algoritma -- prerazvedena geometrija
# kda_g2a <- kernelUD(spatfilter(g2points, excl_geom = hr_proj , radius = 0), grid = g2gridsp)
plot(getverticeshr(kda_g2, percent = 95), col = rgb(1,1,1))
plot(g2points, pch = 16, col = rgb(0, 0, 0, 0.3), add = TRUE)
lines(hr_proj)
lines(getverticeshr(kda_g2, percent = 95), col = rgb(1, 0.3, 0.3))
lines(getverticeshr(kda_g2, percent = 90), col = rgb(0, 0.5, 0.5))
lines(getverticeshr(kda_g2, percent = 80), col = rgb(0.2, 0.2, 1))
lines(getverticeshr(kda_g2, percent = 75))
All data analysis tasks were performed in the R programming environment (R Core Team 2018). Data manipulation and visualization was performed with the packages dplyr (Wickham and Francois 2016), lubridate (Grolemund and Wickham 2011) and ggplot2 (Wickham 2009). Manipulation, analysis and visualization of spatial data was performed with the packages raster (Hijmans 2016), sp (E. J. Pebesma and Bivand 2005, Bivand, Pebesma, and Gomez-Rubio (2013)), rgeos (R. Bivand and Rundel 2017), GISTools (Brunsdon and Chen 2014), rgdal (R. Bivand, Keitt, and Rowlingson 2017) and spdplyr (Sumner 2017).
For home range estimation, the kernelUD function from the adehabitatHR (Calenge 2006) package was used. The reference (ad-hoc) method was used for bandwidth estimation. Least square cross validation (LSCV) was also tried, but the algorithm did not converge and the bandwidth parameter could not be estimated with the available data.
Bivand, Roger S., Edzer Pebesma, and Virgilio Gomez-Rubio. 2013. Applied Spatial Data Analysis with R, Second Edition. Springer, NY. http://www.asdar-book.org/.
Bivand, Roger, and Colin Rundel. 2017. Rgeos: Interface to Geometry Engine - Open Source (’Geos’). https://CRAN.R-project.org/package=rgeos.
Bivand, Roger, Tim Keitt, and Barry Rowlingson. 2017. Rgdal: Bindings for the ’Geospatial’ Data Abstraction Library. https://CRAN.R-project.org/package=rgdal.
Brunsdon, Chris, and Hongyan Chen. 2014. GISTools: Some Further Gis Capabilities for R. https://CRAN.R-project.org/package=GISTools.
Calenge, C. 2006. “The Package Adehabitat for the R Software: Tool for the Analysis of Space and Habitat Use by Animals.” Ecological Modelling 197: 1035.
Grolemund, Garrett, and Hadley Wickham. 2011. “Dates and Times Made Easy with lubridate.” Journal of Statistical Software 40 (3): 1–25. http://www.jstatsoft.org/v40/i03/.
Hijmans, Robert J. 2016. Raster: Geographic Data Analysis and Modeling. https://CRAN.R-project.org/package=raster.
Pebesma, Edzer J., and Roger S. Bivand. 2005. “Classes and Methods for Spatial Data in R.” R News 5 (2): 9–13. https://CRAN.R-project.org/doc/Rnews/.
R Core Team. 2018. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Sumner, Michael D. 2017. Spdplyr: Data Manipulation Verbs for the Spatial Classes. https://CRAN.R-project.org/package=spdplyr.
Wickham, Hadley. 2009. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. http://ggplot2.org.
Wickham, Hadley, and Romain Francois. 2016. Dplyr: A Grammar of Data Manipulation. https://CRAN.R-project.org/package=dplyr.