[1] 4
[1] 3.333333
[1] 5
Sociologisk metod och analys 15 hp
R är ett öppet, gratis och kraftfullt verktyg för statistisk analys, datahantering och visualisering.
Varför inte SPSS eller Excel?
R är mer flexibelt, gratis och går att reproducera. R samlar alla typer av analysmetoder som man kan tänkas behöva använda. Kod kan delas och återanvändas – vilket är argument nog…
R-studio är ett så kallat “interface” till R som kom 2011 och som underlättar arbetet och användarvändligheten med R avsevärt.
Om vi gör liknelsen med en bil så kan R kan ses som motorn medan R-studio är själva instrumentpanelen. Vi behöver egentligen aldrig ge oss in i motorrummet (dvs. du behöver inte öppna R-programvaran från datorn) utan vi gör alla manövrar från R-studio.
R-studio är uppdelat i 4 olika fönster.
Skriptpanelen - här skriver du skript (kod) som du kan spara och redigera. Här kommer du att bedriva mest tid under workshoparna.
Konsollen - här kan du köra kod/kommandon som inte sparas. Här genomförs den kod som du kör från skriptpanelen. Här dyker även felmeddelanden och annan information upp.
“Environment” - fönstret där du återfinner dina objekt, data som du importerat eller skapat i R.
Hjälpfönster - som visar filer som du har i din R-mapp, figurer och grafer som du skapat etc.
Notera att första gången du öppnar R-studio så kommer inte att skriptpanelen vara öppen, den öppnas när du skapar ett nytt skript.
Allt som görs i R baseras på kod. Koden ger instruktioner till R ska behandla, analysera och förändra din data.
Kod kan skrivas i två av fönstrena i R-studio: Skriptpanelen och Konsollen. Den senare är användbar för snabbt genomförande av olika beräkningar eller kommandon som du inte vill spara för senare bruk. I skriptpanelen skapar du ett textdokument som sparas bland dina filer, du kan därför spara det som ett vanligt dokument som kan stängas, öppnas och redigeras.
✏️ Övning:
Testa att skriva 2+2 i konsollen och tryck ENTER.
Konsollen kan alltså fungera ungefär som en avancerad miniräknare. Testa att skriva:
✏️ Detta är fler saker som du kan testa att skriva i konsollen:
pi #[enter] "What's pi?"
23 * 2 #[enter] "what's 23 times 2?"
10 / 2 #[enter] "What's 10 over 2?"
1 < 2 #[enter] "Is 1 smaller than 2?"
2 < 1
1 < 1
1 <= 1 #[enter] "Is 1 smaller or equal to 1?"
2 == 1 + 1 #[enter] "Is 1 equal to 1 + 1?"
2 == 2 + 1
2 != 2 + 1 #[enter] "Is 2 different to 2 + 1?"
2 != 2
1 : 10 #[enter] "What is (1 to 10) ?"
c(1,2) + c(0,1) #[enter] "What's (1 and 2) + (0 and 1)?"
min(c(1, 2)) #[enter] "What's the minimum of (1 and 2)?"
max(c(1, 2))
mean(c(1, 2)) #[enter] "What's the mean of (1 and 2)?"
mean(0 : 1000) #[enter] "What's the mean of (0 to 1000)?"Att köra skript i konsollen är som sagt en snabb och smidig funktion men i de allra flesta fall så är det en fördel att arbeta med kod i ett R-skript. Anledningen är att du då skapar en (text)fil som du kan spara och sedan öppna och köra igen eller bearbeta.
För att skapa ett nytt R-skript i Rstudio så trycker du Ctrl/Cmd+Shift+N eller går via menyn File -> New File -> R Script. Detta öppnar ett nytt fönster i skript panelen och du kan nu börja skriva din kod.
Viktiga funktioner i R-skript
#
När du skriver ett skript så kan du använda hashtaggen för att lägga till kommentarer. En # före en rad kod innebär att texten inte är “aktiv” och kommer därför inte att medföra någon aktion från R.
Kod som skrivs i ett R-skript exekuteras, dvs. genomförs, när du står på samma rad som din kod och trycker Ctrl + Enter.
✏️ Övning: Skapa ditt första skript
Gör följande:
Öppna ett nytt skript via menyn eller med hjälp av snabbkommandot.
Överst i skriptet lägg till följande text:
# Detta är mitt första R-skript
Spara skriptet genom att trycka på Spara ikonen i menyn eller Ctrl + S. Namnge skriptet. Skriptet kommer nu att sparas i din projektmapp som en fil med filändelsen .R
Nu kan vi börja fylla på med innehåll i skriptet och se till att det vi gör alltid sparas…
Testa inledningsvis följande:
I ett R-skrip så exekuteras (körs) kod genom att du står i aktiv rad och trycker Ctrl + Enter.
Testa detta med raden ovan.
R levereras med en mängd funktioner, men dessa kan naturligtvis inte täcka allt du kan tänkas vilja göra med dina data. Det är här paket kommer in i bilden. Paket är samlingar av funktioner och dataset som lägger till nya funktioner och möjligheter i R.
Det första vi ska göra är därför att installera olika paket (packages) som vi kommer att jobba med. Ett paket är centralt för mycket av de vi ska göra:
tidyverse() - ett samlingspaket med mass olika funktioner för datahantering och analys av data.
Efter att du har installerat paketen är du fortfarande inte helt klar. Paketet kan ha installerats, men dess funktioner blir inte tillgängliga förrän du laddar det. Medan installationen enbart behöver göras en gång så behöver du ladda paketen varje gång du startar en ny R-session. Detta görs med en enkel kodrad med funktionen library(), och det är rekommendarat att du placerar detta högst upp i dina skript. Vi kan bygga vidare vårt skript med dessa rader kod.
Aktivera paket:
! Notera att jag satte en # före install-funktionerna. Detta för att undvika köra installationen i onödan…
<- är “assignment” operatorn. (Snabbkomando: “Alt” + “-”)
Assignment operatorn skapar objekt som sparas i “environment” fönstret.
Testa skriv följande i ditt skript:
Vilket betyder: “Skapa ett objekt med namnet mitt_nummer och ge det värdet 1. Skapa sedan ett annat objekt med namnet ditt_nummer och ge det värdet 9. Multiplicera sedan dessa objekt med varandra”.
%>% kallas “pipe” operatorn, men betyder helt enkelt “gör också detta” eller “och sedan”. En pipe väver ihop olika kommandon i R. (Snabbkomando: “Shift” + Ctrl” + “M”). Detta gör (vilket kommer blir tydlig i senare exempel) att man kan bygga samman flera olika avancerade funktioner i samma kodsträng.
Mycket av kodningen i R bygger på användandet av olika funktioner. Några av de viktigaste är baserade på olika verb som berättar för R vad vi vill göra med data.
För att testa några av dessa funktioner ska vi inledningsvis använda oss av ett dataset som finns inbyggt i Tidyverse-paketet som vi laddade ovan.
I ditt skript ska du nu skapa ett objekt som heter my_starwars. Om tidyverse är laddat gör du detta med helt enkelt genom att skriva:
När du kört detta skript kommer du att ha ett nytt objekt i ditt environment fönster med namnet “my_starwars”.
När vi nu har ett objekt med data så finns det ett par funktioner i R som ger oss en snabb överblick över datasetet.
Rows: 87
Columns: 14
$ name <chr> "Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Leia Or…
$ height <int> 172, 167, 96, 202, 150, 178, 165, 97, 183, 182, 188, 180, 2…
$ mass <dbl> 77.0, 75.0, 32.0, 136.0, 49.0, 120.0, 75.0, 32.0, 84.0, 77.…
$ hair_color <chr> "blond", NA, NA, "none", "brown", "brown, grey", "brown", N…
$ skin_color <chr> "fair", "gold", "white, blue", "white", "light", "light", "…
$ eye_color <chr> "blue", "yellow", "red", "yellow", "brown", "blue", "blue",…
$ birth_year <dbl> 19.0, 112.0, 33.0, 41.9, 19.0, 52.0, 47.0, NA, 24.0, 57.0, …
$ sex <chr> "male", "none", "none", "male", "female", "male", "female",…
$ gender <chr> "masculine", "masculine", "masculine", "masculine", "femini…
$ homeworld <chr> "Tatooine", "Tatooine", "Naboo", "Tatooine", "Alderaan", "T…
$ species <chr> "Human", "Droid", "Droid", "Human", "Human", "Human", "Huma…
$ films <list> <"A New Hope", "The Empire Strikes Back", "Return of the J…
$ vehicles <list> <"Snowspeeder", "Imperial Speeder Bike">, <>, <>, <>, "Imp…
$ starships <list> <"X-wing", "Imperial shuttle">, <>, <>, "TIE Advanced x1",…
Vi kan konstatera att datasetet består av 87 (rader) individer - eller snarare karaktärer i de olika Starwars-filmerna - och 14 variabler av olika typ.
Med filter-funktionen så kan du filtrera ut rader som du vill behålla i din data utifrån villkor. Villkoren uttrycks med “Logical operators” och “Relational operators”
Några exempel på filter-funktionen:
Säga att vi vill filtrera ut alla individer som är längre än 200cm med filter-funktionen:
# Filtrera ut enbart de som är längre än 200 cm
my_starwars %>% # utgå från mitt data objekt, och sen...
filter(height > 200) # filtrera alla individer längre än 200Låt säga att vi vill filtrera alla som är längre än 200 cm och med hårfärgen brun, vi skriver:
Select-funktionen används för att filtrera ut de kolumner, dvs. variabler, som du vill behålla. Vi tar ett exempel.
Utifrån vårt dataset så vill vi nu skapa ett nytt objekt (data). Detta dataset ska enbart innehålla variablerna “name”, “height”, “eye_color” och “species”. Vi skriver:
small_starwars <- my_starwars %>%
select(name, height, eye_color, species)
# ni får nu ett nytt objekt i
# med lika många rader som i my_starwars,
# men med enbart 4 variabler.
# Vi kan såklart även kombinera select()
# och filter() funktionen i samma skript.
even_smaller_starwars <- my_starwars %>%
select(name, height, eye_color, species) %>%
filter(height > 200, eye_color == "blue")Än så länge har vi enbart gjort ändringar i data genom att filtrera rader och/eller kolumner. Men man vill ju ofta addera information eller skapa nya variabler. Då kan vi använda funktionen mutate(). Mutate skapar helt enkelt en ny kolumn i vårt dataset (alt. omvandlar en existerande kolumn, men detta rekommenderas ej).
# Följande skript skapar inom ramen för mutate funktionen
# 2 nya variabler, tall_figures och short_figures
# med värdena TRUE eller FALSE
recoded_starwars <- my_starwars %>%
mutate(
tall_figures = height >= 220,
short_figures = height <= 80
)
# Vi kan också skapa en variabel med olika kategorier
# här kombinerar vi mutate() med funktionen case_when()
recoded_starwars <- my_starwars %>%
mutate(height_type = case_when(
height <= 80 ~ "short_figures",
height >= 220 ~ "tall_figures",
TRUE ~ "medium_figures"
))summarise() är en funktion för att summera data i vårt dataset. Den skapar helt enkelt en ny tabell där varje rad är en sammanfattning av en grupp (se nedan i kombination med group_by) eller hela datasetet.
group_by funktionen används för att gruppera rader i ett dataset efter en eller flera variabler, så att du sedan kan göra beräkningar per grupp i stället för på hela datasetet. Group_by säger helt enkelt till R:
”Dela upp datan i mindre grupper baserat på variablerna jag anger — men ändra inte datan än. Förbered det för att en sammanfattning eller beräkning ska göras per grupp.” Ingen ändring av data sker alltså förrän du anger vad du vill göra härnäst.
Säg att vi vill undersöka om det finns skillnader i genomsnittlig längd mellan olika kön i vår data.
my_starwars %>%
group_by(gender) %>%
summarise(
n = n(),
mean_height = mean(height, na.rm = TRUE),
median_height = median(height, na.rm = TRUE)
)Vi kan också använda group_by funktionen i kombination med mutate() för att skapa nya variabler.
R har det mest mångsidiga programmet för datavisualisationer ggplot() (en del av Tidyverse paketet)
För att skapa ggplot figurer/grafer/diagram så behöver man ange 3 saker:
Vi kan stegvis skapa ett ggplot() objekt:
Vi kanske även vill visualisera något baserat på som vi gör. Låt säga medellängd per variabeln sex. Vi kan göra på följande sätt:
# Vi skapar först ett objekt med de värden som vi vill använda
# i vår figur.
height_sex <- my_starwars %>%
group_by(sex) %>%
summarise(mean_height = mean(height, na.rm = TRUE)) %>%
ungroup()
# Vi använde sedan detta objekt för vår figur
ggplot(data = height_sex,
aes(x = sex, y = mean_height, fill = sex)
) +
geom_col()Varför inte en boxplot där vi kikar på längd utifrån variabeln gender: