Figur med missing

Deskriptiv statistikk Missing ggplot2 tidyverse R

Denne posten beskriver hvordan man kan lage en figur over en variabel der man tar antall/prosent av hver kategori som også inkluderer missing.

Øyvind Bugge Solheim https://www.oyvindsolheim.com (C-REX - Center for Research on Extremism)https://www.sv.uio.no/c-rex/english/
2021-11-03

Noen ganger vil vi vise deskriptiv statistikk over alle nivåene som finnes på en variabel. Et vanlig eksempel vil i surveyer der vi har svar på et spørsmål der det har vært ulike svaralternativer. R har noen ganger for vane å “glemme” missing når vi gjør dette. Det kan være problematisk hvis det er store mengder missing eller når vi er bekymra for systematisk missing. Her kommer kode som forklarer hva man kan gjøre i slike tilfeller.

Første skritt er som vanlig å laste inn nyttige pakker. Jeg har forsøkt å bruke kun tidyverse for tilrettelgging av data og ggplot2 for å lage figuren. Jeg bruker også konsekvent pipe: %>% fordi det er lettere å lese.

Laster inn pakker

Lager et eksempeldatasett

# Vi finner på et datasett med tilfeldige tall mellom 1 og 10:
hei <-as.tibble(cbind(value=sample(c(1:10,NA),1000,replace=T)))

Omkoding

For at ggplot skal gidde å plotte missing må vi gjøre det til en variabel. Det kan vi gjøre ved å omkode variabelen til character med as.character() og så legge kalle de som er NA for “missing”.

#Vi gjør det til character:
hei$value_na <-hei$value %>%as.character()

# Vi lager en bokstavverdi for missing:
hei$value_na[is.na(hei$value)]<- "Missing"

#Hvis vi ikke gjør dette vil missing bli utelatt av ggplot

Etter at vi har gjort dette mangler det fortsatt informasjon om rekkefølgen på variabelen. Siden vi har en variabel her med 1-10 så vil 1 og 10 komme etter hverandre om ggplot bruker alfabetisk rekkefølge. For å løse dette koder vi om på nytt til en faktor og sier til R hva som er nivåene. I dette tilfelle er nivåene 1-10 og så missing.

# Vi gjør det om til en faktor slik at ggplot vet hvilken rekkefølge søylene skal være i
hei$value_na <- factor(hei$value_na,levels=c(1:10,"Missing"))

Antall per nivå

For å kunne lage en figur må vi først regne ut antallet per nivå. Dette er enkelt med tidyverse. Vi grupperer først etter nivå på variabelen og så bruker vi summarize() og n()

#plott med antall:
hei %>% #Datasettet
  group_by(value_na) %>% #Grupperer etter variabelen vi er interessert i
  summarize(Antall=n())
# A tibble: 11 x 2
   value_na Antall
   <fct>     <int>
 1 1            84
 2 2            81
 3 3           109
 4 4            98
 5 5           102
 6 6            95
 7 7            82
 8 8            90
 9 9            98
10 10           79
11 Missing      82

Da kan vi bare koble den samme koden inn i ggplot i en lang pipe rekke:

#plott med antall:
#Datasettet
hei %>% 
  #Grupperer etter variabelen vi er interessert i
  group_by(value_na) %>% 
  #oppsummerer ved å ta hvor mange det er av hver verdi av gruppa (value)
  summarize(Antall=n()) %>% # 
  #Lager et ggplot og Bruker fill for å få farger:
  ggplot(aes(x=value_na,y=Antall,fill=value_na))+
  #Stolper
  geom_col() +
  #Aksenes navn
  labs(x="Verdi",y="Antall", title= "Antall")

Prosentandel per nivå

Hvis vi ønsker å ha prosentandelen istedenfor putter vi inn en utregning av prosentandelen isteden.

hei %>% 
  #Grupperer etter variabelen vi er interessert i
  group_by(value_na) %>% 
  #oppsummerer ved å ta hvor mange det er av hver verdi av gruppa (value)
  summarize(Antall=n()) %>% # 
  #Deler på totalen slik at det blir prosent
  summarize(value_na,Antall,Prosent=Antall/sum(Antall)*100)
# A tibble: 11 x 3
   value_na Antall Prosent
   <fct>     <int>   <dbl>
 1 1            84     8.4
 2 2            81     8.1
 3 3           109    10.9
 4 4            98     9.8
 5 5           102    10.2
 6 6            95     9.5
 7 7            82     8.2
 8 8            90     9  
 9 9            98     9.8
10 10           79     7.9
11 Missing      82     8.2

Så setter vi dette inn i plottet

#Plott med prosent
hei %>% 
  #Grupperer etter variabelen vi er interessert i
  group_by(value_na) %>% 
  #oppsummerer ved å ta hvor mange det er av hver verdi av gruppa (value)
  summarize(Antall=n()) %>% # 
  #Deler på totalen slik at det blir prosent
  summarize(value_na,Antall,Prosent=Antall/sum(Antall)*100) %>% 
    #Lager et ggplot og Bruker fill for å få farger:
  ggplot(aes(x=value_na,y=Prosent,fill=value_na))+
#Stolper
    geom_col() +#Stolper
  #Sier hva aksene skal hete
  labs(x="Verdi",y="Prosent",title="Prosentandeler")#

Citation

For attribution, please cite this work as

Solheim (2021, Nov. 3). Solheim: Figur med missing. Retrieved from www.oyvindsolheim.com/code/Missing i figurer/

BibTeX citation

@misc{solheim2021figur,
  author = {Solheim, Øyvind Bugge},
  title = {Solheim: Figur med missing},
  url = {www.oyvindsolheim.com/code/Missing i figurer/},
  year = {2021}
}