setwd("C:/Users/mpmar/OneDrive/Documents/Densities_habitat")
seg_data <- read_csv("seg_data.csv")
obs_data <- read_csv("obs_data.csv")
pt <- geodata::gadm(country = "PRT", level = 0, path=tempdir())
spain <- geodata::gadm(country = "ESP", level = 0, path=tempdir())
morocco <- geodata::gadm(country = "MAR", level = 0, path=tempdir())
r_crs2 = "+proj=laea +lat_0=38.993572 +lon_0=-16.523438 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"
pt_proj <- terra::project(pt, r_crs2)
spain_proj <- terra::project(spain, r_crs2)
morocco_proj <- terra::project(morocco, r_crs2)
portugalgrid_2020_autumn <- read_csv("grids/2020/portugalgrid_2020_autumn.csv")
portugalgrid_2020_spring <- read_csv("grids/2020/portugalgrid_2020_spring.csv")
portugalgrid_2020_summer <- read_csv("grids/2020/portugalgrid_2020_summer.csv")
portugalgrid_2020_winter <- read_csv("grids/2020/portugalgrid_2020_winter.csv")
portugalgrid_2016_autumn <- read_csv("grids/2016/portugalgrid_2016_autumn.csv")
portugalgrid_2016_spring <- read_csv("grids/2016/portugalgrid_2016_spring.csv")
portugalgrid_2016_summer <- read_csv("grids/2016/portugalgrid_2016_summer.csv")
portugalgrid_2016_winter <- read_csv("grids/2016/portugalgrid_2016_winter.csv")
portugalgrid_climate_change_autumn <- portugalgrid_2016_autumn
portugalgrid_climate_change_spring <- portugalgrid_2016_spring
portugalgrid_climate_change_summer <- portugalgrid_2016_summer
portugalgrid_climate_change_winter <- portugalgrid_2016_winter
portugalgrid_climate_change_autumn$SST_week <- portugalgrid_climate_change_autumn$SST_week+3.2
portugalgrid_climate_change_spring$SST_week <- portugalgrid_climate_change_spring$SST_week+3.2
portugalgrid_climate_change_summer$SST_week <- portugalgrid_climate_change_summer$SST_week+3.2
portugalgrid_climate_change_summer$SST_week <- portugalgrid_climate_change_summer$SST_week+3.2
portugalgrid_cc_fc_autumn <- portugalgrid_climate_change_autumn
portugalgrid_cc_fc_spring <- portugalgrid_climate_change_spring
portugalgrid_cc_fc_summer <- portugalgrid_climate_change_summer
portugalgrid_cc_fc_winter <- portugalgrid_climate_change_winter
portugalgrid_cc_fc_autumn$biomass <- 116989/2
portugalgrid_cc_fc_spring$biomass <- 116989/2
portugalgrid_cc_fc_summer$biomass <- 116989/2
portugalgrid_cc_fc_winter$biomass <- 116989/2
df_dolphin_unif_2.1 <- ds(data = obs_data,
formula = ~1,
key = "unif",
nadj = 2,mono_method = "slsqp", optimizer = "R")
## Warning: Unknown or uninitialised column: `distance`.
## Unknown or uninitialised column: `distance`.
## Columns "distbegin" and "distend" in data: performing a binned analysis...
## Fitting uniform key function with cosine(1,2) adjustments
## AIC= 1933.177
## No survey area information supplied, only estimating detection function.
summary(df_dolphin_unif_2.1)
##
## Summary for distance analysis
## Number of observations : 737
## Distance range : 0 - 300
##
## Model : Uniform key function with cosine adjustment terms of order 1,2
##
## Strict monotonicity constraints were enforced.
## AIC : 1933.177
## Optimisation: mrds (slsqp)
##
## Detection function parameters
## Scale coefficient(s):
## NULL
##
## Adjustment term coefficient(s):
## estimate se
## cos, order 1 0.9193033 0.04182242
## cos, order 2 0.2423833 0.06062181
##
## Estimate SE CV
## Average p 0.4626018 0.0190366 0.04115116
## N in covered region 1593.1630066 78.4151513 0.04921979
plot(df_dolphin_unif_2.1)
obs_data_2 <- obs_data
obs_data_2$distance <- (obs_data_2$distbegin+obs_data_2$distend)/2
DDE_DSM_ECS <- dsm(formula = count ~ s(distcoast, k = 4) + s(dist1000, k = 4) + s(biomass, k = 4) + s(Chl_week, k = 4) + s(Chl_week_lag, k = 4) + s(SST_week, k = 4) + s(Salt_week, k = 4) + s(Zoo_week, k = 4),
ddf.obj = df_dolphin_unif_2.1,
segment.data = seg_data,
observation.data = obs_data_2,
engine = "gam",
method = "REML",
family = tw())
summary(DDE_DSM_ECS)
##
## Family: Tweedie(p=1.48)
## Link function: log
##
## Formula:
## count ~ s(distcoast, k = 4) + s(dist1000, k = 4) + s(biomass,
## k = 4) + s(Chl_week, k = 4) + s(Chl_week_lag, k = 4) + s(SST_week,
## k = 4) + s(Salt_week, k = 4) + s(Zoo_week, k = 4) + offset(off.set)
##
## Parametric coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -14.19019 0.06003 -236.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df F p-value
## s(distcoast) 2.713 2.934 3.429 0.011329 *
## s(dist1000) 2.240 2.594 1.853 0.095515 .
## s(biomass) 2.287 2.657 7.116 0.000185 ***
## s(Chl_week) 2.454 2.806 8.200 0.000362 ***
## s(Chl_week_lag) 1.002 1.003 13.966 0.000186 ***
## s(SST_week) 2.924 2.995 9.957 3.79e-06 ***
## s(Salt_week) 1.002 1.003 3.416 0.064553 .
## s(Zoo_week) 2.652 2.918 6.911 0.000180 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.00045 Deviance explained = 5.66%
## -REML = 5659.9 Scale est. = 51.969 n = 48875
AIC(DDE_DSM_ECS)
## [1] 11299.89
portugalgrid_2020_spring$Density <- predict(DDE_DSM_ECS, portugalgrid_2020_spring, portugalgrid_2020_spring$off.set)
portugalgrid_2020_summer$Density <- predict(DDE_DSM_ECS, portugalgrid_2020_summer, portugalgrid_2020_spring$off.set)
portugalgrid_2020_autumn$Density <- predict(DDE_DSM_ECS, portugalgrid_2020_autumn, portugalgrid_2020_spring$off.set)
portugalgrid_2020_winter$Density <- predict(DDE_DSM_ECS, portugalgrid_2020_winter, portugalgrid_2020_spring$off.set)
var_spring_2020 <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_2020_spring, portugalgrid_2020_spring$off.set)
var_summer_2020 <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_2020_summer, portugalgrid_2020_spring$off.set)
var_autumn_2020 <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_2020_autumn, portugalgrid_2020_spring$off.set)
var_winter_2020 <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_2020_winter, portugalgrid_2020_spring$off.set)
portugalgrid_cc_fc_spring$Density <- predict(DDE_DSM_ECS, portugalgrid_cc_fc_spring, portugalgrid_2020_spring$off.set)
portugalgrid_cc_fc_summer$Density <- predict(DDE_DSM_ECS, portugalgrid_cc_fc_summer, portugalgrid_2020_spring$off.set)
portugalgrid_cc_fc_autumn$Density <- predict(DDE_DSM_ECS, portugalgrid_cc_fc_autumn, portugalgrid_2020_spring$off.set)
portugalgrid_cc_fc_winter$Density <- predict(DDE_DSM_ECS, portugalgrid_cc_fc_winter, portugalgrid_2020_spring$off.set)
var_spring__cc_fc_ <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_cc_fc_spring, portugalgrid_2020_spring$off.set)
var_summer__cc_fc_ <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_cc_fc_summer, portugalgrid_2020_spring$off.set)
var_autumn_cc_fc_ <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_cc_fc_autumn, portugalgrid_2020_spring$off.set)
var_winter_cc_fc_ <- dsm_var_gam(DDE_DSM_ECS, portugalgrid_cc_fc_winter, portugalgrid_2020_spring$off.set)
Density_table <- data.frame(Season = c("Spring",
"Summer",
"Autumn",
"Winter"),
Abundance = c(sum(portugalgrid_2020_spring$Density),
sum(portugalgrid_2020_summer$Density),
sum(portugalgrid_2020_autumn$Density),
sum(portugalgrid_2020_winter$Density)),
Mean_Density = c(mean(portugalgrid_2020_spring$Density),
mean(portugalgrid_2020_summer$Density),
mean(portugalgrid_2020_autumn$Density),
mean(portugalgrid_2020_winter$Density)),
CV = c(summary(var_spring_2020)$cv[,1],
summary(var_summer_2020)$cv[,1],
summary(var_autumn_2020)$cv[,1],
summary(var_winter_2020)$cv[,1])
)
Density_table
## Season Abundance Mean_Density CV
## 1 Spring 237175.9 0.7539183 0.1938039
## 2 Summer 177424.1 0.5639834 0.1602045
## 3 Autumn 230861.1 0.7338451 0.1732905
## 4 Winter 202542.0 0.6438265 0.1879266
Density_table_cc_fc_ <- data.frame(Season = c("Spring",
"Summer",
"Autumn",
"Winter"),
Abundance = c(sum(portugalgrid_cc_fc_spring$Density),
sum(portugalgrid_cc_fc_summer$Density),
sum(portugalgrid_cc_fc_autumn$Density),
sum(portugalgrid_cc_fc_winter$Density)),
Mean_Density = c(mean(portugalgrid_cc_fc_spring$Density),
mean(portugalgrid_cc_fc_summer$Density),
mean(portugalgrid_cc_fc_autumn$Density),
mean(portugalgrid_cc_fc_winter$Density)),
CV = c(summary(var_spring_2020)$cv[,1],
summary(var_summer_2020)$cv[,1],
summary(var_autumn_2020)$cv[,1],
summary(var_winter_2020)$cv[,1])
)
Density_table_cc_fc_
## Season Abundance Mean_Density CV
## 1 Spring 110744.406 0.352026619 0.1938039
## 2 Summer 1588.353 0.005048947 0.1602045
## 3 Autumn 10182.964 0.032368899 0.1732905
## 4 Winter 79125.149 0.251517524 0.1879266
Ratios_table <- data.frame(Season = c("Spring",
"Summer",
"Autumn",
"Winter"),
Ratio = Density_table_cc_fc_$Mean_Density/Density_table$Mean_Density,
CV = sqrt((Density_table$CV)^2+(Density_table_cc_fc_$CV)^2))
Ratios_table
## Season Ratio CV
## 1 Spring 0.466929427 0.2740801
## 2 Summer 0.008952297 0.2265634
## 3 Autumn 0.044108628 0.2450697
## 4 Winter 0.390660440 0.2657684
spring_plot <- ggplot(portugalgrid_2020_spring) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Spring Distribution")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
summer_plot <- ggplot(portugalgrid_2020_summer) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Summer Distribution")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
autmn_plot <- ggplot(portugalgrid_2020_autumn) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Autumn Distribution")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
winter_plot <- ggplot(portugalgrid_2020_winter) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Winter Distribution")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
plot_grid(spring_plot, summer_plot, autmn_plot, winter_plot, labels = "AUTO")
## Warning: Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
spring_plot_cc_fc_ <- ggplot(portugalgrid_cc_fc_spring) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Spring Distribution")+
scale_fill_viridis(limits = c(0,2))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
summer_plot_cc_fc_ <- ggplot(portugalgrid_cc_fc_summer) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Summer Distribution")+
scale_fill_viridis(limits = c(0,2))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
autmn_plot_cc_fc_ <- ggplot(portugalgrid_cc_fc_autumn) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Autumn Distribution")+
scale_fill_viridis(limits = c(0,2))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
winter_plot_cc_fc_ <- ggplot(portugalgrid_cc_fc_winter) +
geom_tile(aes(x = x, y = y, fill = Density)) +
labs(title = "Winter Distribution")+
scale_fill_viridis(limits = c(0,2))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
plot_grid(spring_plot_cc_fc_, summer_plot_cc_fc_, autmn_plot_cc_fc_, winter_plot_cc_fc_, labels = "AUTO")
## Warning: Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
portugalgrid_cc_fc_spring$Ratio <- portugalgrid_cc_fc_spring$Density/portugalgrid_2020_spring$Density
portugalgrid_cc_fc_summer$Ratio <- portugalgrid_cc_fc_summer$Density/portugalgrid_2020_summer$Density
portugalgrid_cc_fc_autumn$Ratio <- portugalgrid_cc_fc_autumn$Density/portugalgrid_2020_autumn$Density
portugalgrid_cc_fc_winter$Ratio <- portugalgrid_cc_fc_winter$Density/portugalgrid_2020_winter$Density
spring_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_spring) +
geom_tile(aes(x = x, y = y, fill = Ratio)) +
labs(title = "Spring Density Loss")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
summer_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_summer) +
geom_tile(aes(x = x, y = y, fill = Ratio)) +
labs(title = "Summer Density Loss")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
autmn_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_autumn) +
geom_tile(aes(x = x, y = y, fill = Ratio)) +
labs(title = "Autumn Density Loss")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
winter_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_winter) +
geom_tile(aes(x = x, y = y, fill = Ratio)) +
labs(title = "Winter Density Loss")+
scale_fill_viridis(limits = c(0,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
plot_grid(spring_plot_cc_fc_R, summer_plot_cc_fc_R, autmn_plot_cc_fc_R, winter_plot_cc_fc_R, labels = "AUTO")
## Warning: Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
portugalgrid_cc_fc_spring$Loss <- portugalgrid_2020_spring$Density-portugalgrid_cc_fc_spring$Density
portugalgrid_cc_fc_summer$Loss <- portugalgrid_2020_summer$Density-portugalgrid_cc_fc_summer$Density
portugalgrid_cc_fc_autumn$Loss <- portugalgrid_2020_autumn$Density-portugalgrid_cc_fc_autumn$Density
portugalgrid_cc_fc_winter$Loss <- portugalgrid_2020_winter$Density-portugalgrid_cc_fc_winter$Density
spring_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_spring) +
geom_tile(aes(x = x, y = y, fill = Loss)) +
labs(title = "Spring Density Loss")+
scale_fill_viridis(option = "C", limits = c(-4,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
summer_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_summer) +
geom_tile(aes(x = x, y = y, fill = Loss)) +
labs(title = "Summer Density Loss")+
scale_fill_viridis(option = "C", limits = c(-4,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
autmn_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_autumn) +
geom_tile(aes(x = x, y = y, fill = Loss)) +
labs(title = "Autumn Density Loss")+
scale_fill_viridis(option = "C", limits = c(-4,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
winter_plot_cc_fc_R <- ggplot(portugalgrid_cc_fc_winter) +
geom_tile(aes(x = x, y = y, fill = Loss)) +
labs(title = "Winter Density Loss")+
scale_fill_viridis(option = "C", limits = c(-4,4))+
geom_spatvector(data = pt_proj, fill = "grey70")+
geom_spatvector(data = spain_proj, fill = "grey35")+
geom_spatvector(data = morocco_proj, fill = "grey35")+
xlim(min(portugalgrid_2020_summer$x), max(portugalgrid_2020_summer$x))+
ylim(min(portugalgrid_2020_summer$y), max(portugalgrid_2020_summer$y))
plot_grid(spring_plot_cc_fc_R, summer_plot_cc_fc_R, autmn_plot_cc_fc_R, winter_plot_cc_fc_R, labels = "AUTO")
## Warning: Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).
## Removed 49 rows containing missing values or values outside the scale range
## (`geom_tile()`).