Elasticitatea prețului cererii de țiței de @ellis2013nz

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Această postare de blog este despre mine că încerc să fac o versiune mai bună a unei diagrame existente, care cred că este importantă, dar greu de citit în versiunea care continuă să apară în fluxul meu Bluesky.

Robin J Brooks de la Brookings Institution a folosit o diagramă utilă, cred că din martie 2026, pentru a prezenta un set de efecte teoretice ilustrative ale războiului SUA-Iran asupra prețurilor țițeiului. De exemplu, o reproduce în această postare recentă pe blog. În comparație cu multe alte voci, Brooks a fost, în general, descendente cu privire la prețul țițeiului în acest conflict, abordarea sa fiind foarte bazată pe această diagramă. Diagrama este atribuită Haver Analytics, deși originalul nu îl găsesc.

Cred că este un grafic important, deoarece ne face să ne confruntăm cu faptul că curba cererii de țiței nu este verticală. Există, de fapt, estimări ale elasticității prețului cererii de țiței și variază, dar cu siguranță uneori ies undeva între -0,1 și -0,2. De obicei, elasticitatea prețului cererii este introdusă economiștilor începători, deoarece o valoare de -0,1 înseamnă „o creștere a prețului de 1% va duce la o scădere a cantității cerute cu 0,1%. Dar pentru acest exercițiu, vom întoarce relația – dacă punctul de echilibru în care oferta întâlnește cererea este forțat în scădere cu 0,1% (din cauza unei deplasări a curbei ofertei), aceasta implică o creștere a prețului de aproximativ 1%.

În cazul războiului actual, la apogeul său, evenimentele au scos de pe piață o cantitate de petrol de undeva în jur de 10% din oferta normală de petrol la nivel mondial. Până la 20% din oferta mondială a fost expusă riscurilor, deși nu cred că am ajuns vreodată la o reducere de această amploare. Cantitatea eliminată este mult mai mică chiar acum în momentul în care scriu (adică uleiul curge într-un ritm mult mai mare decât acum câteva luni), dar cine știe unde va fi în câteva săptămâni. Raționamentul de mai sus implică un impact al unei reduceri de 10% a ofertei asupra prețului de 100% (adică dublarea) dacă elasticitatea prețului cererii este -0,1; sau în jur de 50% dacă este -0,2. Acesta este practic ceea ce arată diagrama folosită de Brooks.

Pentru a face acest lucru, graficul folosește o aproximare a elasticității liniare. Nu sunt sigur că acest lucru se aplică cu adevărat pentru amploarea schimbării despre care vorbim aici, cu o scădere a ofertei cu 10% sau 20%. Dar este un punct de plecare.

De asemenea, rețineți că niciunul dintre acestea nu influențează o modificare a curbei cererii. Acestea sunt schimbări în sus și în jos pe curba cererii existente. Pe o perioadă mai lungă, curba se va schimba odată cu schimbările în venituri, politici, atitudini ale cumpărătorilor și tehnologie, în special prin mecanismul evident al tranziției accelerate la electricitate curată și regenerabilă. Deocamdată, lăsăm acele modificări deoparte.

De asemenea, lăsăm deoparte modul în care reducerea stocurilor existente poate (și cu siguranță a făcut) să atenueze piețele de reducerea ofertei. Încercăm să ilustrăm un punct și să obținem un interval plauzibil, având în vedere diverse presupuneri; nu sunt de fapt prognozate prețuri.

Intriga de perspectivă

Din păcate, mi se pare foarte greu de urmărit graficul de la Haver Analytics. Încearcă să arate relația dintre două variabile cheie — petrolul exportat cu succes din Golf și impactul rezultat asupra prețurilor — și un parametru incert, elasticitatea prețului pe termen scurt a cererii de țiței. Nu știm cu siguranță această elasticitate, dar este plauzibil undeva între -0,1 și -0,2. Așadar, dorim să vedem o serie de impacturi asupra prețului, având în vedere acest parametru necunoscut.

Notă: în diagramele de mai jos, urmăresc Haver Analytics pentru a arăta mărimea absolută a elasticității prețului a cererii, scăzând semnul negativ.

Pentru a face față acestui lucru, originalul folosește o diagramă de perspectivă tridimensională. Iată reproducerea mea brută în R a diagramei originale:

Cred că versiunea mea este de fapt puțin mai ușor de citit decât originalul Haver Analytics din cauza umbririi, dar este doar o îmbunătățire marginală. Problema este cea obișnuită cu aceste tipuri de diagrame tridimensionale – este doar foarte greu de citit de la suprafața de îndoire până la valorile pe cele trei axe și este și mai greu să luăm o tendință sau o tendință generală în modul în care găsim simplu cu un diagramă de dispersie bidimensională sau un diagramă de linii.

Am simulat datele ilustrative din spatele diagramei și am făcut acea diagramă de perspectivă tridimensională cu acest cod:

library(tidyverse)
library(plot3D)
library(scales)
library(glue)
library(RColorBrewer)

#---------------Simulating data---------------------------

global_oil_consumption  <- 100
original_gulf_exports <- 20
prewar_oil_price <- 72.5

elasticities <- seq(from = 0.1, to = 0.2, length.out = 11)
exports <- 2:original_gulf_exports
length(exports)
length(elasticities)

d <- expand_grid(
    elasticity = elasticities,
    export = exports
) |>
    mutate(
        lost_oil = (original_gulf_exports - export) / global_oil_consumption ,
        price_rise = lost_oil / elasticity * 100
    )

#---------------common caption and title across all plots-------------------

the_caption <- str_wrap(
    glue(
        "Illustrative calculation assuming global oil consumption of ",
        "{global_oil_consumption } million barrels per day and pre-war Gulf exports of ",
        "{original_gulf_exports} million barrels per day. ",
        "Re-worked by freerangestats.info based on original analysis by Haver Analytics."
    ),
    115
)
the_title <- "Illustrative impact of Gulf export cuts on oil prices"
#----------------Perspective plot---------------
# this recreates the original plot by Haver Analytics

prices_matrix <- d |>
    arrange(export, elasticity) |>
    select(elasticity, export, price_rise) |>
    pivot_wider(names_from = elasticity, values_from = price_rise) |>
    select(-export) |>
    as.matrix()

reds <- colorRampPalette(c("mistyrose", "darkred"))(100)

persp3D(
    x = exports,
    y = elasticities,
    z = prices_matrix,
    col = reds,
    xlab = "nOil exported from the Gulf",
    ylab = "nnPrice elasticity of demand",
    zlab = "nRise in oil prices (%)",
    main = the_title,
    # box type must be one of “b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”
    bty = "g",
    ticktype = "detailed",
    colkey = FALSE
)

mtext(
    the_caption,
    side = 1,
    line = 4,
    cex = 0.8,
    col = "grey30"
)

Îmbunătățirea 1: harta termică

Adesea, o diagramă de perspectivă este îmbunătățită transformându-l într-un fel de hartă termică. Acestea folosesc același tip de date – o grilă de valori pe axele x și y, cu o variabilă de interes pe o a treia dimensiune. În graficul de perspectivă, acea a treia variabilă este mapată pe axa verticală z; într-o hartă termică o mapăm la culoarea umpluturii.

Iată prima mea încercare de a îmbunătăți diagrama perspectivei redesenând-o ca o hartă termică:

Cred că aceasta este deja o îmbunătățire mare, dar a venit cu prețul transformării graficului într-un tabel. Este mai ușor de citit, dar nu pare că folosim cu adevărat puterea vizualizării.

Iată codul care desenează versiunea hărții termice:

#-----------------Heat map--------------------
elasticities2 <- c(0.1, 0.12, 0.14, 0.16, 0.18, 0.2)
exports2 <- 1:10 * 2

p1 <- d |>
    filter(round(elasticity, 2) %in% elasticities2) |>
    filter(export %in% exports2) |>
    mutate(text_col = ifelse(price_rise >= 100, "Pale", "Dark")) |>
    ggplot(aes(x = export, y = elasticity, fill = price_rise)) +
    geom_tile() +
    geom_text(
        aes(label = percent(price_rise, scale = 1), colour = text_col),
        size = 4
    ) +
    scale_fill_gradientn(colours = reds, label = percent_format(scale = 1)) +
    scale_y_continuous(breaks = elasticities2) +
    scale_x_continuous(breaks = exports2) +
    scale_colour_manual(
        values = c("Pale" = "white", "Dark" = "black"),
        guide = "none"
    ) +
    labs(
        title = the_title,
        subtitle = str_wrap(
            "Illustrative price increase for crude oil depends on the price elasticity of demand and the amount of oil that is exported from the Gulf.",
            100
        ),
        x = "Oil exported from the Gulf (in million barrels per day)",
        y = "Price elasticity of demand for crude oil",
        fill = "Price increase for crude oil",
        caption = the_caption
    )

print(p1)

Îmbunătățirea 2: graficul cu linii

Așa că am încercat un complot de linii. Cred că cea mai importantă relație aici este între cantitatea de petrol exportată cu succes din Golf și schimbarea prețului mondial al țițeiului. Așa că fac din asta axele x și y. Relația vizuală dintre x și y este cel mai izbitor lucru pentru mulți cititori de diagrame; cu siguranta pentru mine. Incertitudinea cu privire la elasticitatea prețului cererii este de interes secundar și putem arăta că doar trasând o linie diferită pentru o grămadă de valori plauzibile diferite.

Iată ce am venit cu:

Cred că aceasta este cu siguranță cea mai bună versiune.

Unul dintre avantajele sale este că pot folosi o axă secundară pentru a converti creșterile procentuale de preț într-o valoare implicită a dolarului pe baril, bazată pe un preț de dinainte de război de aproximativ 72,50 USD pe baril. Acesta este un plus frumos pentru înțelegere.

Cred că evantaiul liniilor cu coduri de culori este, de asemenea, o modalitate bună de a arăta sensibilitatea rezultatelor la diferitele ipoteze posibile cu privire la elasticitatea prețului a cererii. Le-am codificat în mod deliberat pe culori pe baza distanței de la mijlocul gamei de ipoteze posibile, mai degrabă decât de la cea mai mică la cea mai mare – pentru că cred că acest lucru atrage mai bine atenția asupra acestui lucru ca pe un tip de incertitudine.

Dar cel mai important lucru cu această diagramă este că am pus cele mai importante două variabile pe axele x și y. Înseamnă, de exemplu, că putem vedea pur și simplu relația implicită ca o tendință, care este atât de greu de văzut în original.

De asemenea, face ușor de citit față de prețul de astăzi și de nivelul exporturilor de țiței (nimeni nu știe ce este asta astăzi, dar să spunem undeva între 7 și 15 milioane de barili pe zi) pentru a atinge fanul diferitelor linii și pentru a vedea a) ce implică orice valoare anume despre elasticitatea prețului cererii și/sau b) dacă există un impact suplimentar asupra prețului de la alte informații, probabil, riscuri încorporate asupra stocurilor cunoscute. cererea și oferta etc.

Pentru ceea ce merită, cu valori plauzibile pentru astăzi, graficul implică faptul că există un pic în plus în prețuri. Presupunerea mea este că aceasta este probabil o teamă (întemeiată rațional sau nu) că exporturile ar putea scădea rapid de la nivelurile actuale relativ ridicate.

Iată codul pentru desenarea versiunii de diagramă cu linii:

#-----------------line plot------------------
annot_col <- "grey12"

p2 <- d |>
    mutate(
        elasticity_distance = abs(elasticity - 0.15),
        is_midpoint = ifelse(round(elasticity, 2) == 0.15, "solid", "dashed")
    ) |>
    ggplot(aes(
        x = export,
        y = price_rise,
        group = elasticity,
        colour = elasticity_distance
    )) +
    geom_line(aes(linetype = is_midpoint)) +
    geom_text(
        data = filter(
            d,
            export == min(export),
            round(elasticity, 2) %in% c(0.1, 0.15, 0.2)
        ),
        aes(label = glue("Elasticity = {elasticity}")),
        hjust = 1,
        position = position_nudge(x = -0.1),
        colour = annot_col,
        size = 2.8
    ) +
    scale_linetype_manual(
        values = c("solid" = 1, "dashed" = 5),
        guide = "none"
    ) +
    scale_y_continuous(
        label = percent_format(scale = 1),
        sec.axis = sec_axis(
            ~ prewar_oil_price * (1 + . / 100),
            name = "Implied crude oil price (US$/barrel)",
            label = dollar
        )
    ) +
    annotate(
        "text",
        x = 17,
        y = 0,
        hjust = 1,
        size = 2.5,
        label = "Pre-war situation",
        colour = annot_col
    ) +
    annotate(
        "segment",
        x = 17,
        xend = 19.5,
        y = 0,
        yend = 0,
        arrow = arrow(length = unit(0.15, "cm")),
        colour = annot_col
    ) +
    expand_limits(x = c(0, 20)) +
    scale_colour_gradientn(
        colours = brewer.pal(9, "Blues")(9:4),
        breaks = c(0, 0.025, 0.05),
        limits = c(0, 0.05)
    ) +
    labs(
        x = "Oil exported from the Gulf (million barrels per day)",
        y = "Price increase for crude oil",
        colour = "Distance from midpoint of assumed elasticity range:",
        title = the_title,
        subtitle = str_wrap(
            "Illustrative price increase for crude oil depends on the price elasticity of demand and the amount of oil that is exported from the Gulf.",
            100
        ),
        caption = the_caption
    ) +
    theme(
        panel.background = element_rect(fill = "white"),
        panel.grid.major = element_line(colour = "grey88"),
        panel.grid.minor = element_blank()
    )

print(p2)

Asta e tot pentru azi. Îmi place graficul meu final, dar îmi place și mai mult cadrul analitic de bază. Nu mi-am propus să critic graficul original, ci să redesenez diagrama într-un mod care să fie mai ușor de citit pentru mine. Se pare că cel mai important lucru este să puneți cele mai importante două variabile pe axele x și y.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.