SOK-1004 H24 - Case 5

Author

26

Instruksjoner

Denne oppgaven er laget av Even S. Hvinden og oppdatert av Derek J. Clark. Sistnevnte er ansvarlig for eventuelle feil og mangler.

Oppgaven skal løses interaktivt i RStudio ved å legge inn egen kode og kommentarer. Det ferdige dokumentet lagres med kandidatnummeret som navn [kandidatnummer]_SOK1004_C5_H24.qmd og lastes opp på deres GitHub-side. Hvis du har kandidatnummer 43, så vil filen hete 43_SOK1004_C5_H24.qmd. Påse at koden kjører og at dere kan eksportere besvarelsen til pdf. Lever så lenken til GitHub-repositoriumet i Canvas.

Bakgrunn, læringsmål

I Forelesning 7 leste dere kapittel 1 i NOU 2015:1 “Produktivitet - grunnlag for vekst og velferd.” I denne oppgaven skal vi oppdatere tall brukt i analysen. Gjennom arbeidet vil dere repetere de grunnleggende ferdighetene i bruk av API, tidyverse og ggplot som vi har arbeidet med gjennom kurset. Dere vil også få anledning til å reflektere rundt sammenhengene i nasjonalregnskapet og å grave litt i statistikkbanken hos SSB.

Last inn pakker

# output | false
rm(list=ls()) 
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rjstat)

Attaching package: 'rjstat'

The following object is masked from 'package:dplyr':

    id
library(httr)

Oppgave I: Timeverksproduktivitet i markedsrettede fastlandsnæringer

Reproduser en oppdatert versjon av Figur 1.1 “Timeverksproduktivitet, markedsrettede fastlandsnæringer” i rapporten. Her er produktivitet målt som bruttoprodukt i markedsrettet produksjon i Fastlands-Norge per timeverk, utenom bolig.

Oppgave Ia

Hvorfor trekker Produktivitetskommisjon fra produksjonen av boligtjenester, offentlig etterspørsel, og inntekter fra olje og gass når de beregner produktivitet?

Det disse sektorene av økonomien blir ikke regnet med siden de på en eller annen måte ikke forholder seg til det tradisjonelle markedet og er derfor ikke egnet til målt på samme måte. Til å begynne med er boligtjenester ikke ikke en del av målingen siden en vekst i boligmarkedet som oftest skylder økte boligpriser og investeringer og ikke økt produktivitet. Videre er opperer offentlige tjennester på en helt annen logikk enn private profitt orenterte aktører derfor kan ikke produktiviteten sammenlignes. Tilslutt har vi inntekter fra olje og gass som ikke er en del av fastlands-Norge, samtidig er vekst i petroleumsvirksomhet heller ikke grunne økt produktivitet.

Oppgave Ib

Skriv kode som bruker en JSON-spørring til å lage en oppdatert versjon av figuren, med observasjoner fra 1996 til 2022. Beregn gjennomsnittlig årlig endring for perioden 1996 - 2005 og, 2005-2013, og 2006 - 2022. Står konklusjonen i rapporten seg?

Merknad. Det er tidvis store revisjoner i nasjonalregnskapet. Du må regne med at individuelle tall på årlig endring kan avvike en god del, opp til et halvt prosentpoeng, mens de gjennomsnittlige veksttallene burde avvike noe mindre.

Tips: Du henter data på timeverk og bruttoprodukt fra henholdsvis tabell 09174 og 09170.

#laster ned datasett som viser prosentvis endring i timeverk, samt bruttoprodukt, vet at vi egentlig skulle laste ned andre datasett, men fikk ikke til å konvertere til prosent.
url <- "https://data.ssb.no/api/v0/no/table/09174/"
query <-'{
  "query": [
    {
      "code": "NACE",
      "selection": {
        "filter": "vs:NRNaeringPubAgg",
        "values": [
          "nr23fn"
        ]
      }
    },
    {
      "code": "ContentsCode",
      "selection": {
        "filter": "item",
        "values": [
          "TimeverkLProsent"
        ]
      }
    }
  ],
  "response": {
    "format": "json-stat2"
  }
}'
hent_indeks.tmp <- url %>%
  POST(body = query, encode = "json")

df_prosent <-  hent_indeks.tmp %>%
  content("text") %>%
  fromJSONstat() %>%
  as_tibble()
url <- "https://data.ssb.no/api/v0/no/table/09170/"
query <-'{
  "query": [
    {
      "code": "NACE",
      "selection": {
        "filter": "vs:NRNaeringPubAgg",
        "values": [
          "nr23fn"
        ]
      }
    },
    {
      "code": "ContentsCode",
      "selection": {
        "filter": "item",
        "values": [
          "BNPB5"
        ]
      }
    },
    {
      "code": "Tid",
      "selection": {
        "filter": "item",
        "values": [
          "1996",
          "1997",
          "1998",
          "1999",
          "2000",
          "2001",
          "2002",
          "2003",
          "2004",
          "2005",
          "2006",
          "2007",
          "2008",
          "2009",
          "2010",
          "2011",
          "2012",
          "2013",
          "2014",
          "2015",
          "2016",
          "2017",
          "2018",
          "2019",
          "2020",
          "2021",
          "2022",
          "2023"
        ]
      }
    }
  ],
  "response": {
    "format": "json-stat2"
  }
}'
hent_indeks.tmp <- url %>%
  POST(body = query, encode = "json")

df_brutto <-  hent_indeks.tmp %>%
  content("text") %>%
  fromJSONstat() %>%
  as_tibble()
library(dplyr)

# Filtrer `df_prosent` for å beholde år større eller lik 1996
df_prosent <- df_prosent %>% 
  filter(år >= 1996)

# Konverter `value`-kolonnen i `df_brutto` til heltall (integer)
df_brutto$år <- as.integer(df_brutto$år)

# Konverter `value`-kolonnen i `df_prosent` til heltall (integer)
df_prosent$år <- as.integer(df_prosent$år)
df_prod <- inner_join(df_brutto, df_prosent,
                      by = c('næring', 'år') ) #Er usikker på hvordan disse verdiene skal settes sammen på en graf derfor har jeg bestemt meg for å ta gjennomsnittet av begge verdiene, selv om jeg kalte det for differanse.Fordi det var det som så mest riktig ut i forhold til utgangspunktet.
df_prod <- df_prod %>%
  mutate(Differanse =  (value.y + value.x)/2) 
mean_1996_2005 <- mean(df_prod$Differanse[df_prod$år >= 1996 & df_prod$år <= 2005])
mean_2005_2013 <- mean(df_prod$Differanse[df_prod$år >= 2005 & df_prod$år <= 2013])
mean_2006_2022 <- mean(df_prod$Differanse[df_prod$år >= 2006 & df_prod$år <= 2022])



df_prod %>% 
  filter(år >= 1996) %>% 
  ggplot(aes(x = år, y = Differanse)) +
  geom_bar(stat = "identity", fill = "blue") +  # Stolpediagram
  geom_segment(aes(x = 1996, xend = 2005, y = mean_1996_2005, yend = mean_1996_2005), 
               color = "black", size = 1.2) +  # Gjennomsnittslinje 1996-2005
  geom_segment(aes(x = 2005, xend = 2013, y = mean_2005_2013, yend = mean_2005_2013), 
               color = "black", size = 1.2) +  # Gjennomsnittslinje 2005-2013
  geom_segment(aes(x = 2006, xend = 2022, y = mean_2006_2022, yend = mean_2006_2022), 
               color = "black", size = 1.2) +  # Gjennomsnittslinje 2006-2022
  annotate("text", x = 2000, y = mean_1996_2005 + 0.2, label = "3 pst.", size = 4, color = "black") +  # Tekst for 1996-2005
  annotate("text", x = 2009, y = mean_2005_2013 + 0.2, label = "0,8 pst.", size = 4, color = "black") +  # Tekst for 2005-2013
  annotate("text", x = 2014, y = mean_2006_2022 + 0.2, label = "Gj.snitt 2006-2022", size = 4, color = "black") +  # Tekst for 2006-2022
  geom_hline(yintercept = 0, color = "black", size = 0.8) +  # Nullinje
  labs(
    title = "Timeverksproduktivitet, markedsrettede fastlandsnæringer",
    x = "År",
    y = "Prosent",
    caption = "Kilde: Statistisk sentralbyrå"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
Warning in geom_segment(aes(x = 1996, xend = 2005, y = mean_1996_2005, yend = mean_1996_2005), : All aesthetics have length 1, but the data has 28 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
  a single row.
Warning in geom_segment(aes(x = 2005, xend = 2013, y = mean_2005_2013, yend = mean_2005_2013), : All aesthetics have length 1, but the data has 28 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
  a single row.
Warning in geom_segment(aes(x = 2006, xend = 2022, y = mean_2006_2022, yend = mean_2006_2022), : All aesthetics have length 1, but the data has 28 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
  a single row.