revizor: Analizarea revizuirilor datelor în timp real în R

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

Datele economice sunt rareori statice. Produsul intern brut (PIB), inflația, ocuparea forței de muncă și alte statistici oficiale apar ca estimări timpurii, apoi sunt revizuite pe măsură ce sosesc noi date sursă, se actualizează ajustarea sezonieră sau se aplică modificări de referință. Aceste revizuiri contează deoarece pot schimba narațiunea cu privire la punctele de cotitură, greșelile de politică și performanța prognozelor.

reviser este un pachet R de Marc Burri și Philipp Wegmüller pentru lucrul direct cu aceste seturi de date vintage. Un set de date vechi înregistrează mai multe versiuni publicate ale aceleiași serii cronologice, astfel încât să puteți compara ceea ce era cunoscut la fiecare dată de lansare cu ceea ce a fost raportat ulterior.
reviser vă oferă un flux de lucru consistent pentru:

  • remodelează edițiile de ediție între formate largi și ordonate;
  • extragerea revizuirilor referitoare la versiunile anterioare sau finale;
  • rezumați părtinirea, dispersia și dependența de serie în revizuiri;
  • identifica prima lansare care este statistic apropiata de eventualul benchmark;
  • nowcast viitoare revizuiri cu modele de stat-spațiu.

Pachetul se adresează utilizatorilor care lucrează deja cu date macroeconomice în timp real și doresc instrumente care depășesc trasarea manuală a triunghiurilor de revizuire. Unul dintre obiectivele de proiectare este menținerea fluxului de lucru în R pur.

reviser a fost revizuită prin evaluarea inter pares a software-ului statistic rOpenSci. Multe mulțumiri recenzenților Alex Gibberd și Tanguy Barthelemy și editorului Rebecca Killick pentru feedback care a îmbunătățit pachetul.

De ce analiza revizuirii merită propriul flux de lucru

Revizuirile nu sunt doar zgomot de măsurare. Ele codifică modul în care informația intră în procesul de producție a datelor.

  • Unele revizuiri reflectă informații cu adevărat noi.
  • Altele reflectă zgomot care, în principiu, ar fi putut fi redus mai devreme.
  • Altele provin din modificări metodologice sau actualizări ale benchmark-urilor.

Aceste distincții contează dacă evaluați lansările timpurii de date, construiți previziuni sau vă întrebați dacă primele versiuni sunt deja rezumate eficiente ale informațiilor disponibile.

The reviser Vignetele organizează acest flux de lucru în trei straturi:

  1. Structurați vintage în mod constant.
  2. Măsurați și testați proprietățile de revizuire.
  3. Modelați procesul de revizuire atunci când doriți să preziceți schimbările viitoare.

Un exemplu compact cu vintage-urile PIB

Primul pas este remodelarea datelor într-un format vintage ordonat, în care fiecare rând corespunde unei valori observate, datei la care se referă și data publicării respectivei estimări.

Pachetul este livrat cu un exemplu de set de date GDP în format vintage lung. Să presupunem că vrem să ne concentrăm asupra creșterii PIB-ului SUA, să vizualizăm modul în care s-au mutat estimările în timpul crizei financiare globale din 2008-2009 și apoi să ne întrebăm dacă lansările timpurii au fost părtinitoare în mod sistematic în raport cu un etalon de referință ulterioar.

library(reviser)
library(dplyr)
library(tsbox)

gdp_us <- gdp |>
 filter(id == "US") |>
 tsbox::ts_pc() |>
 tsbox::ts_span(start = "1980-01-01")

gdp_wide <- vintages_wide(gdp_us)
gdp_long <- vintages_long(gdp_wide, keep_na = FALSE)

Cu vintage-urile în formă ordonată, putem reprezenta cum s-a schimbat calea publicată de-a lungul timpului. Axa y din figură raportează ratele de creștere trimestrială a PIB-ului.

plot_vintages(
 gdp_long |>
 filter(
 pub_date >= as.Date("2009-01-01"),
 pub_date < as.Date("2010-01-01"),
 time > as.Date("2008-01-01"),
 time < as.Date("2010-01-01")
 ),
 type = "line",
 title = "Revisions of GDP during the 2008-09 global financial crisis",
 ylab = "Quarter-on-quarter GDP growth rate"
)
Mai multe căi de epocă pentru creșterea PIB-ului SUA, evidențiind modul în care estimările publicate în 2009 s-au schimbat de-a lungul timpului.

Anii de creștere a PIB-ului pentru Statele Unite în timpul crizei financiare globale din 2008-2009.

În perioadele volatile, căile vintage pot diverge suficient de mult încât povestea spusă de prima lansare să fie vizibil diferită de povestea spusă un an mai târziu.

Odată ce datele sunt într-o formă de epocă ordonată, puteți compara un set de versiuni timpurii cu o versiune de referință ulterioară.

final_release <- get_nth_release(gdp_long, n = 10)
early_releases <- get_nth_release(gdp_long, n = 0:6)

summary_tbl <- get_revision_analysis(early_releases, final_release)

Warning: Both 'release' and 'pub_date' columns are present in 'df.
The 'release' column will be used for grouping.

summary_tbl |>
 select(id, release, `Bias (mean)`, `Bias (robust p-value)`, `Noise/Signal`)


=== Revision Analysis Summary ===
# A tibble: 7 × 5
id release `Bias (mean)` `Bias (robust p-value)` `Noise/Signal`
    
1 US release_0 -0.014 0.52 0.22
2 US release_1 -0.015 0.425 0.202
3 US release_2 -0.013 0.507 0.205
4 US release_3 -0.003 0.851 0.194
5 US release_4 -0.014 0.326 0.157
6 US release_5 -0.021 0.181 0.152
7 US release_6 -0.018 0.202 0.13
=== Interpretation ===
id=US, release=release_0:
• No significant bias detected (p = 0.52 )
• Moderate revision volatility (Noise/Signal = 0.22 )
id=US, release=release_1:
• No significant bias detected (p = 0.425 )
• Moderate revision volatility (Noise/Signal = 0.202 )
id=US, release=release_2:
• No significant bias detected (p = 0.507 )
• Moderate revision volatility (Noise/Signal = 0.205 )
id=US, release=release_3:
• No significant bias detected (p = 0.851 )
• Moderate revision volatility (Noise/Signal = 0.194 )
id=US, release=release_4:
• No significant bias detected (p = 0.326 )
• Moderate revision volatility (Noise/Signal = 0.157 )
id=US, release=release_5:
• No significant bias detected (p = 0.181 )
• Moderate revision volatility (Noise/Signal = 0.152 )
id=US, release=release_6:
• No significant bias detected (p = 0.202 )
• Moderate revision volatility (Noise/Signal = 0.13 )

Aici este locul reviser trece dincolo de un pachet de remodelare și complot. Rezumatul revizuirii raportează cantitățile de care munca aplicată are nevoie adesea, dar de obicei reconstruiește ad-hoc: distorsiuni medii, cuantile, volatilitate, rapoarte zgomot-semnal și teste de ipoteză pentru părtinire, corelație serială și interpretări știri versus zgomot.

În exemplul grupat, eliberarea timpurie a PIB-ului SUA pentru acest eșantion arată puține dovezi de părtinire sistematică în raport cu valoarea de referință ulterioară. Pachetul acceptă, de asemenea, diagnosticarea de lansare eficientă, unde întrebarea nu este doar dacă există revizuiri, ci și când revizuirile suplimentare încetează să adauge informații semnificative.

efficient_release <- get_first_efficient_release(early_releases, final_release)
summary(efficient_release)

Efficient release: 0
Model summary:
Call:
stats::lm(formula = formula, data = df_wide)
Residuals:
Min 1Q Median 3Q Max
-0.89186 -0.12669 0.02046 0.11475 0.97986
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.00299 0.02223 0.134 0.893
release_0 0.97412 0.01692 57.567 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.2518 on 166 degrees of freedom
(10 observations deleted due to missingness)
Multiple R-squared: 0.9523, Adjusted R-squared: 0.952
F-statistic: 3314 on 1 and 166 DF, p-value: < 2.2e-16
Test summary:
Linear hypothesis test:
(Intercept) = 0
release_0 = 1
Model 1: restricted model
Model 2: final ~ release_0
Note: Coefficient covariance matrix supplied.
Res.Df Df F Pr(>F)
1 168
2 166 2 1.9283 0.1486

Acesta este exact tipul de rezultat care este greu de văzut doar dintr-un triunghi de revizuire, dar ușor de oficializat odată ce fluxul de lucru este standardizat. În acest eșantion, rezultatul indică faptul că prima ediție este deja apropiată statistic de referința ulterioară, ceea ce sugerează că revizuirile ulterioare adaugă relativ puține informații sistematice.

De la analiza descriptivă la revizuirea nowcasting

Pentru mulți utilizatori, rezumatele revizuirilor vor fi principalul caz de utilizare. Dar reviser include, de asemenea, instrumente bazate pe modele pentru utilizatorii care doresc să trateze revizuirile ca pe o problemă explicită a datelor latente. Acest lucru contează dacă trebuie să luați decizii cu privire la datele preliminare, dar doriți și o modalitate structurată de a estima modul în care aceste cifre se vor schimba mai târziu.

Două vignete parcurg revizuirile nowcasting cu:

  • familia generalizată Kishor-Koenig via kk_nowcast();
  • modelul Jacobs-Van Norden via jvn_nowcast().

Ambele abordări transformă problema revizuirii în formă de spațiu de stat, ceea ce face posibilă estimarea dinamicii știrilor și a zgomotului în lansările succesive de date. Pentru utilizatorii tehnici, aceasta este partea din pachet care transformă analiza revizuirii de la diagnosticarea retrospectivă într-o problemă de prognoză.

Iată un compact kk_nowcast() exemplu în urma fluxului de lucru Kishor-Koenig din vigneta pentru zona euro (EA).
Ideea cheie este de a identifica mai întâi o versiune eficientă eapoi estimați sistemul de revizuire pe panoul corespunzător de versiuni. În acest exemplu de zonă euro, pasul de eliberare eficientă selectează e = 2așa că modelul tratează a treia lansare publicată ca fiind cea mai veche, care este deja aproape de referința ulterioară. Acesta este un rezultat substanțial util în sine: sugerează că cea mai mare parte a semnalului relevant din punct de vedere economic ajunge în primele câteva versiuni, în timp ce revizuirile ulterioare sunt ajustări mai mici în jurul acelei căi.

gdp_ea <- reviser::gdp |>
 tsbox::ts_pc() |>
 dplyr::filter(
 id == "EA",
 time >= min(pub_date),
 time <= as.Date("2020-01-01")
 )

releases <- get_nth_release(gdp_ea, n = 0:14)
final_release <- get_nth_release(gdp_ea, n = 15)

efficient_release <- get_first_efficient_release(releases, final_release)

fit_kk <- kk_nowcast(
 df = efficient_release$data,
 e = efficient_release$e,
 model = "KK",
 method = "MLE"
)

summary(fit_kk)


=== Kishor-Koenig Model ===
Convergence: Success
Log-likelihood: 125.7
AIC: -231.41
BIC: -198.23
Parameter Estimates:
Parameter Estimate Std.Error
F0 0.633 0.131
G0_0 0.950 0.031
G0_1 -0.037 0.152
G0_2 -0.181 0.220
G1_0 -0.009 0.011
G1_1 0.594 0.061
G1_2 0.194 0.092
v0 0.380 0.068
eps0 0.008 0.001
eps1 0.001 0.000

plot(fit_kk)
Diagnostic grafic dintr-un model Kishor-Koenig nowcast pentru revizuirile PIB din zona euro, care rezumă dinamica revizuirii adaptate.Diagnostic grafic dintr-un model Kishor-Koenig nowcast pentru revizuirile PIB din zona euro, care rezumă dinamica revizuirii adaptate.

Diagnostic diagramă din exemplul Kishor-Koenig nowcast.

Obiectul ajustat conține parametri estimați, stări latente filtrate și netezite și metode de trasare pentru calea implicită de eliberare eficientă. Acest lucru vă oferă o cale directă de la analiza descriptivă a revizuirii la o previziune în spațiu de stare a revizuirilor viitoare. Pentru un public mai larg, principala concluzie nu sunt coeficienții individuali. Este faptul că modelul converge clar pe acest eșantion, rezumă procesul de revizuire într-o formă compactă de stare latentă și oferă o modalitate practică de a aprecia dacă o nouă ediție este probabil să fie revizuită material mai târziu. În mod substanțial, modelul separă semnalul persistent de zgomotul de revizuire tranzitorie, astfel încât ieșirea este utilă atunci când doriți să evaluați dacă noile versiuni sunt susceptibile de a fi revizuite material.

Ce adaugă revizorul

Ceea ce iese în evidență reviser nu este o singură funcție, ci coerența fluxului de lucru:

  • pachetul are convenții explicite pentru datele vintage;
  • analiza descriptivă a revizuirii și testarea formală se află în același API;
  • analiza eficientă a lansării se conectează direct la întrebările aplicate despre ce versiune să se încreadă;
  • instrumentele nowcasting extind același flux de lucru în loc să forțeze o stivă separată de modelare.

Dacă lucrați cu date macroeconomice în timp real, acea combinație este utilă deoarece analiza revizuirii este de obicei fragmentată în scripturi personalizate, foi de calcul unice și combinații de pachete care nu au o structură comună de date.

Încercați și împingeți-l mai departe

Puteți instala pachetul din rOpenSci R-universe:

install.packages(
 "reviser",
 repos = c("https://ropensci.r-universe.dev", "https://cloud.r-project.org")
)

Apoi începeți cu site-ul pachetului și viniete:

Ne-ar face plăcere să auzim feedback de la cei dintre voi care încercați pachetul cu diferite seturi de date. Dacă aveți un set de date în timp real cu o structură de lansare diferită, acesta ar fi un bun test de stres pentru pachet. Dacă găsiți lacune în fluxul de lucru sau aveți un caz de utilizare de partajat, deschideți o problemă sau contribuiți cu un exemplu. Analiza revizuirilor devine mai utilă, deoarece devine mai ușor să comparați fluxurile de lucru între seturi de date, mai degrabă decât să le reconstruiți de la zero de fiecare dată.

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.