Skip to Tutorial Content

Mål og forberedelser

Denne arbeidsboken har oppgaver knyttet til hvordan man jobber med data i R. Før du løser dette oppgavesettet anbefales det å du jobber deg igjennom Arbeidsbok 2: Data i R.

Oppgavesett 1

Datene vi skal jobbe med i dette oppgavesettet er kompilert fra følgende nettside https://www.scimagojr.com/countryrank.php, og disse dataene inneholder en ranking av ulike lands akademiske produksjon.

Datasettet heter coutry_ranking. I dette datasettet er det registrert data på akademisk ranking, publiserte artikler og siteringer på et land for hvert år fra 1996. Det vil si at en observasjonsenhet er et land i et år. Dette kaller man ofte for land-år-data. Datasettet består av 3847 observasjoner (land-år) og 7 variabler. Datasettet består av følgende variabler:

  • country: land
  • rank: numerisk verdi som rangerer landets akademiske rank ift andre land for et gitt år
  • region: hvilken region landet befinner seg i (verdensdel)
  • citations: hvor mange forskningsartikler fra det gitte landet har blitt sitert for et gitt år
  • citations_per_document: hvor mange siteringer per forskningsartikler for et land i et gitt år
  • year: årstall
  • index: Dette er en variabel som måler en forskers “vitenskapelig publisering og innflytelse i faglitteraturen.” Tallet beregnes ut fra antall publiserte arbeider og det antall ganger hvert arbeid er sitert

Laste inn data

Last in dataene ved hjelp av følgende url: https://raw.githubusercontent.com/louisabo/Data-For-Teaching/main/country_scientific_ranking.csv. Kall datasettet country_ranking. Husk at koden for å laste inn data er read.csv() og denne koden tar en url i hermetegn som argument.

country_ranking <- read.csv("https://raw.githubusercontent.com/louisabo/Data-For-Teaching/main/country_scientific_ranking.csv")

Laste inn pakker

I de neste oppgavene skal vi bruke noen av funksjonene i pakken dplyr. For å kunne bruke disse må vi først laste inn pakken fra biblioteket.

Bruk koden library() for å laste inn pakken dplyr.
library(dplyr)

Oversikt over data

Nå som vi har pakken vi trenger og datasettet er lastet inn kan vi begynne med å få litt oversikt over datasettet. Husk at datasettet heter country_ranking. Vi kan begynne med koden head()

Bruk head() til å få oversikt over de første radene i datasettet.
head(country_ranking)

Når du bruker head er det lett å se hva observasjonsenheten i datasettet er. I dette datasettet er det registrert data på akademisk ranking, publiserte artikler og siteringer på et land for hvert år fra 1996. Det vil si at en observasjonsenhet er et land i et år. Dette kaller man ofte for land-år-data.

Bruk koden summary() for å hente ut mer informasjon om variablene i datasettet country_ranking.

summary(country_ranking)

Her ser du oversikt over høyeste og laveste verdi for hver variabel, gjennomsnitt, og median. Du får også oversikt over hvilken klasse alle variablene har. Merk at med funksjonen summary() får du også oversikt over hva variablene heter. En annen funksjon som gir deg navnene på alle variablene i et datasett er names(). names() tar et datasett som sitt argument.

Bruk names() for å få opp variabelnavnene i datasettet country_ranking.

names(country_ranking)

Nå som du har litt oversikt skal vi se videre på datasettet. Og bruke tid på hva hver enkel variabel består av.

Oversikt over variablenes klasser

Bruk class() til å finne klassen til variabelen year i datasettet country_ranking.

class(country_ranking$year)

Integer er hele tall og er en kontinuerlig eller numerisk variabel.

Bruk class() til å finne klassen til variabelen Country i datasettet country_ranking?

class(country_ranking$Country)

Bruk class() til å finne klassen til variabelen Citations i datasettet country_ranking.

class(country_ranking$Citations)

Nå har vi sett litt på klassene til de ulike variablene også. Merk at klassen integer er numerisk, men består kun av heltall og ikke desimaltall. Klassen numeric i R består av desimaltall.

Husk at for å få oversikt over klassen på alle variabelene i et datasett så kan du bruke funksjonen str() og summary(). Vi skal se litt nærmere på noen av variablene i datasettet i neste seksjon.

Beskrivende statistikk

Før vi går videre så printer vi alle variabel-navnene igjen:

names(country_ranking)
## [1] "Country"                "Rank"                   "Region"                
## [4] "Citations"              "Citations_per_document" "year"                  
## [7] "Index"

Vi kan bruke funksjonen table() til å printe en tabell som viser oss fordelingen av observasjoner på hver kategori i variabelen.

Bruk table() for å printe en oversikt over variabelen Country i datasettet country_ranking. Tabellen skal ikke inneholde missingverdier.

table(country_ranking$Country)

Her får du en lang liste med land og 24. Det betyr at hvert land er listet som en rad i datasettet 24 ganger. Hvorfor er de listet 24 ganger? Det gir kanskje mer mening når vi ser nærmere på variabelen year.

Bruk table() for å printe en oversikt over variabelen year i datasettet country_ranking. Tabellen skal ikke inneholde missingverdier.

table(country_ranking$year)

Her ser du at vi får opp årstall og antall observasjoner i hvert år. Hver av disse observasjonene er land. I forrige tabell fikk vi opp 24 under hvert land. For å gjøre det enda mer tydelig:

Regn ut 2020-1996 i R.

2020-1996

Her får du opp 24. Nå er det kanskje mer tydelig hva et land-år er. Observasjonsenheten i dette datasettet er som sagt et land i et år. Vi har altså data for Norge i alle år fra 1996 til og med 2019, derfor når du printer en tabell med land så får du opp et land og 24. Noen land er ikke registrert i f.eks 1997, da vil disse landene bare være med i 23 år, som betyr at vi bare “observerer dem” 23 ganger i vårt datasett.

En annen nyttig funksjon er range(). Denne viser spennet på en variabel. Hvis en variabel er numerisk og består av tall fra 0-1000 kan det være fint å vite at spennet er så stort.

Bruk range() til å finne ut hva spennet til variabelen Citations i datasettet country_ranking er.

range(country_ranking$Citations)

Her ser du at minste antall siteringer for et land i et år er 0, mens maks er 5257180!

Bruk range() til å finne ut hva spennet til variabelen Citations_per_document i datasettet country_ranking er.

range(country_ranking$Citations_per_document)

Her ser man at siteringer per dokument går fra 0 til 133.96.

La oss jobbe videre med å se på enda litt mer beskrivende statistikk.

Bruk mean() til å finne gjennomsnittet til variabelen Citations i datasettet country_ranking.

mean(country_ranking$Citations)

Når du leser gjennomsnittet kan det være lurt å si hva det faktisk er til deg selv – hva det betyr substansielt. Her ser vi at gjennomsnittlig antall siteringer er 201.156. Det vil si at gjennomsnittelig antall siteringer for et land-år er 201.156 siteringer.

Bruk mean() til å finne gjennomsnittet til variabelen Citations_per_document i datasettet country_ranking.

mean(country_ranking$Citations_per_document)

Igjen, det kan være lurt å formulere en setning om hva gjennomsnittet faktisk betyr. Her ser vi at gjennomsnittet av siteringer per dokument (eller forskningsartikkel om du vil) er ca. 18 siteringer for en land-år-observasjon.

I dette datasettet er det også en variabel som heter Index. Dette er en variabel som måler en forskers “vitenskapelig publisering og innflytelse i faglitteraturen. Tallet beregnes ut fra antall publiserte arbeider og det antall ganger hvert arbeid er sitert.”

Bruk range() til å finne spennet til variabelen Index i datasettet country_ranking.

range(country_ranking$Index)

Bruk mean() til å finne gjennomsnittet til variabelen Index i datasettet country_ranking.

mean(country_ranking$Index)

Plotting – Univariat beskrivelse

Vi ønsker å få mer oversikt over hva dataene faktisk betyr. Vi vil sammenligne land med hverandre. Hvilke land er det som gjør det best akademisk? Og hvilke land har gjort det bra over tid? Nå skal du vise dette grafisk ved hjelp av funksjonen ggplot(). Først må du laste inn pakken.

Last inn pakken ggplot2 ved hjelp av library().

library(ggplot2)

Lag et barplot av variabelen Region for å se hvordan land er fordelt i regioner i datasettet country_ranking.

ggplot(country_ranking, aes(x = Region)) + 
  geom_bar()

Kanskje ikke den beste inndelingen av land? Uansett, ved hjelp av plotting er det lettere å se hvordan dataene ser ut.

geom_density() viser fordelingen til en numerisk variabel.

Bruk geom_density() for å se fordelingen av variabelen Index i datasettet country_ranking.

ggplot(country_ranking, aes(x = Index)) + 
  geom_density()

Bruk geom_boxplot() til å få oversikt over variabelen Citations_per_document i datasettet country_ranking.

ggplot(country_ranking, aes(x = Citations_per_document)) + 
  geom_boxplot()

Den siste delen av dette oppgavesettet viser hvordan vi kan lage plots som ser bedre ut. Når vi jobber med ggplot() legger vi til flere argumenter med + og skrive flere argumenter. Akkurat som dette:

Her har jeg lagt på flere arugmenter for å vise hvordan vi kan ‘pimpe’ plottene våre. Hvis du vil f.eks endre hva det står på X-aksen (se plottet du lagde over, der står navnet på variabelen “Citations_per_document”, det er default) kan du bruke koden xlab() eller y-aksen ylab(). Når du skal skrive nytt navn må du bruke anførseslstegn som dette: xlab("Det som skal stå på x-aksen"). Hvis du ikke vil ha noen ting på f.eks y-aksen kan du la den stå tom ved å bruke koden ylab(""). Dvs ved å ikke sette noe mellom anførselstegnene. Du kan også fjerne aksene ved hjelp av koden scale_y_discrete() for y-aksen og scale_x_discrete() for x-aksen.

ggplot(country_ranking, aes(x = Citations_per_document)) + # Her spesifiserer vi data og variabel
  geom_boxplot() + # Her kommer geom-argumentet vårt 
  xlab("Siteringer per dokument") + # Endrer tittel på x-aksien)
  ggtitle("Eksempel på plot med justeringer") + # Legger til tittel
  scale_y_discrete() # Fjerner y-aksen

Merk det + som skiller lagene fra hverandre. ggplot

Lag et boxplot av variabelen Citations_per_document i datasettet country_ranking. I plottet skal du først legge til en ny tittel på x-aksen som er “Citations per research article” før du fjerner y-aksen fra plottet.

ggplot(country_ranking, aes(x = Citations_per_document)) + 
  geom_boxplot() + 
  xlab("Citations per research article") + 
  scale_y_discrete() 
# Husk at koden for å fjerne y-aksen er scale_y_discrete(). Legg på flere argumenter med +. Vær også oppmerksom på at når du endrer tittel  må det stå i hermetegn.

Oppgavesett 2

I dette oppgavesettet skal vi jobbe med data fra Verdensbanken. Dataene ser på andelen av befolkningen i et land som lever under fattigdomsgrensen (povery head count ratio - PHR). Dataene er fra 2008. Vi skal se på et utvalg av asiatiske land. Nedenfor ser du en oversikt over de 9 ulike asiatiske landene og hvor stor andel av befolkningen som lever under fattigdomsgrensen. Datasettet heter PHR og består av to variabler – land og phr. Datasette ser slik ut:

Klasse

Bruk class() til å finne målenivået til variabelen phr (poverty head count ration/fattigdomsrate).
class(PHR$phr)
Bruk class() til å finne målenivået til variabelen land?
class(PHR$land)

Beskrivende statistikk

Bruk mean() til å finne den gjennomsnittelige fattigdomsraten.
mean(PHR$phr)
Bruk sd() til å finne standardavviket til variabelen phr.
sd(PHR$phr)
Bruk summary() til å få oversikt over variablen phr.
summary(PHR$phr)

Her ser du oversikt over hele variabelen phr. Som du ser er den laveste fattigdomsraten 0.35 % av befolkningen, mens det høyeste fattigdomsraten er 55.83 % av befolkningen.

Fremstilling av data

En fin måte å forstå data på er vise det grafisk. Bruk ggplot() til å lage et histogram av variabelen phr. Vi skal plotte hvert land og deres respektive phr for å sammenligne dem. Under brukes koden geom_col(). Denne koden gjør det mulig å spesifisere to variabler i plottet, en x-variabel og en y-variabel. Den første kodelinjen i ggplot() tar to argumenter, 1) først spesifiserer du hvilket datasett du skal hente variablen(e) du ønsker å vise frem fra, i vårt tilfelle heter datasettet PHR. 2) aes() som spør oss hvilke variabler vi ønsker å fremstille, vi kan spesifisere enten bare én x-variabel (dvs at vi bare fremstiller en variabel), eller så kan vi spesifisere én x-variabel og én y-variabel slik som i eksempelet nedenfor.

ggplot(PHR, aes(x=phr, y=land)) + 
  geom_col()

Legg til en ny tittel på y-aksen i plottet ovenfor. Y-aksen skal være titulert “Land”. Tips: kopier koden fra forrige svar og legg til tittel på y-aksen

ggplot(PHR, aes(x=phr, y=land)) + 
  geom_col()+
  ylab("Land")
# Husk at bokstaver skal i hermetegn og at koden for å legge på tittel på y-aksen er ylab() og for x-aksen xlab().

Legg til en ny tittel på x-aksen i plottet ovenfor. x-aksen skal være titulert “Andel av befolkningen som lever under fattigdomsgrensen” Tips: kopier koden fra forrige svar og legg til tittel på x-aksen.

ggplot(PHR, aes(x=phr, y=land)) + 
  geom_col()+
  ylab("Land")+
  xlab("Andel av befolkningen som lever under fattigdomsgrensen")
# Husk at bokstaver skal i hermetegn og at koden for å legge på tittel på y-aksen er ylab() og for x-aksen xlab().

Legg til en tittel på plottet som er “Poverty headcount ratio”. Koden er ggtitle() og tittelen må som ellers skrives i hermetegn.

ggplot(data= PHR, aes(x=phr, y=land)) + 
  geom_col()+
  ylab("Land")+
  xlab("Andel av befolkningen som lever under fattigdomsgrensen") +
  ggtitle("Poverty headcount ratio")
# Husk at du legger til flere kodesnutter med + når du bruker ggplot.

I koden geom_col() kan du legge til et argument som er color="" og et som er fill="". Mellom hermetegnene kan du skrive en farge, f.eks “blue”, “red”, “green”, “yello”, “orange”, “purple”, “violet” osv. Med koden color="" enderer du fargen rundt stolpene, mens med fill="" endrer du fargen i stolpene.

Legg til argumentet color="" og skriv inn fargen blue

ggplot(data= PHR, aes(x=phr, y=land)) + 
  geom_col(color = "blue")+
  ylab("Land")+
  xlab("Andel av befolkningen som lever under fattigdomsgrensen") +
  ggtitle("Poverty headcount ratio")
# Husk ak argumentet skal legges til inni geom_col() siden det er det visuelle du endrer fargen på, i dette tilfellet stolpene.

Bruk koden fill="" til å endre fargen også inni stolpene til blå

ggplot(data= PHR, aes(x=phr, y=land)) + 
  geom_col(color = "blue", fill = "blue")+
  ylab("Land")+
  xlab("Andel av befolkningen som lever under fattigdomsgrensen") +
  ggtitle("Poverty headcount ratio")

Filtrere ut data

Her skal vi bruke koden filter() til å filtrere ut observasjoner med spesifikke verdier. For mer informasjon om hvordan du bruker koden gå tilbake til arbeidsbok 2.

Et eksempel er at vi spør R om å filtrer ut land med større filter(>) phr enn f.eks 20. Det som er viktig å huske på her er at vi må passe på at variabelene vi filtrer på er numeriske dersom vi oppgir f.eks tallverdier.

Et eksempel på hvordan bruke filter er som følger:

filter(PHR, phr > 30)

R vil da vise de landene som har en PHR-verdi større enn 30. Koden følger argumentet data først som heter PHR og deretter variabelen vi ønsker å filtrere på. Vi kan også skrive koden på følgende måte:

PHR %>% 
  filter(phr > 30)

Begge kodene gjør akkurat det samme. Jeg anbefaler alle til å jobbe med den nederste måten hvor man bruker %>% (eller en pipe som det heter). Koden gir en pipe inn i datasettet PHR og sier at inni dette datasettet så vil jeg filtrere ut alle verdier som har større verdier enn 30 på variabelen phr.

I resten av oppgavene du skal du filtrere ut observasjoner. Du får kun rett om du bruker %>% og skriver koden med pipe.

Filtrer ut alle land som har mindre phr enn 10.

PHR %>% 
  filter(phr < 10)

Filtrer ut land som har større phr enn 10-

PHR %>% 
  filter(phr > 10)
Filtrer ut land som har større eller phr lik 50
PHR %>% 
  filter(phr >= 50)
Filtrer ut land som har mindre eller phr lik 50
PHR %>% 
  filter(phr <= 50)

Ofte når vi bruker filter() vil vi telle observasjonene. I dette datasettet er det ikke så mange observasjoner. Men senere vil dere se datasett med mange mange fler observasjoner. I R kan du bygge opp kode på følgende måte vha av %>% (eller piper).

PHR %>% 
  filter(phr <= 50) %>% 
  count()

Når vi bruker count() etter filter vil R telle hvor mange observasjoner som blir filtrert ut på den variabelen du filtrer på. Dette skal vi se mer på i oppgavesett 2.2 hvor vi skal filtrere, telle og plotte data.

Oppgavesett 3

En naturlig tanke er at yngre bruker mye mer internett enn eldre. Men stemmer det? Er det slik at personer som bruker mye tid på internett har mer eller mindre tillit til politikere? Hvordan henger tillit sammen med utdanning? Dette og mer skal du finne ut av gjennom å se nærmere på datasettet internett.

I denne arbeidsboken skal vi jobbe videre med regning og filtrering av data.

Data

Det neste vi skal gjøre er å laste inn datasettet vi skal jobbe med i dette oppgavesettet. Datasettet heter internett, og omhandler internettbruken til italienere. Det består av et utvalg variabler hentet fra European Social Survey, Round 9 (2018). Enhetene er italienske statsborgere, og samlet inneholder datasettet 2745 observasjoner og 5 variabler. Vi skal undersøke sammenhengen mellom internettbruk, alder, kjønn, utdanning og tillit.

I dette datasettet måles:

  • internettbruk på en skala fra 1-5 hvor fem er høyest og 1 er minst

  • alder er i antall år

  • kjonn er dikotom (1 = menn, 2 = kvinner)

  • utdanning er antall år med fullført utdanning

  • tillit (til politikere) måles på en skala fra 0-10 hvor 10 er høy tillit og 0 er ingen tillit.

Oversikt over data

Bruk names() til å se på variabel-navnene i datasettet internett.
names(internett)
Bruk summary() til å hente ut mer informasjon om variablene i datasettet internett.
summary(internett)

Vi er interessert i å bli bedre kjent med utvalget – altså respondentene i undersøkelsen. Husk at dette utvalget skal være representativt for den italienske befolkningen, det kan derfor være fint å begynne med å se på litt deskriptiv statistikk.

Gjennomsnitt

Bruk mean() til å finne gjennomsnittet til variabelen alder i datasettet internett.
mean(internett$alder)
Bruk mean() til å finne gjennomsnittet til variabelen utdanning i datasettet internett.
mean(internett$utdanning)
Bruk mean() til å finne gjennomsnittet til variabelen tillit i datasettet internett.
mean(internett$tillit)
Bruk mean() til å finne gjennomsnittet til variabelen internettbruk i datasettet internett.
mean(internett$internettbruk)

Standardavvik

Standardavviket er det gjennomsnittelige avviket fra gjennomsnittet. Det høres mer komplisert ut enn det er. Poenget er at det gir en indikasjon av hver enkelt observasjons avvik fra gjennomsnittet.

Bruk sd() til å finne standardavviket til variabelen alder i datasettet internett.

sd(internett$alder)

Bruk sd() til å finne standardavviket til variabelen utdanning i datasettet internett.

sd(internett$utdanning)

Bruk sd() til å finne standardavviket til variabelen tillit i datasettet internett.

sd(internett$tillit)
Bruk sd() til å finne standardavviket til variabelen internettbruk i datasettet internett.
sd(internett$internettbruk)

Filter og count

Vi skal se litt nærmere på noen av observasjonene i datasettet vårt internett. I dette datsettet er det mange observasjoner. Noen ganger er vi interessert å se på data for enkeltgrupper i befolkningen. For eksempel så kan vi ønsker å undersøke dataen for kvinner, de over 80 år eller de under 45 år. Vi kan med andre ord være interessert i deler av utvalget vårt. I R kan vi enkelt hente ut data for disse undergruppene. Det gjør viv et hjelp av filtrering. Funksjonen vi skal bruker heter filter() og ligger i pakken dplyr. Her skal du filtrere ut observasjoner basert på spesifikke verdier på variable.

Vi har installert dplyr tidligere, men vi må laste den inn ved hjelp av library før vi kan bruke funksjonen filter().

Bruk koden library() for å laste inn pakken dplyr fra biblioteket.

library(dplyr)

Bruk filter() og %>% til å hente ut data for alle kvinner i datasettet internett. Husk at variabelen kjonn inneholder informasjon om kjønn. Kvinner er kodet til 2 og menn er kodet som 1.

internett %>% 
  filter (kjonn == 2)
Bruk filter() og %>% til å hente ut data for alle menn i datasettet internett.
internett %>% 
  filter (kjonn == 1)

Gjennom å legge til en til %>% etterfulgt av koden count() teller R hvor mange observasjoner i datasett ditt som oppfyller kriteriet du ønsker å filtere på. Dersom du for eksempel vil vite hvor mange som er menn i datasettet så kan du skrive:

internett %>% 
  filter (kjonn == 1) %>% 
  count()

Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som er over 80 år. Variabelen alder inneholder informasjon om respondentenes alder.

internett %>% 
  filter (alder > 80) %>% 
  count()

Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som er under 20 år.

internett %>% 
  filter (alder < 20) %>% 
  count()

Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som svarer at de bruker veldig mye internett. Variabelen internettbruk inneholder svarene på dette spørsmålet og verdien 5 betyr at respondentene har svart “veldig mye”.

internett %>% 
  filter (internettbruk == 5) %>% 
  count()

Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som svarer at de bruker veldig lite internett. Variabelen internettbruk inneholder svarene på dette spørsmålet og verdien 1 betyr at respondentene har svart “veldig lite”.

internett %>% 
  filter (internettbruk == 1) %>% 
  count()

Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som svarer at de har ingen tillit til politikerne. Svarene på dette spørsmålet er lagret i variabelen tillit og de som har svart “ingen tillit” har verdien 0.

internett %>% 
  filter (tillit == 0) %>% 
  count()

Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som svarer at de har veldig høy tillit til politikerne. Svarene på dette spørsmålet er lagret i variabelen tillit og de som har svart “veldig høy tillit” har verdien 10.

internett %>% 
  filter (tillit == 10) %>% 
  count()
Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som har mer enn 20 år med utdanning. Variabelen som inneholder informasjon om utdanning heter utdanning.
internett %>% 
  filter (utdanning > 20) %>% 
  count()
Bruk %>%, filter() og count() til å finne ut hvor mange av observasjonene i datasettet internett som ikke har noen utdanning (0 år). Variabelen som inneholder informasjon om utdanning heter utdanning.
internett %>% 
  filter (utdanning == 0) %>% 
  count()

Neste oppgavesett

Oppgaver: Data i R

Master i statsvitenskap — R-forberedelse

Eli Sofie Baltzersen, Louisa Boulaziz, Bjørn Høyland, Eric Nilsen, Lise Rødland

8/9/2021