Start

Denne analysen ble først gjort av Simon Jakobsson, 4 April 2021, i forbindelse med rapporten for skog. Det er noen ting ved den analysen som gjør at jeg har valgt å gjøre de på nytt. Det er blandt annet bedre data tilgjengelig nå. Simon har også regnet ut INON-områder per kommune. Det er en tung opperasjon som ikke er nødvendig for denne nasjonale analysen. Til slutt, det ble lagt på en tilfeldig usikkerhet på 0.05sd, noe jeg ikke syntes blir riktig.

Importer data

inon2018 <- sf::st_read('P:/41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly/fjell2021/data/INON/status_2018/statusPolygon.shp')
## Reading layer `statusPolygon' from data source 
##   `P:\41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly\fjell2021\data\INON\status_2018\statusPolygon.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 68203 features and 3 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -77241.87 ymin: 6448384 xmax: 1115026 ymax: 7939974
## Projected CRS: ETRS89 / UTM zone 33N
inon2013 <- sf::st_read('P:/41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly/fjell2021/data/INON/status_2013/status_2013Polygon.shp')
## Reading layer `status_2013Polygon' from data source 
##   `P:\41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly\fjell2021\data\INON\status_2013\status_2013Polygon.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 68398 features and 3 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -77241.9 ymin: 6448384 xmax: 1115027 ymax: 7939975
## Projected CRS: ETRS89 / UTM zone 33N
inon2008 <- sf::st_read('P:/41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly/fjell2021/data/INON/status_2008/status_2008Polygon.shp')
## Reading layer `status_2008Polygon' from data source 
##   `P:\41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly\fjell2021\data\INON\status_2008\status_2008Polygon.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 69003 features and 3 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -77241.9 ymin: 6448384 xmax: 1115027 ymax: 7939975
## Projected CRS: ETRS89 / UTM zone 33N
inon1988 <- sf::st_read('P:/41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly/fjell2021/data/INON/status_1988/status_1988Polygon.shp')
## Reading layer `status_1988Polygon' from data source 
##   `P:\41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly\fjell2021\data\INON\status_1988\status_1988Polygon.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 70487 features and 3 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -77241.87 ymin: 6448384 xmax: 1115026 ymax: 7939974
## Projected CRS: ETRS89 / UTM zone 33N

The polygons are not complete…

inon2018 <- st_make_valid(inon2018)
inon2008 <- st_make_valid(inon2008)
inon2013 <- st_make_valid(inon2013)
inon1988 <- st_make_valid(inon1988)

There are three categories.

table(inon2018$vsone)
## 
##     1     2     v 
## 13611 37137 17455

VSONE1 is 3-5 km from infrastruktur. VSONE2 is 1-3 km away. And ‘V’ is >5km away. I’m not sure if the polygons overlap or not…

nor <- readRDS('../data/norway_outline.RDS')%>%
  st_as_sf()%>%
  st_transform(crs=crs(inon2018))
temp <- inon2018[inon2018$vsone=="2",]
par(mfrow=c(1,2))
plot(nor$geometry, xlim=c(5000, 10000),
          ylim=c(6880000, 6885000),
     axes=T, main="all polygons")
    plot(inon2018$geometry, add=T, col = "red")
    
plot(nor$geometry, xlim=c(5000, 10000),
          ylim=c(6880000, 6885000),
     axes=T, main = "just sone 2")
    plot(temp$geometry, add=T, col = "blue")

The sones do not overlap so I COULD dissolve them to reduce file size (se below for how this could be done), but this operation is so heavy it’s easier to just rasterize (fasterize) at this stage

crs(inon2018)
## CRS arguments:
##  +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m
## +no_defs
inon2018dis <- inon2018 %>% 
  st_buffer(0.5) %>% # make a buffer of half a meter around all parts (to avoid slivers). CRS is in UTM (ie meters)
  st_union() %>% # unite to a geometry object
  st_sf() %>% # make the geometry a data frame object
  mutate(centrum = T) # return back the data value 

Rasterizing

Getting the maintain raster

fjell_low <- raster("../output/fjell_1km.tif")
## Warning in showSRID(SRS_string, format = "PROJ", multiline = "NO", prefer_proj
## = prefer_proj): Discarded datum Unknown_based_on_GRS80_ellipsoid in Proj4
## definition
fjell_low_star <- st_as_stars(fjell_low)
fjell_low_star[fjell_low_star[]==0] <- NA 
hist(fjell_low_star)

Histogrammet viser at fjellmasken på 1km oppløsning inneholder en del celler med <100% fjell. Vi kutter ut celler mde <50% fjell

fjell_low[fjell_low<0.5] <- 0
fjell_low[fjell_low>=0.5] <- 1
hist(fjell_low)

inon2018r <- fasterize(inon2018, fjell_low)

inon2008r <- fasterize(inon2008, fjell_low)

inon2013r <- fasterize(inon2013, fjell_low)

inon1988r <- fasterize(inon1988, fjell_low)
par(mfrow=c(1,2))
plot(fjell_low, main="fjellmasken")
plot(inon2018r, main="INON")

summary(inon2018r)
##           layer
## Min.          1
## 1st Qu.       1
## Median        1
## 3rd Qu.       1
## Max.          1
## NA's    2482689

Alle INON-celler er 1, alle andre er NA. Jeg må sette NA lik null.

inon2018r[is.na(inon2018r)] <- 0
inon2013r[is.na(inon2013r)] <- 0
inon2008r[is.na(inon2008r)] <- 0
inon1988r[is.na(inon1988r)] <- 0

summary(inon2018r)
##         layer
## Min.        0
## 1st Qu.     0
## Median      0
## 3rd Qu.     0
## Max.        1
## NA's        0

Så setter jeg alle celler som ikke er i fjell som NA

inon2018r[fjell_low!=1] <- NA
inon2013r[fjell_low!=1] <- NA
inon2008r[fjell_low!=1] <- NA
inon1988r[fjell_low!=1] <- NA

summary(inon2018r)
##           layer
## Min.          0
## 1st Qu.       1
## Median        1
## 3rd Qu.       1
## Max.          1
## NA's    2498463
par(mfrow=c(2,2))
hist(inon1988r)
hist(inon2008r)
hist(inon2013r)
hist(inon2018r)

Så henter jeg inn regionene.

reg <- st_read("P:/41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly/FINAL/Raw_data/Geografisk_oppdeling/regioner_2010/regNorway_wgs84 - MERGED.shp") %>%
  st_transform(crs=crs(inon2018))
## Reading layer `regNorway_wgs84 - MERGED' from data source 
##   `P:\41201042_okologisk_tilstand_fastlandsnorge_2020_dataanaly\FINAL\Raw_data\Geografisk_oppdeling\regioner_2010\regNorway_wgs84 - MERGED.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 5 features and 2 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: 4.087524 ymin: 57.75901 xmax: 31.76159 ymax: 71.38488
## Geodetic CRS:  WGS 84
  st_intersection(st_as_sf(nor))
## Simple feature collection with 1 feature and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -113472.7 ymin: 6448359 xmax: 1114618 ymax: 7939917
## Projected CRS: ETRS89 / UTM zone 33N
##   GID_0 NAME_0 n.overlaps origins                       geometry
## 1   NOR Norway          1       1 MULTIPOLYGON (((56583.51 64...

Ekstrakter

reg$INON2018 <- raster::extract(inon2018r, reg, fun = mean, na.rm=T)
reg$INON2013 <- raster::extract(inon2013r, reg, fun = mean, na.rm=T)
reg$INON2008 <- raster::extract(inon2008r, reg, fun = mean, na.rm=T)
reg$INON1988 <- raster::extract(inon1988r, reg, fun = mean, na.rm=T)

Fikser navn

reg$region[reg$region=="Ã\u0098stlandet"] <- "Østlandet"
reg$region[reg$region=="Sørlandet"] <- "Sørlandet"
(INON <- data.frame(reg = rep(reg$region,4),
                    year = rep(c(2018, 2013, 2008, 1988), each=5),
                    med = c(reg$INON2018, 
                            reg$INON2013,
                            reg$INON2008,
                            reg$INON1988),
                    low=NA,
                    upp=NA))
##           reg year       med low upp
## 1  Nord-Norge 2018 0.8426396  NA  NA
## 2  Midt-Norge 2018 0.8327776  NA  NA
## 3   Østlandet 2018 0.7596516  NA  NA
## 4  Vestlandet 2018 0.6596869  NA  NA
## 5   Sørlandet 2018 0.7312067  NA  NA
## 6  Nord-Norge 2013 0.8445106  NA  NA
## 7  Midt-Norge 2013 0.8349642  NA  NA
## 8   Østlandet 2013 0.7602185  NA  NA
## 9  Vestlandet 2013 0.6638651  NA  NA
## 10  Sørlandet 2013 0.7328710  NA  NA
## 11 Nord-Norge 2008 0.8465606  NA  NA
## 12 Midt-Norge 2008 0.8390641  NA  NA
## 13  Østlandet 2008 0.7629504  NA  NA
## 14 Vestlandet 2008 0.6693881  NA  NA
## 15  Sørlandet 2008 0.7343967  NA  NA
## 16 Nord-Norge 1988 0.8594624  NA  NA
## 17 Midt-Norge 1988 0.8548625  NA  NA
## 18  Østlandet 1988 0.7694964  NA  NA
## 19 Vestlandet 1988 0.6908558  NA  NA
## 20  Sørlandet 1988 0.7452150  NA  NA

Legg til Norge. Her ønsker vi at verdien for Norge skal være gjennomsnittet av verdein for regionene, MEN i dette tilfelle er det nok et veid gjennomsnitt som er mest riktig, ndvs veid etter andelen av det totale fjellarealet. Rike fjellregioner teller mer. Og dette blir det samme som å ta gjenomsnittet over hele Norge, uavhengig av regioner.

heleNorge <- c(mean(inon2018r[], na.rm=T),
  mean(inon2013r[], na.rm=T),
  mean(inon2008r[], na.rm=T),
  mean(inon1988r[], na.rm=T)
)

norgetbl <- data.frame(reg = rep("Norge", 4),
                    year = c(2018, 2013, 2008, 1988),
                    med = heleNorge,
                    low=NA,
                    upp=NA)
INON <- rbind(INON, norgetbl)

Jeg kan for nysgjerrighetens skjyld sammenligne disse tallene med resultatet om man bare hadde tatt gjennomsnitte av regionen.

norge <- aggregate(data=INON,
          med~year,
          FUN=mean)
temp <- data.frame(reg = rep(c("summert metode",
                               "gjennomsnitt av regioner"),
                             each=4),
                    year = rep(norge$year,2),
                    med = c(heleNorge, norge$med))

ggplot(data=temp)+
  geom_bar(aes(y=med, x=year, fill=reg), 
           stat = "identity", position='dodge')

Den metoden vi bruker nå gir en del høyere tall.

ggplot(data=INON)+
  geom_bar(aes(y=med, x=year, fill=reg), 
           stat = "identity", position='dodge')

Grunnen til det ser vi over - verdiene for Nord-Norge er de høyeste, og det er også der det er mest fjell.

Getting the plotting function. ‘Source’ doesnt work due to special characters

eval(parse("indicator_plots.R", encoding="UTF-8"))

Plotting

png("../output/indicatorPlots/inon.png", units="in", width=12, height=7, res=300)
par(mfrow=c(1,1), mar=c(4.5,
                        5.5,
                        0,
                        2))
indicator_plot(dataset = INON,
               yAxisTitle = "Andel inngrepsfri natur i fjellet",
               lowYlimit = 0,
               upperYlimit = 1,
               yStep = .2,
               minyear = 1985,
               maxyear = 2021,
               #errors = FALSE,
               legendPosition = "bottom",
               legendInset = 0.2
               )
dev.off()

alt text

DT::datatable(
  INON, 
  extensions = "FixedColumns",
  options = list(
    scrollX = TRUE,
    scrollY=T,
    pageLength = 10
  ))

Eksporter data for senere plotting.

Det blir ingen usikkerheter eller bootstrapping i dette tilfellet

INONout <- select(INON, reg, year, med)


INONout$reg[INONout$reg=="Østlandet"] <- "E"
INONout$reg[INONout$reg=="Nord-Norge"] <- "N"
INONout$reg[INONout$reg=="Sørlandet"] <- "S"
INONout$reg[INONout$reg=="Midt-Norge"] <- "C"
INONout$reg[INONout$reg=="Vestlandet"] <- "W"

names(INONout)[3] <- "val"

#write.csv(INONout, "../output/indicator_values/inon.csv", row.names = F)