Bensiini käypiin hinoihin

Tilastokeskuksen energiatilastoista löytyy aikasarja polttonesteiden kuluttajahinnoista ulottuen aina vuoteen 1988 asti, mutta se ei sisällä havaintoja viime kuukausilta. Sen sijaan kuluttajahintaindeksin tilastotauluista löytyy tieto hinnoista myös viime kuukausilta. Seuraavassa yhdistämme nämä tilastot, jotta saamme pidemmän aikasarjan.

bensa_energiatilasto <-
  data("StatFin/ene/ehi/statfin_ehi_pxt_12ge.px", tidy_time = TRUE) |>
  filter(Polttoneste == "Moottoribensiini 95 E 10, snt/l",
         Tiedot == "Hinta") |>
  mutate(value = value/100)

## Energiatilasto on tarkempi
max_time <- max(bensa_energiatilasto$time)

bensa_khi <-
  data("StatFin/hin/khi/kk/statfin_khi_pxt_11xx.px", tidy_time = TRUE) |>
  filter(Hyödyke == "Bensiini 95 E 10, 1 l",
         time > max_time)

bensa <-
  bind_rows(
    select(bensa_energiatilasto, time, value),
    select(bensa_khi, time, value)
  ) |>
  mutate(Tiedot = "Bensiini 95 E 10" ) |>
  relocate(Tiedot, time, value)

Kuvio

Taulukko

Vuosikeskiarvo

vuosikeskiarvo <-
  bensa |>
  group_by(Vuosi = year(time)) |>
  summarize(Keskihinta = mean(value)) |>
  mutate(Vuosimuutos = 100*(Keskihinta/lag(Keskihinta, order_by = Vuosi) - 1))

Bensiinin hinta suhteessa ansiotasoon

Seuraavaksi bensiinin hinta suhteutetaan ansiotasoon käyttäen ansiotasoindeksiä. Ansiotasoindeksin julkaisuviive on hieman pidempi kuin hintatiedoilla, joten viimeisimpien havaintojen deflatoimiseksi ansiotasoindeksiä jatketaan ETS-malliin perustuvalla ennusteella. Ansiotasoindeksiä tuotetaan neljännesvuositasolla, joten muunnetaan kuukausisarjaksi Denton-Cholette-menetelmällä.

ati <-
  data_get("StatFin/pal/ati/nj/statfin_ati_pxt_11zt.px", tidy_time = TRUE) |>
  mutate(time = yearquarter(time)) |>
  as_tsibble(Tiedot, time)

fcst <-
  ati |>
  model(ets = ETS(value ~ trend(method = "M"))) |>
  forecast(h = 1)

ati_ext <-
  bind_rows(
    ati,
    fcst |>
      as_tibble() |>
      select(Tiedot, time, value = .mean)
  ) |>
  as.ts()

ati_2021 <-
  td(ati_ext ~ 1, conversion = "mean", to = 12, method = "denton-cholette") |>
  predict() |>
  as_tsibble() |>
  rename(time = index) |>
  mutate(Tiedot = "ATI", value = value/mean(value[year(time) == 2021]))

reaali <-
  bind_rows(bensa, as_tibble(ati_2021)) |>
  pivot_wider(names_from = Tiedot) |>
  drop_na(`Bensiini 95 E 10`) |>
  mutate(Reaalihinta = `Bensiini 95 E 10`/ATI) |>
  select(time, `Bensiini 95 E 10`, Reaalihinta)

ka <- mean(reaali$Reaalihinta)

Kuvio

## Saving 6,3 x 3,6 in image

Taulukko

Bensiinin hinta suhteessa kotitalouksien käytettävissä oleviin tuloihin

Ansiotasoindeksi ei huomioi muuoksia tuloveroissa, tulonsiirroissa, muissa tuloissa tai säännöllisen työajan pituudessa. Nämä voidaan huomioida tarkastelemalla kotitalouksien käytettäviä tuloja tehtyä työtuntia kohden.

Käytettävissä oleva tulo tehtyä työtuntia kohden oli 8,55 euroa vuonna 1988 ja 30,79 euroa vuonna 2022.

litraa_per_tunti <-
  tuntitulot_ext |>
  select(Vuosi, `Tulo työtuntia kohden`) |>
  as_tsibble(index = as.integer(Vuosi)) |>
  as.ts() |>
  (\(.) {
    td(. ~ 1,
       conversion = "mean", to = 12, method = "denton-cholette")
  })() |>
   predict() |>
   as_tsibble() |>
   left_join(
     bensa |>
       transmute(index = yearmonth(time),
                 `Bensiini 95 E 10` = value) |>
       as_tsibble(index = index),
     by = "index"
   ) |>
   mutate(`litraa per tunti` = value/`Bensiini 95 E 10`) |>
   select(index, `litraa per tunti`) |>
   drop_na()

Kuvio: Litraa/työtunti

Taulukko: Litraa/työtunti

Kuvio: Käytettävissä olevat tulot/tehdyt työtunnit

Taulukko: Käytettävissä olevat tulot/tehdyt työtunnit

Polttoaineiden meno-osuus

polttoaineiden_meno_osuus <-
  data("StatFin/kan/vtp/statfin_vtp_pxt_127s.px", tidy_time = TRUE) |>
  filter(Taloustoimi == "P31DCK Yksityiset kulutusmenot Suomessa, menona",
         Kestävyysluokka == "Yhteensä",
         Kulutusluokka %in% c("Yhteensä", "07.2.2 Yksityisajoneuvojen polttoaineet ja voiteluöljyt"),
         Tiedot == "Käypiin hintoihin, miljoonaa euroa") |>
  select(Kulutusluokka, time, value) |>
  pivot_wider(names_from = Kulutusluokka) |>
  mutate(`Meno-osuus` = 100*`07.2.2 Yksityisajoneuvojen polttoaineet ja voiteluöljyt`/Yhteensä)

Kuvio

polttoaineiden_meno_osuus |>
  ggplot(aes(time, `Meno-osuus`)) +
  geom_line() +
  scale_y_continuous(limit = c(0, NA)) +
  labs(title = "Polttoaineiden osuus kotitalouksien kulutusmenoista",
       subtitle = "%",
       caption = "Lähde: Tilastokeskus.", x=NULL,y=NULL)

ggsave("bensa_meno_osuus.png", height = 4, scale = 0.9)
## Saving 6,3 x 3,6 in image

Taulukko

DT::datatable(polttoaineiden_meno_osuus) |>
  DT::formatRound("Meno-osuus")

Volyymisarja

data("StatFin/kan/vtp/statfin_vtp_pxt_127s.px", tidy_time = TRUE) |>
  filter(Taloustoimi == "P31DCK Yksityiset kulutusmenot Suomessa, menona",
         Kestävyysluokka == "Yhteensä",
         Kulutusluokka == "07.2.2 Yksityisajoneuvojen polttoaineet ja voiteluöljyt",
         Tiedot == "Volyymisarja, viitevuosi  2020") |>
  ggplot(aes(time, value)) +
  geom_line() +
  labs(title = "Yksityisajoneuvojen polttoaineet ja voiteluöljyt",
       subtitle = "Volyymi viitevuoden 2020 hintoihin",
       caption = "Lähde: Tilastokeskus.", x=NULL,y=NULL)

Keskikulutuksen kehitys

päästöt_ensi_wltp <-
  data("traficom/Ensirekisteroinnit/080_ensirek_tau_108.px§MA1§Bensiini$§CO2", tidy_time=T) |>
  select(Tieto, time, value)

päästöt_ensi_nedc <-
  data("StatFin/lii/merek/statfin_merek_pxt_11cy.px§Bensiini§CO2", tidy_time = TRUE)

päästöt_ensi_nedc |>
  filter(time %in% range(time))
## # Robonomist id: StatFin/lii/merek/statfin_merek_pxt_11cy.px
## # A tibble:      2 × 4
## # Title:         11cy -- Ensirekisteröityjen henkilöautojen keskimääräiset
## #   CO2-päästöt, 2006-2020
## # Last updated:  2021-02-26 08:00:00
##   Käyttövoima Tiedot              time       value
##   <chr>       <chr>               <date>     <dbl>
## 1 Bensiini    CO2-päästöarvo g/km 2006-01-01  180 
## 2 Bensiini    CO2-päästöarvo g/km 2020-01-01  114.
100*(113.6/180-1)
## [1] -36,88889
päästöt_ensi_nedc_disagg <-
  päästöt_ensi_nedc |>
  mutate(time = yearmonth(time)) |>
  as_tsibble(index = time) |>
  as.ts() |>
  (\(.) {
    td(.[,"value"] ~ 1, conversion = "mean", to = 12, method = "denton-cholette")
  })() |>
   predict() |>
   as_tsibble() |>
   as_tibble() |>
   transmute(Tieto = "CO2-päästöarvo g/km (NEDC)", time = as.Date(index), value) ## |>
   ## filter(time < "2014-01-01")

# Päättyykin jo vuoteen 2018
## päästöt_ensi_kk <-
##   data("traficom/Ensirekisteroinnit/100_ensirek_tau_110.px§MA1§Bensiini$§§CO2") |>
##   mutate(time = parse_date(Kuukausi, "%YM%m")) |>
##   select(Tieto, time, value)

bensankulutus <-
  bind_rows(päästöt_ensi_nedc_disagg, päästöt_ensi_wltp) |>
  mutate(
    `Bensankulutus, l/100 km` = value / 2.335 / 10
  )

Ensirekisteröityjen autojen päästöt

bensankulutus |>
  ggplot(aes(time, `Bensankulutus, l/100 km`, color = Tieto)) +
  geom_line() +
  scale_x_date(breaks = "2 years", date_labels = "%Y") +
  theme(legend.position = "bottom") +
  labs(title = "Ensirekisteröityjen bensiiniautojen keskimääräinen kulutus",
       subtitle = "Litraa per 100 kilometriä",
       caption = "Lähteet: Tilastokeskus (NEDC, disaggregoitu) ja Trafi (WLTP).",
       x=NULL,y=NULL)

Taulukko

bensankulutus |>
  rename(`CO2-päästöarvo g/km` = value) |>
  DT::datatable() |>
  DT::formatRound(3:4)

Ajoneuvokannan päästöt

## Lähde: https://liikennefakta.fi/fi/ymparisto/henkiloautot/hiilidioksidipaastot

päästöt_liikennekäytössä <-
  read_csv2("vuodesta-2020-keskimrist.csv", col_type = cols(
    Category = col_double(),
    `Liikennekäytössä olevien henkilöautojen hiilidioksidipäästöt` = col_double()
  )) |>
  mutate(
    Vuosi = make_date(Category),
    value = `Liikennekäytössä olevien henkilöautojen hiilidioksidipäästöt`
  )
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
päästöt_liikennekäytössä |>
  ggplot(aes(Vuosi, value)) +
  geom_line() +
  labs(title = "Liikennekäytössä olevien henkilöautojen hiilidioksidipäästöt",
       subtitle = "CO2-päästöarvo g/km (NEDC)",
       caption = "Lähde: Liikennefakta.",
       x=NULL,y=NULL)

Ajamisen kustannus 100 km ajamiseen tarvitut työtunnit

reaalikustannus <-
  data("StatFin/lii/merek/statfin_merek_pxt_11cy.px§Bensiini§§CO2") |>
  mutate(
    Vuosi = as.integer(Vuosi),
    `Bensankulutus, l/100 km` = value / 2.335 / 10
  ) |>
  left_join(select(vuosikeskiarvo, Vuosi, Keskihinta), by = "Vuosi") |>
  left_join(tuntitulot, by = "Vuosi") |>
  mutate(
    Vuosi = make_date(Vuosi),
    `Ajamisen kustannus, €/100 km` = `Bensankulutus, l/100 km` * Keskihinta,
    `Ajamisen kustannus, tuntia/100 km` = `Ajamisen kustannus, €/100 km` / `Tulo työtuntia kohden`
  )

Ajamisen kustannus työtunneissa

reaalikustannus |>
  ggplot(aes(Vuosi, `Ajamisen kustannus, tuntia/100 km`)) +
  scale_y_continuous(limits = c(0,NA)) +
  scale_x_date(breaks = "2 years", date_labels = "%Y") +
  geom_line() +
  labs(title = "Ajamisen reaalinen kustannus",
       subtitle = "Tehtyä työtuntia per 100 km",
       caption = "Lähteet: Tilastokeskus, Trafi ja omat laskelmat.",
       x=NULL,y=NULL)

ggsave("bensa_reaalinen_tunneissa.png", height = 4, scale = 0.9)
## Saving 6,3 x 3,6 in image

Taulukko

reaalikustannus |>
  select(Vuosi, starts_with("Ajamisen kustannus")) |>
  DT::datatable() |>
  DT::formatRound(2:3)

Ajamisen kustannus euroissa

reaalikustannus |>
  ggplot(aes(Vuosi, `Ajamisen kustannus, €/100 km`)) +
  scale_y_continuous(limits = c(0,NA)) +
  scale_x_date(breaks = "2 years", date_labels = "%Y") +
  geom_line() +
  labs(title = "Ajamisen reaalinen kustannus",
       subtitle = "Euroa per 100 km", x=NULL,y=NULL)

100 kilometrin matkaan tarvittava työmäärä oli vuonna 2020 noin 17 minuuttia, kun vuonna 2006 oli noin 30 minuuttia. Toisin sanoen autolla ajamisen reaalikustannus puolittui 15 vuodessa.

Polttoaineiden meno-osuus väestöryhmittäin

do.call(htmltools::tagList, p)