Identificarea lipsurilor de date cu R

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

Rezumat: În această postare, Giles subliniază o abordare simplă care poate fi utilizată pentru a identifica potențiale „lacune de date” folosind R. Se presupune că lacunele de date denotă diferența dintre datele necesare pentru a obține un rezultat și în prezent date disponibile. Pentru a demonstra cum ar putea fi aplicată metodologia, disponibilitatea datelor pentru Tanzania este comparată cu un set de egali geografici și economici.

Pachete: wbstats, tidyverse și kableExtra.

Date: Datele utilizate în această postare au fost obținute folosind pachetul wbstats R.

Introducere

Am întâlnit pentru prima dată ideea „cartării decalajului de date” atunci când un client a angajat echipa noastră pentru a dezvolta un index compus pentru a îmbunătăți modul în care a monitorizat riscurile economice, politice și sociale naționale.

În cele mai multe cazuri, o „cartare a decalajului de date” încearcă să compare datele necesare cu cele disponibile. Acest lucru poate dezvălui nu numai unde sunt necesare date suplimentare, ci și deficiențele datelor pe care le avem la dispoziție – fie în ceea ce privește calitatea, cantitatea, frecvența sau granularitatea. Pe lângă faptul că ajută la evidențierea potențialelor puncte moarte care ar putea apărea în analiza noastră, poate fi util și pentru a evidenția locurile în care ar putea fi necesar un efort suplimentar pentru a umple eventualele lacune de date identificate.

Lăsând deoparte controversele legate de utilizare (și abuz)1 a indicilor compoziți, pentru noi analiza decalajelor a cerut comparând caracteristicile datelor de care dispunem2 cu ceea ce este necesar pentru a construi indicele „ideal” al clientului. Din păcate, pentru că trebuia să finalizăm analiza înainte de a ști cum va arăta indicele, trebuia să găsim un substitut rezonabil.

O schiță a abordării

Deoarece aveam o idee despre temele pe care indexul ar trebui să le acopere, am putut determina date disponibile pentru noi prin revizuirea surselor naționale și internaționale relevante pentru fiecare temă. De exemplu, știind că măsurile de stabilitate politică și democratică ar putea fi importante, am analizat fiecare sursă de date naționale și internaționale pentru a găsi indicatori care ar putea fi potriviți pentru indice. Apoi am repetat acest lucru pentru fiecare temă pentru a produce o bază de date clasificată de indicatori și metadate corespunzătoare.

Pentru a proxy ce datele de care aveam nevoie pentru a construi indicele, am decis să comparăm disponibilitatea datelor pentru țara în care construiam indicele cu similarii săi. Această abordare a avut avantajul de a evidenția teme în care ar putea fi date deosebit de rare la proiectarea și construirea indicelui, chiar și luând în considerare capacitatea statistică a țării vizate.

În cazul în care disponibilitatea datelor pentru țara noastră de interes este mai scăzută decât în ​​comparație, ar putea indica că există opțiuni limitate disponibile pentru acoperirea temei într-un index sau că va fi nevoie de mai mult timp pentru sursele de date pentru a umple aceste lacune. A ști unde datele sunt limitate ar fi, de asemenea, util în timpul consultărilor cu părțile interesate, astfel încât cererile de contribuții să se poată concentra pe teme în care datele ar putea fi greu de găsit.

Pentru a ilustra abordarea, vom folosi Tanzania ca țară de interes.3

Date pe care le avem

Pentru a determina datele disponibile pentru noi, am căutat manual baze de date care se concentrează pe indicatori relevanți pentru măsurarea și/sau reprezentarea riscurilor politice, economice și sociale. De exemplu, baza de date privind statisticile financiare internaționale a Fondului Monetar Internațional ar putea fi utilizată ca sursă pentru statistici economice și financiare. În timp ce UNdata ar putea fi folosită ca sursă pentru statistici sociale.

Pentru fiecare sursă de date, am analizat apoi disponibilitatea indicatorilor pentru țara vizată și colegii săi. Pentru a ne înțelege calitatea și cantitatea fiecărui indicator, am colectat și metadate, cum ar fi numele indicatorului, frecvența publicării acestuia, perioada în care datele sunt disponibile și sursa sa primară.

Deși evaluarea noastră completă a acoperit peste 250 de baze de date, vom păstra exemplul simplu concentrându-ne pe datele care pot fi accesate prin API-ul Băncii Mondiale (prin pachetul wbstats). Deoarece funcția wb_data() poate eșua uneori când un indicator nu este disponibil, vom limita analiza la Indicatorii de dezvoltare mondială (source_id=2):

Încărcarea pachetelor și selectarea datelor mostre

#load relevant packages
library(wbstats)
library(tidyverse)

#get indicator metadata 
#(We've focused on the World Development Indicators as they're more reliably available)
ref_indicators<-wb_indicators() |> 
  filter(source_id==2)

#create a list of indicator IDs by topic
#(Note: Some indicators are assigned to multiple topics)
ref_dta_topics<-ref_indicators |> 
  select(indicator_id, topics) |> 
  unnest(topics) |> 
  rename(topic=value)

#select a random sample of indicators for each topic
#(set seed for reproducibility)
set.seed(321)

#select sample of indicators across topics
ref_selected_indicators<-ref_dta_topics |>
  group_by(topic) |> 
  slice_sample(n=3)

Datele de care avem nevoie

Deoarece nu știam cum ar trebui să arate indexul, am decis să îl proxy pe baza disponibilității datelor pentru un grup de colegi. Deși selecția noastră de colegi a fost destul de implicată în proiectul complet, o vom menține simplu aici și naiv să presupunem că colegii statistici pentru Tanzania sunt țări din aceleași grupuri regionale și de venituri:

Specificarea peerilor și descărcarea datelor

#specify focus country iso3c code
ref_fcs_iso<-"TZA"

#select countries 
ref_peer_isos<-wb_countries() |> 
  filter(admin_region_iso3c=="SSA", 
         income_level_iso3c== "LMC")

#download data for selected indicators 
dta_wb<-wb_data(country = ref_peer_isos$iso3c, 
                    indicator=ref_selected_indicators$indicator_id,
                    return_wide=FALSE)

#view peers
kableExtra::kable(ref_peer_isos |> select(country))

Colegii selectați:

ţară
Angola
Benin
Coasta de Fildeș
Camerun
Congo, Rep.
Comore
Cabo Verde
Ghana
Guineea
Kenya
Lesotho
Mauritania
Nigeria
Senegal
Sao Tome și Principe
Eswatini
Tanzania
Zambia
Zimbabwe

Lăsând deoparte dacă țările enumerate pot fi considerate „asemeni” pentru Tanzania4următoarea întrebare este cum să comparați în mod rațional disponibilitatea datelor între țări. De exemplu:

  • Ar trebui să comparăm Tanzania cu cel mai performant peer, mediana sau media este suficient de bună?
  • Ar trebui luată în considerare frecvența publicării?
  • Ar trebui să li se acorde prioritate datelor mai recente?
  • etc…

După cum probabil ați ghicit, nu voi da un răspuns simplu aici pentru că nu există. Dar, deoarece evaluarea noastră a acoperit 14 mii de indicatori din peste 250 de baze de date, am adoptat o abordare relativ simplă, renunțând la toți indicatorii fără valori pentru perioadele recente și comparând disponibilitatea datelor pentru țara noastră de interes cu cea de la egal la egal. medie.

Codul de mai jos ilustrează ideea de bază, comparând procentul de valori lipsă pentru Tanzania în comparație cu egalii săi pentru fiecare indicator, ignorând recentitatea observațiilor disponibile pentru un indicator:

Estimarea proporției comparative a valorilor lipsă

#label peers vs focus country tranform date to integer 
dta_wb<-dta_wb |> 
  mutate(date=as.integer(date), 
         iso_group= if_else(iso3c==ref_fcs_iso,
                            "Focus","Peer"))

#Calculate the % of missing values 
#Add topic (noting some indicators are assigned multiple topics)
sum_na_bechmarking<-left_join(dta_wb,ref_dta_topics) |> 
  group_by(iso_group,topic) |>
  summarize(pct_na=(sum(is.na(value))/n()) )|>
  pivot_wider(values_from =  pct_na, names_from = iso_group) |> 
  mutate(na_data_gap=round(Focus-Peer,2)) 

#present largest data gaps using the missing value approach
 sum_na_bechmarking |> 
   select(topic, na_data_gap) |>
  arrange(na_data_gap) |> 
   head(5) |> 
   kableExtra::kable()

Potențiale lacune de date (abordarea valorilor lipsă):

subiect na_data_gap
Datoria externă -0,11
Schimbările climatice -0,10
Infrastructură -0,10
Dezvoltare Urbană -0,09
Energie și minerit -0,06

Datele care ne lipsesc

Din punctul de vedere al acesteia, disponibilitatea medie a datelor cu privire la subiectele datoria externă, schimbările climatice și infrastructura este mai mică pentru Tanzania pentru egalii săi. Sugerând că ar putea fi relativ mai greu să găsiți date despre aceste subiecte.

Desigur, deoarece sursa primară pentru mulți dintre indicatori sunt agențiile de statistică din fiecare țară, o comparație la nivel de țară are mai mult sens. De asemenea, este probabil să fie mai informativ să comparăm disponibilitatea datelor la nivel de indicator, înainte de a rezuma lipsurile de date pe subiect, pentru a evita ca rezultatele noastre să fie denaturate de numărul de indicatori disponibili pentru fiecare țară.

O altă problemă potențială este că, în multe cazuri, există valori lipsă înainte ca datele pentru un indicator să fie colectate de către Tanzania sau colegii săi. Un bun exemplu în acest sens este timpul mediu de livrare în zile (ID: LP.IMP.DURS.MD), care pentru Tanzania este disponibil numai după 2007 și în mod neregulat. Crearea unui decalaj de date bazat pe procentul de valori lipsă potențial înșelătoare; deoarece serii de date mai noi vor avea valori lipsă în perioade înainte ca datele să fie colectate pentru prima dată pentru un indicator.

Pentru a rezolva acest lucru, codul de mai jos calculează proporția de valori disponibile după ce o valoare este disponibilă pentru prima dată pentru un indicator. Aceasta urmează o logică similară cu utilizarea procentului de valori lipsă, cu excepția faptului că penalizează scorul unei țări doar odată ce există dovezi că au fost colectate date pentru un indicator. De asemenea, oferă un indicator mai bun al modului în care datele au fost colectate în mod fiabil după prima observație:

Estimarea lipsurilor de date la nivel de indicator:

#create a set of summary stats for indicators
sum_dta_benchmarking_by_indic<-dta_wb |> 
  filter(!is.na(value)) |> 
  group_by(indicator_id,indicator,iso_group,iso3c,country) |> 
  summarize(n_obs=n(),
            start_year=min(date),
            end_year=max(date)+1) |> 
  mutate(max_n_obs = end_year-start_year,
         pct_obs= (n_obs)/max_n_obs) |> 
  #aggregate to iso_group level
  group_by(indicator_id,indicator,iso_group) |> 
  summarize(avg_pct_obs=mean(pct_obs,na.rm=TRUE)) |> 
  #reshape to compare peers
  pivot_wider(names_from=iso_group, 
              values_from=avg_pct_obs,
              values_fill= 0) |> 
  mutate(data_gap=round(Focus-Peer,2))

# present indicators with a 'data gap' above 10 percentage points
sum_dta_benchmarking_by_indic |>
  filter(data_gap <=-0.1) |> 
  arrange(data_gap) |> 
  ungroup() |> 
  select(indicator,data_gap) |> 
  head(5) |> 
  kableExtra::kable()

Potențiale lacune de date (valori procentuale începând cu primul an la nivel de indicator):

indicator data_gap
Aplicații de design industrial, rezident, după număr -0,82
Terenuri agricole irigate (% din totalul terenurilor agricole) -0,71
Capitalizarea bursieră a companiilor autohtone listate (dolari SUA curenti) -0,54
Cereri de brevet, rezidenți -0,53
Copii ocupați, studii și muncă, femei (% dintre copii de sex feminin ocupați, cu vârste cuprinse între 7-14) -0,38

La nivel de indicator, aproximativ 1/5 dintre indicatori au un „decalaj de date” de peste zece puncte procentuale. Dacă aceasta pare a fi o întrerupere arbitrară, este. Ideea principală este de a evidenția cele mai „neobișnuite” lacune de date care ar putea spune ceva despre disponibilitatea datelor. De exemplu, în evaluarea noastră completă, am definit un „decalaj de date” ca fiind cu două abateri standard mai mici decât media egală.

De asemenea, este important să rețineți că există o serie de motive pentru care ar putea apărea o „lacună de date” în această evaluare. De exemplu, unii indicatori ar putea fi mai puțin relevanți pentru Tanzania, deci nu sunt colectați . Sau poate că metodologia lor de colectare și raportare nu se potrivește cerințelor de a fi incluse în baza de date care face obiectul anchetei (în acest caz Banca Mondială). De asemenea, evaluarea nu spune nimic despre acuratețea, actualitatea, sensibilitatea sau granularitatea datelor disponibile.

Reflectând acest lucru, am ales să raportăm lipsurile de date la nivel de subiect. Făcând mai clar faptul că orice „lacune de date” trebuie să fie indicativ de unde datele pot fi dificil de găsit la construirea indexului. Codul de mai jos demonstrează abordarea de bază folosind subiectul unui indicator:

Estimarea lipsurilor de date la nivel de subiect:

#estimate the average data gap by topic
sum_dta_benchmarking_by_topic <- sum_dta_benchmarking_by_indic |> 
  left_join(ref_dta_topics) |> 
  group_by(topic) |> 
  summarize(avg_data_gap=mean(data_gap) |> round(2))

#merge with data gaps estimated via missing values
sum_dta_benchmarking_by_topic<-sum_dta_benchmarking_by_topic |> left_join(sum_na_bechmarking |> select(topic,na_data_gap))

#view top ten 'data gaps' by topic
  sum_dta_benchmarking_by_topic |> 
    arrange(avg_data_gap) |> 
    head(5) |> 
    kableExtra::kable()

Potențiale lacune de date (valori procentuale începând cu primul an la nivel de subiect):

subiect avg_data_gap na_data_gap
Infrastructură -0,25 -0,10
Știință și tehnologie -0,24 0,01
Agricultură și dezvoltare rurală -0,17 0,00
Sectorul financiar -0,16 -0,05
Dezvoltare socială -0,12 -0,04

Pe baza evaluării la nivel de subiect pe țară și indicator (avg_data_gap), se pare că există probabil lacune de date pentru infrastructură, știință și tehnologie, agricultură și dezvoltare rurală.5 Sugerând că ar putea fi necesar un efort suplimentar pentru a furniza date în aceste zone sau pentru a găsi variabile proxy adecvate pentru a evita ca acest lucru să devină un punct orb al indexului final.

În cazul nostru, exact așa am interpretat rezultatele: ne-a determinat să dedicăm mult mai mult timp identificând surse de date suplimentare pentru a ajuta la completarea acestor lacune și să solicităm contribuții directe de la părțile interesate despre unde să căutăm. Dar, rezultatele au fost utile și dincolo de aceasta: lacunele identificate fiind o contribuție utilă în discuțiile de advocacy a datelor purtate cu factorii de decizie. Datorită analizei care indică țării vizate unde ar trebui concentrat efortul pentru a-și ajunge din urmă colegii.

Acesta este, mai mult sau mai puțin, motivul pentru care există acest blog: identificarea lacunelor de date și lobby-ul pentru ca acestea să fie umplute au format fundalul aproape tuturor proiectelor de analiză în care am fost implicat. Așa că data viitoare te trezești să te uiți la un proiect. care ar beneficia de mai multe date, luați în considerare metodologia noastră din spatele plicului pentru o învârtire (și anunțați-ne cum ați îmbunătățit-o pe parcurs!).

O notă cum AI a fost folosit: Majoritatea acestei postări și cod au fost produse de autor. Au fost folosite instrumente AI pentru a critica metodologia și pentru a sugera abordări alternative pentru comunicarea unor idei prezentate în postare.

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.