Kapitel 5 Beskrivande statistik
I resterande del av detta underlag antar vi att vi har samlat in data på något sätt och har sammanställt det i en fil som vi sedan kan läsa in i R med hjälp av till exempel read.csv2()
. Dessa datamaterial är oftast ganska stora, innehållande flera observationer och variabler, och det kan vara svårt att få en överblick eller hitta den gömda informationen som vi är intresserade av genom att bara titta på siffrorna som vi sammanställt.
Ett enkelt sätt att bilda sig en uppfattning om ett material är att försöka sammanfatta informationen med hjälp av beskrivande mått eller fördelningar. Beroende på vilken variabeltyp och skala variablerna följer, kommer metoder för att sammanfatta och visualisera variablerna vara olika.
5.1 Parameter och statistika
Vi gör skillnad på det sanna värdet av det beskrivande måttet som finns i populationen och det uppskattade värdet av måttet som vi får i vårt urval. Det sanna värdet kallar vi för en parameter och det skattade värdet för en statistika.
En parameter kommer alltid vara samma värde eftersom det beräknas på hela den population som vi är intresserad av att undersöka. Problemet är att vi inte har möjlighet att samla in information om hela populationen så denna parameter är okänd. En statistika kommer däremot vara olika värden beroende på vilka enheter som hamnat i stickprovet. Ett stickprov som påverkas av slumpen medför att även denna statistika påverkas av slumpen (utvalda enheter) men vi kan med hjälp av denna statistika ändå dra slutsatser om populationens parameter genom statistisk inferens.
5.2 Lägesmått
Ett enkelt sätt att sammanfatta en variabels position är med hjälp utav ett lägesmått. Lägesmåttet beskriver var på tallinjen det förväntas att variabelns värden placeras kring och kan ge information om magnitud (storleken) på värdena.
5.2.1 Medelvärde
Det vanligaste lägesmåttet är medelvärdet som beräknar det genomsnittliga värdet av en kvantitativ variabel. Medelvärdet i ett stickprov beräknas enligt:
\[\begin{align*} \bar{x} = \frac{\sum_{i = 1}^n{x_i}}{n} \end{align*}\]
Vi ser att denna formel använder sig utav två komponenter, summan av alla enskilda värden på variabeln (\(x_i\)) i täljaren, och antalet mätvärden (\(n\)) i nämnaren. I R kan vi genomföra beräkningen i dessa två steg med hjälp av funktionerna sum()
och length()
, men för flera av de beskrivande måtten finns redan en funktion som genomför hela beräkningen åt oss, i detta fall mean()
.5
## Beräknar medelvärdet av pingvinernas kroppsvikt
$body_mass_g %>%
penguinsmean()
## [1] 4207.057
Vi kan tolka detta värde som att den genomsnittliga vikten av pingvinerna i stickprovet är 4207.0570571 gram. Men speglar detta värde variabeln på ett bra sätt? I nästkommande kapitel kommer vi titta på visualiseringar av data som ett komplement till dessa beskrivande mått som kan hjälpa till att identifiera fall när ett medelvärde inte ger en rättvis bild av lägesmåttet.
5.2.2 Median
Ett tillfälle där medelvärdet inte visar en rättvis bild av verkligheten är ifall det förekommer extremvärden i data. Ett extremvärde beskriver en observation vars värde på variabeln ligger långt ifrån den övriga massan. Medelvärdet kommer dras mot detta värde och riskerar då att ge en skev bild av verkligheten. Visualiseringar av data hjälper till att identifiera extremvärden.
Medianen är ett alternativt lägesmått som är robust mot extremvärden, det vill säga måttet påverkas inte av att det förekommer extremvärden eller ej. Medianen beskriver den mittersta observationen om datamaterialet är rangordnat i storleksordning, vilket innebär att extremt låga eller höga värden inte kommer påverka vilken observation som anses som den mittersta.
Matematiskt kan medianen beräknas enligt:
\[\begin{align*} x_{position} = x_{\frac{n + 1}{2}} \end{align*}\]
där \(x\) är storleksordnat från minsta till det största värdet.
I R kan vi återigen antingen genomföra detta stegvis genom att sortera variabeln, beräkna ut det mittersta värdet och sedan indexera den/de värden som är relevant eller använda en inbyggd funktion som gör allt detta i ett svep, median()
.
## Beräknar medianen av pingvinernas kroppsvikt
$body_mass_g %>%
penguinsmedian()
## [1] 4050
5.5 Andra matematiska funktioner
sum()
- beräknar summan av en vektor,length()
- beräknar längden/antalet av en vektor,min()
- anger det minsta värdet av en vektor,max()
- anger det största värdet av en vektor,
Alla dessa funktioner behöver ett argument som beskriver vilken vektor beräkningen ska utföras på. Denna vektor kan innehålla hur många element som helst, men måste vara numerisk för att beräkningarna ska kunna genomföras. Vi kan använda hjälpdokumentationen för att se vilka andra argument som respektive funktion använder sig utav, men vanligtvis räcker det med vektorn. En funktion som kräver flera argument är quantile()
. Där anger vi med argumentet probs
vilka percentiler som ska beräknas.
## Skapar en vektor
<- c(1,5,4,9,4,7,3,6,8,4,3,2,12,6,9)
a
## Medelvärdet
mean(a)
## [1] 5.533333
## Median
median(a)
## [1] 5
Just för beskrivande statistik kan man istället för att enskilt beräkna alla ovanstående mått, använda funktionen summary()
. Denna funktion anger minsta och största värde, första och tredje kvartilen, samt medelvärde och median.
5.6 Fördelningar
Vi kan också vilja sammanfatta material i form av en fördelning, en förteckning över vilka värden och hur ofta de förekommer i variabeln. Tidigare kapitel har presenterat hur vi kan visualisera fördelningar i olika sorters diagram, stapeldiagram eller histogram, för olika sorters variabler, men vi kan också vilja använda någon av de generella fördelningarna för att beräkna sannolikheter eller andelar för en population.
5.6.1 Normalfördelningen
Med R kommer vi kunna beräkna matematiskt (integrera) ytan under kurvan för olika värden istället för att vara begränsad till en standardiserad normalfördelningstabell. Funktionerna som vi kommer vilja använda beror på vad för typ utav uträkning som ska genomföras.
5.6.1.1 Beräkna sannolikheter från givna värden
Funktionen pnorm()
används för att beräkna andelar eller sannolikheter för givna utfall som vi är intresserade av.
pnorm(q = 1.96, mean = 0, sd = 1, lower.tail = TRUE)
## [1] 0.9750021
I exemplet ovan anger vi att vi vill beräkna uttrycket \(Pr(X \le 1.96)\) där \(X \sim N(\mu = 0, \sigma = 1)\). Argumentet lower.tail
som kan vara antingen TRUE
eller FALSE
anger vilket håll uttrycket ska beräknas.
Om vi istället är intresserad av området till höger om \(1.96\), \(Pr(X > 1.96)\) behöver vi ändra i funktionen till:
pnorm(q = 1.96, mean = 0, sd = 1, lower.tail = FALSE)
## [1] 0.0249979
Här kan vi alltså ange vilken normalfördelning som helst genom att ändra värden på argumenten mean
och sd
. Det som vi måste hålla reda på är vilken sida av fördelningen som är av intresse och ange värdet för lower.tail
utefter. Det är också med dessa funktioner som p-värden kan räknas ut.
5.6.1.2 Beräkna värden från givna sannolikheter
Funktionen qnorm()
används när vi vill beräkna värden (tabellvärden) utifrån givna sannolikheter.
qnorm(p = 0.025, mean = 0, sd = 1, lower.tail = TRUE)
## [1] -1.959964
I ovan exempel beräknar vi vilket värde (\(z\)) från den standardiserade normalfördelningen som uppfyller uttrycket \(Pr(Z\le z) = 0.025\).
Om vi istället är intresserade av ytor på den högra sidan av fördelningen kan vi likt tidigare ange lower.tail = FALSE
och då få ett uttryck likt \(Pr(Z > z) = 0.025\) istället.
Det är på detta sätt som tabellvärden beräknas fram till hypotesprövningar och intervallskattningar. Sannolikheten som vi är intresserade av blir då den angivna signifikansnivån.
5.6.2 Andra fördelningar
Liknande funktioner kan användas för andra fördelningar såsom t-, binomial-, eller \(\chi^2\)-fördelningen. I denna interaktiva sida kan du se visa hur olika sannolikheter beräknas ut utifrån olika fördelningar genom att ändra i inställningarna i vänsterspalten. Ett matematiskt uttryck för sannolikheten, tillhörande R-kod, samt en visualisering visas beroende på vilka inställningar som används. Testa runt och beräkna värden eller andelar från de olika fördelningarna.
Om vi inte hade rensat
penguins
från saknade värden hade vi behövt använda argumentetna.rm = TRUE
för att dessa skulle rensas från beräkningen:mean(penguins$body_mass_g, na.rm = TRUE)
.na.rm
står för “remove NA”.↩︎