Najprej aktivirajmo vse potrebne pakete.
library(tidyverse)
library(ggpubr)
library(dabestr)
library(RColorBrewer)
Analiza podatkov pridobljenih z avtomatskimi merilniki temperature.
# Uvoz podatkov
t_mlad <- read.csv(file = "~/duhturat/temperature/zan_mladovje_03_0.csv", stringsAsFactors = FALSE)[, -1]
t_mlad$DateTime <- as.POSIXct(t_mlad$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_mlad$stage <- "mladovje"
t_mlad$date <- as.Date(t_mlad$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_drog <- read.csv(file = "~/duhturat/temperature/zan_drogovnjak_04_0.csv", stringsAsFactors = FALSE)[, -1]
t_drog$DateTime <- as.POSIXct(t_drog$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_drog$stage <- "drogovnjak"
t_drog$date <- as.Date(t_drog$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_deb <- read.csv(file = "~/duhturat/temperature/zan_debeljak_05_0.csv", stringsAsFactors = FALSE)[, -1]
t_deb$DateTime <- as.POSIXct(t_deb$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_deb$stage <- "debeljak"
t_deb$date <- as.Date(t_deb$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_gap <- read.csv(file = "~/duhturat/temperature/zan_presvetlitev_01_0.csv", stringsAsFactors = FALSE)[, -1]
t_gap$DateTime <- as.POSIXct(t_gap$DateTime, format = "%m/%d/%y %H:%M:%S %p")
t_gap$stage <- "presvetlitev"
t_gap$date <- as.Date(t_gap$DateTime, format = "%m/%d/%y %H:%M:%S %p")
data <- rbind(t_mlad, t_drog, t_deb, t_gap)
data <- subset(data, data$date > as.Date("2018-10-18") & data$date < as.Date("2019-10-30"))
data$month <- months(data$date)
data$month <- factor(data$month, ordered = TRUE, levels = c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"))
# Povprečna letna temperatura
data %>%
summarise(mean = mean(Temp))
## mean
## 1 8.027683
#Povprečne temperature v različnih razvojnih fazah
data %>%
group_by(stage) %>%
summarise(mean = mean(Temp))
## # A tibble: 4 x 2
## stage mean
## <chr> <dbl>
## 1 debeljak 8.04
## 2 drogovnjak 7.62
## 3 mladovje 7.90
## 4 presvetlitev 8.55
temps <- ggplot(data) +
geom_smooth(aes(x = date, y = Temp, color = stage)) +
# geom_line(aes(x = date, y = Temp, color = stage), alpha = 0.2) +
theme_bw() +
theme(panel.grid = element_blank(), legend.position = "left", axis.title.x = element_blank()) +
labs(color = "Razvojna faza") +
scale_color_brewer(palette = "Set1") +
ylab("Temperatura [°C]")
dates <- unique(as.character(data$date))
res <- data.frame(stg = NA,
date = NA,
low = NA,
high = NA,
var = NA)
n <- 0
for(stage in unique(data$stage)){
stg <- stage
df <- data[data$stage == stg, ]
for(i in dates){
n <- n + 1
dat <- df[df$date == i, ]
low <- min(dat$Temp)
high <- max(dat$Temp)
range <- high - low
out <- c(stg, i, low, high, range)
res <- rbind(res, out)
}
}
res <- na.omit(res)
res$date <- as.Date(res$date)
res$var <- as.numeric(res$var)
res$stg <- as.factor(res$stg)
anomaly <- ggplot() +
geom_smooth(data = res, aes(x = date, y = var, color = stg), span = 0.4, se = TRUE) +
# geom_line(data = res, aes(x = date, y = var), alpha = 0.05) +
# ggtitle("Daily temperature anomaly") +
ylab("Temperaturna razlika [°C]") +
theme_bw() +
theme(panel.grid = element_blank(), legend.position = "none", axis.title.x = element_blank()) +
scale_color_brewer(palette = "Set1")
theme_set(theme_pubr())
ggarrange(temps, anomaly, ncol = 2, nrow = 1)
res$month <- months(res$date)
res$month <- factor(res$month, ordered = TRUE, levels = c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"))
estimation.plot <- res %>%
dabest(x = stg, y = var,
idx = c("mladovje", "drogovnjak", "debeljak", "presvetlitev"),
paired = FALSE) %>%
mean_diff()
plot(estimation.plot, color.column = month, palette = "Set3")
Aktivirajmo pakete, ki jih bomo potrebovali za delo z podatki LiDAR.
library(lidR)
library(ForestTools)
library(rLiDAR)
library(rgl)
library(ggbiplot)
library(ggpubr)
library(foreach)
library(doParallel)
library(sf)
source("~/duhturat/lidar/functions.R")
Naklon, izpostavljenost, povprečno nadmorsko višino, razpon nadmorskih višin, TRI (angl. Terrain Ruggedness Index), TPI (angl. Topographic Position Index), grobost (angl. roughness) terena smo izračunali s pomočjo javno dostopnih LiDAR posnetkov območja raziskave. S funkcijo lidR::grid_terrain() smo izdelali digitalni model terena ločljivosti 1x1 m ter nato s funkcijo raster::terrain() izračunali prej omenjene parametre za vseh 77 vzorčnih kvadrantov.
# Uvoz oblaka točk, mreže vzorčnih kvadrantov ter območja pragozda Krokar.
krokar <- lidR::readLAScatalog("~/duhturat/lidar/krokar.las")
grid <- st_read("~/duhturat/lidar/sampling/grid_50_plus.shp")
## Reading layer `grid_50_plus' from data source
## `C:\Users\zanku\OneDrive - Univerza v Ljubljani\Documents\duhturat\lidar\sampling\grid_50_plus.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 77 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 481880.4 ymin: 43547.11 xmax: 482880.5 ymax: 45247.13
## Projected CRS: MGI 1901 / Slovene National Grid
krok <- st_read("~/duhturat/lidar/sampling/krokar.shp")
## Reading layer `krokar' from data source
## `C:\Users\zanku\OneDrive - Univerza v Ljubljani\Documents\duhturat\lidar\sampling\krokar.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 1 feature and 2 fields
## Geometry type: POLYGON
## Dimension: XYZ
## Bounding box: xmin: 481880.4 ymin: 43555.41 xmax: 482883.1 ymax: 45247.13
## z_range: zmin: 0 zmax: 0
## Projected CRS: MGI 1901 / Slovene National Grid
plot(krokar)
plot(grid, add = TRUE)
plot(krok, add = TRUE)
# Razreži oblak točk na vzorčne kvadrante.
krokar_grid <- clip_roi(las = krokar, geometry = grid)
## Chunk 1 of 77 (1.3%): state <U+2713>
## Chunk 2 of 77 (2.6%): state <U+2713>
## Chunk 3 of 77 (3.9%): state <U+2713>
## Chunk 4 of 77 (5.2%): state <U+2713>
## Chunk 5 of 77 (6.5%): state <U+2713>
## Chunk 6 of 77 (7.8%): state <U+2713>
## Chunk 7 of 77 (9.1%): state <U+2713>
## Chunk 8 of 77 (10.4%): state <U+2713>
## Chunk 9 of 77 (11.7%): state <U+2713>
## Chunk 10 of 77 (13%): state <U+2713>
## Chunk 11 of 77 (14.3%): state <U+2713>
## Chunk 12 of 77 (15.6%): state <U+2713>
## Chunk 13 of 77 (16.9%): state <U+2713>
## Chunk 14 of 77 (18.2%): state <U+2713>
## Chunk 15 of 77 (19.5%): state <U+2713>
## Chunk 16 of 77 (20.8%): state <U+2713>
## Chunk 17 of 77 (22.1%): state <U+2713>
## Chunk 18 of 77 (23.4%): state <U+2713>
## Chunk 19 of 77 (24.7%): state <U+2713>
## Chunk 20 of 77 (26%): state <U+2713>
## Chunk 21 of 77 (27.3%): state <U+2713>
## Chunk 22 of 77 (28.6%): state <U+2713>
## Chunk 23 of 77 (29.9%): state <U+2713>
## Chunk 24 of 77 (31.2%): state <U+2713>
## Chunk 25 of 77 (32.5%): state <U+2713>
## Chunk 26 of 77 (33.8%): state <U+2713>
## Chunk 27 of 77 (35.1%): state <U+2713>
## Chunk 28 of 77 (36.4%): state <U+2713>
## Chunk 29 of 77 (37.7%): state <U+2713>
## Chunk 30 of 77 (39%): state <U+2713>
## Chunk 31 of 77 (40.3%): state <U+2713>
## Chunk 32 of 77 (41.6%): state <U+2713>
## Chunk 33 of 77 (42.9%): state <U+2713>
## Chunk 34 of 77 (44.2%): state <U+2713>
## Chunk 35 of 77 (45.5%): state <U+2713>
## Chunk 36 of 77 (46.8%): state <U+2713>
## Chunk 37 of 77 (48.1%): state <U+2713>
## Chunk 38 of 77 (49.4%): state <U+2713>
## Chunk 39 of 77 (50.6%): state <U+2713>
## Chunk 40 of 77 (51.9%): state <U+2713>
## Chunk 41 of 77 (53.2%): state <U+2713>
## Chunk 42 of 77 (54.5%): state <U+2713>
## Chunk 43 of 77 (55.8%): state <U+2713>
## Chunk 44 of 77 (57.1%): state <U+2713>
## Chunk 45 of 77 (58.4%): state <U+2713>
## Chunk 46 of 77 (59.7%): state <U+2713>
## Chunk 47 of 77 (61%): state <U+2713>
## Chunk 48 of 77 (62.3%): state <U+2713>
## Chunk 49 of 77 (63.6%): state <U+2713>
## Chunk 50 of 77 (64.9%): state <U+2713>
## Chunk 51 of 77 (66.2%): state <U+2713>
## Chunk 52 of 77 (67.5%): state <U+2713>
## Chunk 53 of 77 (68.8%): state <U+2713>
## Chunk 54 of 77 (70.1%): state <U+2713>
## Chunk 55 of 77 (71.4%): state <U+2713>
## Chunk 56 of 77 (72.7%): state <U+2713>
## Chunk 57 of 77 (74%): state <U+2713>
## Chunk 58 of 77 (75.3%): state <U+2713>
## Chunk 59 of 77 (76.6%): state <U+2713>
## Chunk 60 of 77 (77.9%): state <U+2713>
## Chunk 61 of 77 (79.2%): state <U+2713>
## Chunk 62 of 77 (80.5%): state <U+2713>
## Chunk 63 of 77 (81.8%): state <U+2713>
## Chunk 64 of 77 (83.1%): state <U+2713>
## Chunk 65 of 77 (84.4%): state <U+2713>
## Chunk 66 of 77 (85.7%): state <U+2713>
## Chunk 67 of 77 (87%): state <U+2713>
## Chunk 68 of 77 (88.3%): state <U+2713>
## Chunk 69 of 77 (89.6%): state <U+2713>
## Chunk 70 of 77 (90.9%): state <U+2713>
## Chunk 71 of 77 (92.2%): state <U+2713>
## Chunk 72 of 77 (93.5%): state <U+2713>
## Chunk 73 of 77 (94.8%): state <U+2713>
## Chunk 74 of 77 (96.1%): state <U+2713>
## Chunk 75 of 77 (97.4%): state <U+2713>
## Chunk 76 of 77 (98.7%): state <U+2713>
## Chunk 77 of 77 (100%): state <U+2713>
# Izračunaj parametre terena
source("~/duhturat/lidar/pozen_cluster.R")
# Hiter pregled podatkov in VIF analiza za ugotavljanje korelacije med spremenljivkami
summary(terrain_data)
## altrange altmean tri_median tri_mean
## Min. : 20.27 Min. : 930.9 Min. :0.1600 Min. :0.1734
## 1st Qu.: 31.97 1st Qu.:1057.6 1st Qu.:0.2200 1st Qu.:0.2539
## Median : 55.33 Median :1107.8 Median :0.3013 Median :0.3461
## Mean : 58.09 Mean :1092.7 Mean :0.3621 Mean :0.4140
## 3rd Qu.: 76.35 3rd Qu.:1140.0 3rd Qu.:0.5125 3rd Qu.:0.5576
## Max. :134.98 Max. :1171.8 Max. :0.6388 Max. :0.8676
## tri_min tri_max tpi_median tpi_mean
## Min. :0.01000 Min. : 0.6887 Min. :-0.00500 Min. :-0.0041252
## 1st Qu.:0.02000 1st Qu.: 1.4525 1st Qu.:-0.00250 1st Qu.:-0.0007767
## Median :0.03750 Median : 3.9413 Median :-0.00125 Median : 0.0007661
## Mean :0.08016 Mean : 10.2766 Mean :-0.00181 Mean : 0.0009881
## 3rd Qu.:0.14500 3rd Qu.: 14.4413 3rd Qu.:-0.00125 3rd Qu.: 0.0019280
## Max. :0.27500 Max. :111.4912 Max. : 0.00500 Max. : 0.0134312
## tpi_min tpi_max roughness_median roughness_mean
## Min. :-43.4025 Min. : 0.5837 Min. :0.53 Min. :0.5635
## 1st Qu.: -7.6575 1st Qu.: 1.1100 1st Qu.:0.73 1st Qu.:0.8389
## Median : -2.1875 Median : 2.2462 Median :0.94 Median :1.1749
## Mean : -5.7106 Mean : 8.6046 Mean :1.20 Mean :1.3737
## 3rd Qu.: -0.9537 3rd Qu.: 10.5062 3rd Qu.:1.65 3rd Qu.:1.8680
## Max. : -0.2950 Max. :111.4912 Max. :2.34 Max. :2.9645
## roughness_min roughness_max slope_median slope_mean
## Min. :0.0000 Min. : 1.93 Min. :10.81 Min. :11.34
## 1st Qu.:0.0500 1st Qu.: 3.91 1st Qu.:15.43 1st Qu.:16.91
## Median :0.0900 Median : 8.69 Median :20.91 Median :21.48
## Mean :0.2174 Mean : 15.26 Mean :24.12 Mean :25.05
## 3rd Qu.:0.4000 3rd Qu.: 20.93 3rd Qu.:33.29 3rd Qu.:34.32
## Max. :0.8100 Max. :113.44 Max. :40.18 Max. :40.85
## slope_min slope_max aspect_median aspect_mean
## Min. : 0.0000 Min. :34.63 Min. : 28.20 Min. : 39.40
## 1st Qu.: 0.2265 1st Qu.:53.58 1st Qu.: 68.24 1st Qu.: 71.79
## Median : 0.7713 Median :70.18 Median : 90.28 Median :109.53
## Mean : 2.9880 Mean :67.14 Mean :110.79 Mean :117.14
## 3rd Qu.: 5.8541 3rd Qu.:82.47 3rd Qu.:146.65 3rd Qu.:154.88
## Max. :14.1503 Max. :88.00 Max. :279.01 Max. :269.04
## aspect_min aspect_max
## Min. : 0.0000 Min. :111.8
## 1st Qu.: 0.0000 1st Qu.:357.7
## Median : 0.1996 Median :359.8
## Mean : 2.6689 Mean :342.8
## 3rd Qu.: 2.7091 3rd Qu.:360.0
## Max. :23.2773 Max. :360.0
HH::vif(terrain_data)
## altrange altmean tri_median tri_mean
## 11.221140 3.672631 1038.419354 1130.732199
## tri_min tri_max tpi_median tpi_mean
## 10.232008 75.722942 4.898131 6.132053
## tpi_min tpi_max roughness_median roughness_mean
## 13.672421 72.669034 605.451555 1098.449131
## roughness_min roughness_max slope_median slope_mean
## 4.767894 66.987977 960.058451 566.178275
## slope_min slope_max aspect_median aspect_mean
## 5.841128 5.179202 9.066312 13.345459
## aspect_min aspect_max
## 2.437515 2.466287
# Še grafično
terrain_data$id <- 1:nrow(terrain_data)
grid <- st_read("~/duhturat/lidar/sampling/grid_50_plus.shp")
## Reading layer `grid_50_plus' from data source
## `C:\Users\zanku\OneDrive - Univerza v Ljubljani\Documents\duhturat\lidar\sampling\grid_50_plus.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 77 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 481880.4 ymin: 43547.11 xmax: 482880.5 ymax: 45247.13
## Projected CRS: MGI 1901 / Slovene National Grid
grid_abiotic <- merge(grid, terrain_data, by = "id")
plot(grid_abiotic[, -c(1:5, 28)], max.plot = 21)
Izračun lastnosti terena temelji na delu oblaka točk, ki je klasificiran kot tla (ground). V nalogi pa smo se ukvarjali tudi z delom oblaka točk, ki so klasificirane kot vegetacija. Tako smo s pomočjo funkcij, ki so del že omenjenega paketa lidR, zaznali posamezna drevesa ter izračunali njihove višine. Te so bile osnova za razdelitev dreves v tri razrede - razvojne faze - mladovje, drogovnjak, debeljak. Tako kot v primeru parametrov terena, smo tudi drevesa “šteli” v vsakem od 77 vzorčnih kvadrantov.
source("~/duhturat/lidar/biotski_parametri-Zans-ThinkPad.R")
#### DODAJ SENTINEL - MOGOČE TREE HULLS IN SENTINEL DATA COMBINED ####
# Hiter pregled podatkov in VIF analiza za ugotavljanje korelacije med spremenljivkami
summary(tree_data)
## tree_count_dalponte mladovje drogovnjak debeljak
## Min. :167.0 Min. :0.000000 Min. :0.000000 Min. :0.3990
## 1st Qu.:303.0 1st Qu.:0.002494 1st Qu.:0.009036 1st Qu.:0.9331
## Median :332.0 Median :0.005682 Median :0.018450 Median :0.9700
## Mean :333.2 Mean :0.013889 Mean :0.053470 Mean :0.9326
## 3rd Qu.:381.0 3rd Qu.:0.016340 3rd Qu.:0.052083 3rd Qu.:0.9873
## Max. :484.0 Max. :0.229885 Max. :0.543269 Max. :1.0000
## tree_count_li mladovje drogovnjak debeljak
## Min. :150.0 Min. :0.000000 Min. :0.00000 Min. :0.2652
## 1st Qu.:278.0 1st Qu.:0.005587 1st Qu.:0.02299 1st Qu.:0.8764
## Median :302.0 Median :0.017241 Median :0.04319 Median :0.9270
## Mean :311.6 Mean :0.027950 Mean :0.08232 Mean :0.8897
## 3rd Qu.:353.0 3rd Qu.:0.035320 3rd Qu.:0.08815 3rd Qu.:0.9695
## Max. :453.0 Max. :0.274448 Max. :0.63258 Max. :0.9975
## mlad drog deb
## Min. :0.01051 Min. :0.01364 Min. :0.1945
## 1st Qu.:0.04056 1st Qu.:0.04583 1st Qu.:0.7722
## Median :0.06254 Median :0.08411 Median :0.8315
## Mean :0.07320 Mean :0.11389 Mean :0.8129
## 3rd Qu.:0.09071 3rd Qu.:0.12890 3rd Qu.:0.9049
## Max. :0.35781 Max. :0.60088 Max. :0.9610
HH::vif(tree_data)
## tree_count_dalponte mladovje drogovnjak debeljak
## 1.657001e+01 1.745251e+04 1.583279e+05 2.317082e+05
## tree_count_li mladovje drogovnjak debeljak
## 1.428227e+01 -2.000000e-01 -1.666667e-01 -1.428571e-01
## mlad drog deb
## Inf Inf Inf
tree_data$id <- 1:nrow(tree_data)
grid <- st_read("~/duhturat/lidar/sampling/grid_50_plus.shp")
## Reading layer `grid_50_plus' from data source
## `C:\Users\zanku\OneDrive - Univerza v Ljubljani\Documents\duhturat\lidar\sampling\grid_50_plus.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 77 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 481880.4 ymin: 43547.11 xmax: 482880.5 ymax: 45247.13
## Projected CRS: MGI 1901 / Slovene National Grid
grid_biotic <- merge(grid, tree_data, by = "id")
plot(grid_biotic[, -c(1:5)])
Združimo abiotski in biotski del podatkov, dodamo sentinel ter izvedemo clustering.
library(stars)
library(corrplot)
grid <- cbind(grid_abiotic[, -c(1:5)], grid_biotic[, -c(1:5)])
# plot(grid[, -c(31,32)], max.plot = 30)
grid.wgs <- st_transform(grid, 4326)
# plot(grid.wgs[, -c(31,32)], max.plot = 30)
# dodamo še sentinel podatke
source("~/duhturat/sentinel/randomForest_classification-Zans-ThinkPad.R")
plot(rf_raster)
zones <- raster::extract(x = rf_raster, y = grid.wgs)
grid.wgs$sentinel_clusters <- unlist(lapply(zones, median))
colnames(grid.wgs)
## [1] "altrange" "altmean" "tri_median"
## [4] "tri_mean" "tri_min" "tri_max"
## [7] "tpi_median" "tpi_mean" "tpi_min"
## [10] "tpi_max" "roughness_median" "roughness_mean"
## [13] "roughness_min" "roughness_max" "slope_median"
## [16] "slope_mean" "slope_min" "slope_max"
## [19] "aspect_median" "aspect_mean" "aspect_min"
## [22] "aspect_max" "tree_count_dalponte" "mladovje"
## [25] "drogovnjak" "debeljak" "tree_count_li"
## [28] "mladovje.1" "drogovnjak.1" "debeljak.1"
## [31] "mlad" "drog" "deb"
## [34] "geometry" "geometry.1" "sentinel_clusters"
grid.wgs <- grid.wgs[, c(1:33, 36, 34, 35)]
colnames(grid.wgs)
## [1] "altrange" "altmean" "tri_median"
## [4] "tri_mean" "tri_min" "tri_max"
## [7] "tpi_median" "tpi_mean" "tpi_min"
## [10] "tpi_max" "roughness_median" "roughness_mean"
## [13] "roughness_min" "roughness_max" "slope_median"
## [16] "slope_mean" "slope_min" "slope_max"
## [19] "aspect_median" "aspect_mean" "aspect_min"
## [22] "aspect_max" "tree_count_dalponte" "mladovje"
## [25] "drogovnjak" "debeljak" "tree_count_li"
## [28] "mladovje.1" "drogovnjak.1" "debeljak.1"
## [31] "mlad" "drog" "deb"
## [34] "sentinel_clusters" "geometry" "geometry.1"
plot(grid.wgs, max.plot = 33)
data <- as.data.frame(grid.wgs)[, -c(35, 36)]
vif.res <- HH::vif(data)
# uncor <- vif.res < 4
cors <- cor(data)
corrplot(cors, method = 'square', order = 'FPC', type = 'lower', diag = FALSE)
colnames(data)
## [1] "altrange" "altmean" "tri_median"
## [4] "tri_mean" "tri_min" "tri_max"
## [7] "tpi_median" "tpi_mean" "tpi_min"
## [10] "tpi_max" "roughness_median" "roughness_mean"
## [13] "roughness_min" "roughness_max" "slope_median"
## [16] "slope_mean" "slope_min" "slope_max"
## [19] "aspect_median" "aspect_mean" "aspect_min"
## [22] "aspect_max" "tree_count_dalponte" "mladovje"
## [25] "drogovnjak" "debeljak" "tree_count_li"
## [28] "mladovje.1" "drogovnjak.1" "debeljak.1"
## [31] "mlad" "drog" "deb"
## [34] "sentinel_clusters"
# select non-correlated variables
# df <- data[, c(uncor)]
# df$deb <- data$deb
# df$tree_count <- data$tree_count_dalponte
df <- data[, c(1,2,3,7,19, 27, 33, 34)]
df <- as.data.frame(scale(df))
colnames(df)
## [1] "altrange" "altmean" "tri_median"
## [4] "tpi_median" "aspect_median" "tree_count_li"
## [7] "deb" "sentinel_clusters"
HH::vif(df)
## altrange altmean tri_median tpi_median
## 3.120426 2.277998 3.651402 1.395247
## aspect_median tree_count_li deb sentinel_clusters
## 1.792459 1.359248 1.681289 1.339560
d <- dist(df, method = "manhattan")
fit <- hclust(d, method = "ward.D2")
plot(fit)
knum <- 3
groups <- cutree(fit, k = knum)
rect.hclust(fit, k = knum, border = "red")
fil <- data.frame(id = 1:length(groups), group = factor(groups))
pr <- prcomp(df, center = TRUE, scale. = TRUE)
bplot <- ggbiplot::ggbiplot(pr, obs.scale = 1, groups = fil$group, var.scale = 1,
ellipse = TRUE, circle = TRUE, labels = rownames(fil)) +
theme_bw() +
scale_color_brewer(palette = "Dark2")
bplot
# pca3d::pca3d(pr, group = fil$group)
table(groups)
## groups
## 1 2 3
## 42 32 3
grid$group <- groups
centros <- data.frame(geosphere::centroid(as_Spatial(grid)))
centros$id <- 1:nrow(centros)
gridplot <- ggplot() +
geom_sf(data = krok, alpha = 0.3) +
geom_sf(data = grid, aes(fill = factor(group)), alpha = 0.8) +
geom_text(data = centros, aes(x = X1, y = X2, label = id)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2")
gridplot
theme_set(theme_pubr())
ggarrange(bplot, gridplot, ncol = 2, nrow = 1)
# coords <- st_geometry(grid)
# out <- st_drop_geometry(grid)
# st_geometry(out) <- coords
# st_write(out, "grid_data.kml", delete_layer = TRUE, delete_dsn = TRUE)
ndvi.stars <- st_as_stars(ndvi)
# ggplot()+
# geom_stars(data = ndvi.stars) +
# coord_equal() +
# facet_wrap(~band) +
# theme_void() +
# scale_x_discrete(expand=c(0,0))+
# scale_y_discrete(expand=c(0,0)) +
# scale_fill_gradient(low = "#f7fcb9", high = "#006837")
evi1.stars <- st_as_stars(evi1)
# ggplot()+
# geom_stars(data = evi1.stars) +
# coord_equal() +
# facet_wrap(~band) +
# theme_void() +
# scale_x_discrete(expand=c(0,0))+
# scale_y_discrete(expand=c(0,0)) +
# scale_fill_gradient(low = "#f7fcb9", high = "#006837")
plot(evi1.stars)
plot(ndvi.stars)
plot(rf_raster)
Izračunov povprečnega števila dreves in deleža debeljaka na podlagi obeh uporabljenih algoritmov (dalponte, li) ter izračun deleža debeljaka na podlagi modela višin krošenj (CHM)
mean(grid$tree_count_dalponte)
## [1] 333.1948
sd(grid$tree_count_dalponte)
## [1] 72.20075
sd(grid$tree_count_dalponte) / sqrt(nrow(grid))
## [1] 8.228039
mean(grid$tree_count_li)
## [1] 311.6234
sd(grid$tree_count_li)
## [1] 66.06796
sd(grid$tree_count_li) / sqrt(nrow(grid))
## [1] 7.529142
mean(grid$debeljak)
## [1] 0.9325992
sd(grid$debeljak)
## [1] 0.1100366
sd(grid$debeljak) / sqrt(nrow(grid))
## [1] 0.01253983
mean(grid$debeljak.1)
## [1] 0.8896934
sd(grid$debeljak.1)
## [1] 0.1389572
sd(grid$debeljak.1) / sqrt(nrow(grid))
## [1] 0.01583564
mean(grid$deb)
## [1] 0.8129109
sd(grid$deb)
## [1] 0.1359584
sd(grid$deb) / sqrt(nrow(grid))
## [1] 0.01549389