Kapitel 3 Några grundläggande saker innan vi börjar.
Följande är delvis baserat boken Statistical Inference via Data Science: A ModernDive into R and the Tidyverse (Second Edition) Kapitel 1, men innehållet är något kondenserat och anpassat för våra behov på den här kursen. Jag har också försökt att göra innehållet mer kriminologiskt relevant. Vissa avsnitt är mer ordagrannt översatta. Helt i linje med gemenskapen kring R så är innehållet i boken fritt att dela, ändra och anpassa så länge vi hänvisar till den ursprungliga källan och inte gör detta i ett komersiellt syfte. Visst är det bra!
3.1 R är ett kodspråk och RStudio är ett program som fungerar genom att skriva kommandon som baseras på kodspråket R
Något du kommer att notera omgående är att R/RStudio, till skillnad från program som Excel, SPSS eller Jamovi, inte baseras på att “peka och klicka” sig fram genom olika menyval. För att göra någonting med R så behöver vi istället skriva alla våra kommandon i kod. I sin enklaste form kan vi säga att R är som en slags avancerad miniräknare. Om vi i konsolpanelen (Console) skriver exempelvis (3 * 8) + 1000
så för vi följande svar tillbaka:
## [1] 1024
Detta kan innebära en viss tröskel och avskräcker säkert många, men fördelarna är enorma då vi hela tiden kan komma ihåg hur vi har gjort en analys, och enkelt kan gå tillbaka och ändra ett tidigare steg om någonting blev fel lite längre fram. Dessutom baseras våra koder relativt ofta på statistiska formler, vilket minskar steget mellan teoriboken och det vi gör i praktiken.
Exempelvis kanske ni känner igen räta linjens ekvation från matteböckerna i gymnasiet?
Räta linjens ekvation ligger till grund för det som kallas regressionsanalys (mer om detta nedan!). En sådan regressionsanalys skrivs i R på följande sätt: lm(y ~ x, data = data)
där “lm” är ett kommando som står för “linear model”, en linjär modell och “data” anger den data som vi utför beräkningarna på. Som sagt, vi kommer gå igenom detta med funktioner och olika data mer längre ned i dokumentet, här ville vi mest peka på likheten mellan kod och formler (detta stämmer inte alltid till fullo, men för många enklare formler stämmer det ganska bra). Korrespondens mellan våra koder och vissa formler är alltså mer rättfram och därför kanske något mer intuitiv än att peka och klicka med muspekaren!
Även om en inte behöver vara en rutinerad programmerare för att använda R så finns det fortfarande ett antal grundläggande koncept som nya R-användare behöver förstå. Även o detta är en kurs i statistisk analys för kriminologer, inte en kurs i programmering, så kommer du fortfarande att alltså att behöva lkänna till några enkla och grundläggande programmeringskoncept för att kunna använda R. Vi har försökt att hålla det så enkelt som möjligt. Vi skall aldelles strax gå igenom några sådana grunder som det är bra att hålla i minnet. Men först skall vi ge ett generellt tips om ett mycket användbart sätt att lära sig att arbeta med R:
3.1.1 Kopiera, klistra in och justera-metoden:
När du lär dig ditt första programmeringsspråk eller behöver förstå särskilt komplicerad kod, är det ofta mycket lättare att ta befintlig kod som du vet fungerar och modifiera den så att den passar dina mål. Detta är i motsats till att försöka skriva ut koden själv från början. Vi kallar detta för “kopiera, klistra in och justera”-metoden.
Vi rekommenderar alltså att du inte försöker skriva kod från minnet, utan hellre tar befintliga exempel som vi har gett dig, kopierar, klistrar in och justerar dem så att de passar dina mål. När du börjar känna dig mer säker kan du sakta överge detta tillvägagångssätt och börja skriva egen kod på frihand. Tänk på metoden “kopiera, klistra in och justera” som stödhjul för ett barn som lär sig cykla. Efter att ha cyklat ett tag och blivit bekväm kommer barnet så småningomg inte att behöva stödhjulen längre, men det går mycket fortare att lära sig cykla på det viset.
Och, nu börjar vi med några användbara förkunskaper i form av en FAQ som det går bra att när som helst återvända till och titta lite i:
3.2 Vi börjar med grunderna (R Frequently Asked Questions)
R är ett teckenkänsligt språk. Detta innebär framförallt att R skiljer mellan VERSALER (STORA BOKSTÄVER) och gemener (små bokstäver). Detta är en mycket vanlig källa till felmeddelanden i R när en skriver kommandon och försöker köra sin kod. Om du stöter på problem, börja med att kontrollera stavningen i ditt kommando!
Konsolpanelen (Console): Rutan du skriver in de kommandon du vill att R skall utföra.
Att “köra” kod (Run code): att säga till R att utföra en handling genom att ge ett kommandon i konsolpanelen. D v s att skriva ett kommando i konsolpanelen och sedan trycka
ENTER
.Objekt (Object): R sparar värden (exempelvis siffror eller korta textsegment) i något son kallas för objekt. Du kan tänka på ett objekt som sidorna i en anteckningsbok. På sida 3 i din anteckningsbok kan du ha skrivit in en viss information, och på sida 7 kan du ha skrivit in någonting annat. Om du vill veta vad du har skrivit på sida 7 så bläddrar du till den sidann i din anteckningsbok. I RStudio skriver du istället ett kommando i konsolpanelen för att se vilken information som finns i ett specifikt objekt. Vi återkommer till just detta i avsnitt 2.6 längre ned.
Olika datatyper:
- Data i R kan vara heltal (kallas i R för “Integer”) så som 3, -9, 1, -10, 9231231.
- Data kan också vara i decimalform (kalls i R för “Double” eller “Numeric”) så som 7.23, -56.7, 3.3336.
- Data kan också förekomma som logiska påståenden, d v s att någonting antingen är falskt eller sant,
FALSE
ellerTRUE
. - Data kan också vara kortare text (kalls i R för “Character”) så som “Kriminologi”, “Sociologi”, “Geografi”, eller “Gud vad jobbigt måste jag kunna allt det här?”, “Nej, inte på en gång, men det är bra att känna till det så kan du alltid gå tillbaka till det här avsnittet sen och kolla, efter att du har lärt dig lite mer och börjar känna dig bekväm”. Notera att text skrivs med “citattecken”.
- Faktorer (Factors): Kategoriska data sparas i R oftast som faktorer. En faktorvariabel är alltså en kategorisk variabel (en variabel på nominal eller ordinalskala). En faktor kan innehålla numeriska data (exempelvis om vi har bett respondeter att svara med en skala från “1 Inte alls till 5 I stor utsträckning” hur mycket det tycker om äpplen) eller textdata (exempelvis om vi har frågat vilket utbildning vid universitetet som studenter läser, exempelvis “Kriminologi”).
Vektorer (Vectors): en samanhängande serie av olika värden. Vi kommer inte att använda vektorer jättemycket på kursen, men det är någonging relativt grundläggande som ofta nämns och därför kan vara bra att känna till. Vektorer skapas genom en funktion i R som skrivs ut som
c()
därc()
står för engelskansk “combine” eller “concatenate”. Om vi exempelvis skriverc(3, 4, 5, 99)
så skapas ett nytt objekt som innehåller alla dessa värden.
## [1] 3 4 5 99
- Data frame: En data frame är en typ av kalkylark så som ni oftast ser i exempelvis Excel, där information skrivs in i rader och kolumner. I de vanligaste fallen sparar vi våra variabler i en data frame med variablerna (någonting som varierar, exempelvis ålder) i kolumnerna, och individuella observationer (individer som är olika gamla) på raderna.
- Funktioner (Functions): funktioner är specifika kommandon i R som gör sepcifika saker. Oftast behöver vi dessutom specificera ett antal argument inom en funktion för att den skall fungera. Exempelvis så producerar funktionen
seq()
sekventiella värden. Argument vi behöver specificera är mellan vilka två ändå punkter, frånfrom =
och tillto =
som vi vill få värden. Exempelvis, om vi skriver:
## [1] 11 12 13 14 15 16 17 18 19 20
- Precis som i Excel finns flera inbyggda statistiska funktioner så som:
mean()
median()
sd()
- osv.
- Det finns även matematiska funktioner så som “roten ur”, logaritmerat värde osv:
sqrt()
log()
- osv.
- Villkor (Conditional statements):
Bygger på tecken från boolisk algebra och logik. Du behöver inte veta vad boolisk algebra är för något, men följande teckenkombinationer är definitivt bra att känna till då vi ofta använder dem när vi göra vissa beräkningar:
TRUE
motsvarar sant.FALSE
motsvarar falskt.==
motsvarar “är samma sak som”.>
motsvarar “större än”<
motsvarar “mindre än”>=
motsvarar “större än eller lika med”<=
motsvarar “mindre än eller lika med”!=
motsvarar “inte lika med.” (Utropstecken används i många programmeringsspråk för att indikera “inte”).|
motsvarar “eller”&
motsvarar “och”
Test av likvärdighet. Grunden för att jämföra om två olika utfästelser är likadana (om två olika saker är samma sak) är att använda två likamedtecken
==
i följd. Exemeplvis om vi vill jämföra om2 + 1
är samma sak som3
kan vi skriva2 + 1 == 3
detta ger ossTRUE
Obs! Användning av endast ett likamedtecken talar istället om för R att någonting SKALL vara samma sak. Att exempelvis skrivamittobjekt = 3
skapar ett objekt med värde 3. Vilket vi kan se genom att be R att skriva ut objektet genom att skrivaprint(mittobjekt)
.
## [1] 3
- Test av likvärdighet fortsättning. Du kan såklart testa om andra utfästelser är sanna eller falska, till exempel om ett tal är större än ett annat, exempelvis ger
2 > 3
FALSE
eftersom att två inte är större än tre. Att skriva ut(3 + 1 >= 4)
ger ossTRUE
medan(2 + 3 <= 4)
ger ossFALSE
. Om vi dessutom lägger in tecken för “och” alternativt “eller” kan vi skriva mer komplicerade villkorssatser:(2 + 3 == 5) & (2 + 3 == 6)
ger ossFALSE
eftersom att endast det första påståendet, men inte det andra, är sant. Om vi istället skriver(2 + 3 == 5) | (2 + 3 == 6)
får viTRUE
eftersom att åtminstone ett av påståendena är sant.- Oftast används dessa test av likvärdigheten för att ställa upp villkor. Exempelvis kanske vi bara vill göra en viss analys på personer i brottsaktiv ålder, och vill då kunna tala om för R att vi bara är intresserade av att titta på de vars
ÅLDER
är> 15 & < 30
.
- Oftast används dessa test av likvärdigheten för att ställa upp villkor. Exempelvis kanske vi bara vill göra en viss analys på personer i brottsaktiv ålder, och vill då kunna tala om för R att vi bara är intresserade av att titta på de vars
3.3 Bra att veta om meddelanden i R.
När du kör ett kommando/kod i R så får du förutom ett resultat ibland också återkoppling via meddelanden från R. Ibland får du bara feedback, och inget resultat alls, därför att kommandot inte fungerade. Det finns tre typer utav meddelanden:
Error: Felmeddelanden. Röd text. Någonting gör att koden eller kommandot inte fungerar. Detta kräver lite felsökning så att vi kan åtgärda det som blev fel. Exempelvis kanske vi måste kontrollera stavningen, eller att vi ber R att hantera ett objekt som vi inte har skapat och som R därför inte kan hitta.
Warning: Varningsmeddelande. Röd text. Oftast fungerar koden, och du kan få ett resultat. Men R har upptäckt någonting som gör att resultatet kanske inte är fullt tillfärlitligt. Varnignsmedelanden kan variera i längd, där själva felet beskrivs mer detaljerat. Ofta kan dessa vara svåra att begripa för en novis, men det är hjälpsamt att kopera felmeddelandet och klistra in i en söktjäsnt (så som DuckDuckGo eller Google). är det ett vanligt felmeddelande finns det ofta andra som har varit lika frustrerade som dig, och många hjälpsamma R-användare som tillsammans har skapat lösningar på problemet.
Meddelanden: Om ett meddelande inte börjar med röd text så är det bara ett vänligt meddelande. Exempelvis om vi laddar in ett paket (mer om vad detta är längre ned) i R så talar R om för oss när vi har lyckats och paketet är redo att använda.
3.4 Paket (Packages)
Vad är ett paket i R? R är ett programmeringsspråk. Vissa saker kan vara relativt omständiga att utföra, och kräver många rader med kod. För att göra livet enklare för oss vanliga användare så finns det tusentals andra R-användare som har förenklat mängden kod vi behöver skriva genom att skapa specialiserade funktioner. Dessa hänger ofta ihop, och laddas ned i paket. Du kan med fördel tänka på R som en ny iphone, och på paket som en app. Precis som med en ny telefon så kommer den itne att ha alla funktioner när du köper den och stlår på den för första gången, utan du kommer ofta behöva börja med att ladda ner exempelvis mobilt bankid, en bankapp, och kanske sociala medier.
Precis som med appar fungerar paket på så sätt att du dels behöver ladda ned och installera dem, och dels öppna dem för att kunna använda dem. Du behöver bara installera appen/paketet en gång, men du måste öppna det varje gång som det skall användas. (Förresten är en vanlig felkälla att en försöker ge R ett kommando som bygger på en funktion som inte är en del av Rs grunläggande programspråk, utan en del av ett särskilt utvecklat paket. Innan du har öppnat paketet så kommer R inte att känna igen funktionen).
För att ladda ned ett paket så skriver du helt enketl install.packages("")
i konsolpanelen och trycker ENTER
. För att sedan öppna paket skriver du library()
. Exempelvis, för att ladda in ett paket “dplyr” som hjälper oss med att transformera (“koda om”) variabler så skriver vi install.packages("dplyr")
(Obs! Med “citat-tecken” runt paketets namn). Vi kan sedan öppna paketet i R genom att skriva library(dplyr)
:
Ibland kan en också behöva uppdatera sina paket för att de skall fungera korrekt (exempelvis om R har problem att ladda dem). Då skriver en bara update.packages()
.
Kom ihåg att du behöver öppna varje paket som du behöver använda för dina analyser varje gång som du öppnar RStudio.
3.5 Projekt och skript
En användbar sak vi gör när vi arbetar i R är att vi skapar ett projekt där alla våra arbetsfiler länkas samman. Exempelvis våra data, våra skript där vi sparar alla kommandon, och våra resultat (om vi väljer att spara resultat som separata filer). En fördel med att skapa projekt är också att om vi lägger in datafiler i projektmappen så slipper vi skriva långa och krångliga sökvägar när vi skall läsa in data i R (det räcker då med filnamnet).
Skapa ett nytt projekt genom att i menyfliksområdet längst upp till vänster i RStudio klicka på File
sedan New Project...
och välj sedan New Directory
i det pop-up fönster som blir synligt.
Fortsätt genom att välja projekttypen New Project
.
I fältet Directory name
kan du namnge ditt projekt, och i om du klickar på Browse
så kan du välja vart på din lokala hårddisk som du vill att projektmappen skall sparas. Klicka sedan på Create Project
Du har nu skapat ett nytt projekt!
Nästa sak vi skall göra är att öppna ett nytt skript. Skript är en typ av fil där vi istället för att skriva våra kommandon direkt i konsolpanelen istället kan skriva dem i vårt skript. Fördelen med skript är att det fungerar ungefär som en vanlig text-fil på så sätt att allt vi skriver i skriptet kan sparas. På så sätt så kan vi enkelt spara allt vi hållit på med och vid ett senare tillfälle öppna vårt projekt i RStudio, inklusive vårt skript, och fortsätta där vi slutade (samt komma ihåg och dokumentera alla steg vi har tagit vilket är MYCKET användbart sen när vi skall skriva en vetenskaplig rapport).
Skapa ett nytt skript genom att i menyfliksområdet längst upp till vänster i RStudio klicka på File
sedan New File
och välj sedan R Script
. Du kan också hålla in tangenterna Ctrl+Skift+N
.
När du gör detta skall ett nytt fönster öppnas i RStudio, och det borde se ut ungefär såhär:
Vi kan skriva in lite kommandon i vårt skript, och sedan markera kommandot och antingen trycka Ctrl+ENTER
på tangentbordet, eller klicka på den lilla symbolen för Run
längst upp till höger i vårt skript. Exempelvis kan vi skriva in 10 * 8
, markera och trycka Ctrl+ENTER
och då få följande output i konsolpanelen:
Du sparar enkelt ditt skript genom att i menyfliksområdet längst upp till vänster i RStudio klicka på File
sedan Save As...
(första gången) och sedan kan du bara klicka på Save
eller Ctrl+S
på tangentbordet.
3.6 Objekt
R är ett ojbektsbaserat språk. Det betyder att vi ständigt arbetar med att spara information i objekt. Som tidigare nämnt kan du tänka på objekt exempelvis som sidor i en antecknignsbok. Genom att säga till R att vi vill titta på en viss sida i anteckningsboken kan vi få reda på vilken information som står där.
Att skapa ett objekt görs genom att först namnge objektet
följt av en pil som pekar på objektet <-
följt av den information vi vill att objektet skall innehålla.
Objekt kan också skapas genom att namnge objektet
följt av ett enkelt likamedtecken =
följt av den information vi vill att objektet skall innehålla. Båda sätten fungerar lika bra, men av olika skäl anses det både mer korrekt och lite tjusigare att använda <-
.
Exempelvis kan du vi vårt skript skriva följande kod sida7 <- "Detta är vad vi har antecknat på sida 7"
. Om vi då sedan endast skriver in sida7
och Ctrl+ENTER
alternativt Run
så kan vi läsa följande i konsolpanelen:
## [1] "Detta är vad vi har antecknat på sida 7"
Vi kan också skriva exempelvis:
## [1] 3
eller
sida5 <- c(3, 7, 89) #Om ni kommer ihåg så är c() en function som står för "combine" vilket gör att vi kan kombinera flera värden i ett objekt
sida5
## [1] 3 7 89
Ett objekt behöver inte nldvändigtvis innehålla samma typ av information
## [1] "3" "text" "89" NA
I exemplet ovan kanske du noterade bokstäverna NA som stod utan “citattecken”. NA är samma sak som ett internt svarsbortfall och betyder i R att vi saknar en observation eller ett värde. R vet helt enkelt inte vad observationen är för något. Detta kan ibland uppstå om R saknar information, eller om vi själva vill att ett värde skall vara NA (som i det här fallet).
Objekten behöver såklart inte heta “sida”, utan du kan döpa dem till vad du vill. Men ett tips är att försöka hålla objektnamnen relativt korta, och att alltid skriva dem med små bokstäver (så slipper vi förhoppningsvis några onödiga felmeddelanden och frustration längre fram):
## [1] "piggelin" "glassbåt" "mjukglass"
Vi är nu redo att börja utforska data i R på riktigt!
output: html_document date: “2025-09-17” —