Gå till index

Analys med R

0% färdig
0/0 Steps
  1. Analys och forskning med R och Posit (Rstudio)
  2. Grunderna i R och Rstudio
    7 Ämnen
  3. Importera, exportera, spara och ladda data
    5 Ämnen
  4. Strängar och regular expressions (regex)
    1 Ämne
  5. Bearbetning av data med dplyr
    12 Ämnen
  6. Visualisera och presentera
    14 Ämnen
  7. Explorerande analyser
    6 Ämnen
  8. Prediktionsmodeller
    12 Ämnen
  9. Klassisk regressionsanalys
    8 Ämnen
  10. Machine learning (ML) och Artificiell Intelligens (AI)
    9 Ämnen
  11. Prediktionsmodeller: Tidymodels
  12. Hypotestester
    1 Ämne
Avsnitt 9, Ämne 2
Startad

Regression (Regressionsanalys)

Avsnitt Progress
0% färdig

Regression

Med regression undersöker man sambandet (associationen) mellan två eller fler variabler. I en regressionsanalys prediceras en variabel (\(Y\)) av minst en prediktor (\(X\)). Rent terminologiskt sägs \(Y\) vara beroende av \(X\); \(Y\) är därför den beroende variabel och \(X\) är oberoende variabel.

Uppgift i modellenSynonym
YVariabeln som skall predicerasBeroende variabel, dependent variable, outcome, utfall, utfallsmått, label, target
XAnvänds för att prediera YPrediktor, predictor, feature, kovariat, covariate

Ponera att vi undersöker sambandet mellan BMI (body mass index) och blodsocker. Med regression kan vi använda den ena variabeln för att predicera värdet på den andra. I detta fall används BMI för att predicera blodsocker. BMI är således oberoende (prediktor) och glukos är beroende (outcome).

Vi kommer illustrera linjär regression med data från Pimaindianer, vilket har mycket hög risk för diabetes. Data från Pimaindianer finns i paketet mlbench. Installera mlbench och aktivera paketet, samt data med Pimaindianer med följande kommando:

R
library(mlbench)
data(PimaIndiansDiabetes)

# Graf med sambandet mellan mass och glucose
ggplot(data=PimaIndiansDiabetes,
       aes(x=mass, y=glucose, color=diabetes)) +
  geom_point() +
  geom_smooth()

Figuren ovan visar hur BMI (mass) är associerad med blodsocker (glucose). I grafen ses en rak blå linje som utgör regressionslinjen för mass. Sambandet mellan mass och glucose kan beskrivas med en enkel formel.

\(Y_i = b_1 X_i + b_0 + \epsilon_i\)

  • \(b_0\) är interceptet, vilket är punkten där regressionslinjen skär Y-axeln (se figur ovan).
  • \(b_1\) är koefficienten för mass, vilket innebär att det är värdet på regressionslinjens lutning.
  • \(\epsilon_i\) är skillnaden mellan modellens predicerade värde på \(Y\) och det observerade värdet på \(Y\). Detta är alltså modellens felprecision (error).

Sammanfattningsvis är detta en modell som predicerar \(Y\) med hjälp av en regressionslinje vars lutning är \(b_1\). Interceptet (\(b_0\)) intresserar oss mycket sällan. Modellens felprecision (\(\epsilon_i\)) är ett mått på hur bra modellen är.

Målet är att skapa en regressionslinje vars lutning anpassas så att den representerar sambandet mellan \(X\) och \(Y\). Linjens lutning beror på sambandet mellan mass och glucose. Lutningen för mass kallas även koefficienten för mass. Om glucose stiger med stigande mass, så kommer regressionslinjen ha en positiv lutning. I figuren ovan ses att linjen har en positiv lutning och därför är koefficienten för mass posiitv.

Notera att relationen mellan \(X\) och \(Y\) måste vara linjär för att den linjära modellen skall kunna användas. Om sambandet inte är linjärt kan den linjära modellen bli missvisande. Här följer ett exempel på ett icke-linjärt samband mellan \(X\) och \(Y\). Den beräknade regressionslinjen lyckas inte fånga sambandet mellan \(X\) och \(Y\).

Vi fortsätter genom att skapa en linjär regressionsmodell i R. Detta görs med funktionen lm() som finns i base R (du behöver inte installera något paket).

R
modell <- lm(glucose ~ mass, data=PimaIndiansDiabetes)

summary(modell)
Resultat
Call:
lm(formula = glucose ~ mass, data = PimaIndiansDiabetes)

Residuals:
     Min       1Q   Median       3Q      Max 
-128.970  -20.756   -3.705   19.509   81.568 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  92.2129     4.7083  19.585 < 0.0000000000000002 ***
mass          0.8965     0.1429   6.274       0.000000000589 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 31.2 on 766 degrees of freedom
Multiple R-squared:  0.04887,	Adjusted R-squared:  0.04763 
F-statistic: 39.36 on 1 and 766 DF,  p-value: 0.0000000005891

Av ovangående resultat framgår följande:

  • Interceptet \(b_0\) är 92.2 vilket innebär att regressionslinjen skär Y-axeln på Y=92.2, och det förefaller stämma med den grafiska undersökningen.
  • \(b_{BMI}\), dvs koefficienten för mass är 0.8965. Det innebär att om mass ökas med 1 enhet, ökar glucose med 0.8965 enheter.

Beräkning av regressionslinjen

Fundamentalt för regressionsanalys är beräkning av regressionslinjen. Den vanligaste metoden är least-squares method (på svenska metod med kvadratsummor). Least-squares kan även kallas för ordinary least-squares. Metoden skapar en linje som minimerar summan av error. I nedanstående figur har samma data som ovan (Pimaindianerna) förstorats i intervallet 50 till 150 på x-axeln och y-axeln för att tydliggöra vad kvadratsummor är. I nedanstående figur ses även en regressionslinje.

Least-squares syftar till att skapa en regressionslinje som minimerar summan av alla observationers error. I figuren ovan framgår att regressionslinjens avstånd till punkterna varierar mycket. I intervallet 100 till 140 på x-axeln är linjen nära punkterna (error blir litet), men utanför detta intervallet är linjen längre ifrån punkterna (error blir större). Metoden med kvadratsummor går ut på att minimera sammanlagd (total) error. Linjen tippas fram och tillbaka tills lutningen minimerar summan av alla error. Innan man adderar alla error så kvadreras error; syftet med detta är att alla negativa error (de som befinner sig under linjen) skall bli positiva värden. Summan av alla kvadrerade error kallas RSS (Residual Sum of Squares). Den linjära modellens uppgift är således att hitta \(b_1\) och \(b_0\) som minimerar RSS. Formeln för RSS är som följer:

\(RSS = (y_1 - \hat{B_0} - \hat{B_1}x_1)^2 + (y_2 - \hat{B_0} - \hat{B_1}x_2)^2 + … + (y_n - \hat{B_0} - \hat{B_1}x_n)^2\)

Coefficient of determination: R2 

För att skatta styrkan på sambandet mellan \(X\) och \(Y\) så kan man använda coefficient of determination, även kallat \(R^2\). Detta värde går from 0 till 1. Om \(R^2\) är 0 så finns inget samband och om \(R^2\) är 1 så finns ett perfekt samband, vilket innebär att \(X\) kan förklara hela variationen i \(Y\).

Antaganden för regression med least-squares method

Följande antaganden krävs för att least-square skall kunna användas:

  1. Residualerna skall vara normalfördelade med medelvärdet 0. Detta kan kontrolleras med en så kallad quantile-quantile plot. I en quantile-quantile plot skall en rak linje ses om antagandet är tillfredsställt.
  2. Residualerna skall ha konstant varians. Detta kan kontrolleras genom en scatterplot med estimerade residualer mot fitted values. Scatterplot skall visa ett moln utan något samband mellan värdena.
  3. Residualerna skall vara oberoende av varandra. Detta är sällan ett problem såvida inte samma person/cell/bakterie/enhet/etc ingår flera gånger i studiepopulationen. Om samma person ingår flera gånger i studiepopulationen (exempelvis genom upprepade mätningar av BMI och glukos) så är de observationernas residualer beroende av varandra.

Punkt (1) och (2) kan undersökas enkelt i R genom följande kommando, som returnerar alla nödvändiga grafer:

R
plot(modell)
Residuals vs fitted: Residualer plottade mot fitted values. Här får inget mönster föreligga. Punkterna skall utgöra ett moln utan association mellan residualer och fitted values.
Quantile-Quantile plot (QQ plot): Denna skall visa en helt rak linje, vilket föreligger i detta fallet (även om det finns lite deviation i ändlägena).

Prediktion med regression

Regressionsmodellen kan användas för prediktion. Det innebär att vi kan gissa värdet på Y för ett givet värde på X. Det kan exempelvis var av intresse att förutsäga vad glucose kommer vara vid ett givet mass. För att göra detta skapar vi nu en ny modell med specifikationen glucose ~ . vilket betyder att vi modellerar glucose mot alla andra variabler. Därefter använder vi predict() med modellobjektet (modell_2) och specificerar vilka data vi vill testa modellen på. I detta fall testar vi på samma data som vi tränade på, vilket inte rekommenderas. Vi sparar det predicerade värdet som en ny kolumn (Predicted_Glucose) i samma dataframe. Allra sist skriver vi ut första 10 raderna med observerade värden och predicerade värden.

R
modell_2 <- lm(glucose ~ ., data=PimaIndiansDiabetes)

PimaIndiansDiabetes$Predicted_Glucose <- predict(modell_2, newdata=PimaIndiansDiabetes)

select(PimaIndiansDiabetes, glucose, Predicted_Glucose) %>%
  slice(1:10)
Resultat
        glucose     Predicted_Glucose
1	148	    134.03797		
2	85	    100.53489		
3	183	    130.46052		
4	89	    106.04599		
5	137	    145.69693		
6	116	    106.94069		
7	78	    128.57557		
8	115	    98.26398		
9	197	    181.40914		
10	125	    136.97599		

Multipel regression

Om vi vill undersöka hur BMI (mass) samvarierar med glukos (glucose) och även beakta ålder, så använder vi multipel regression. Definitionen av multipel regression är helt enkelt regression med minst 2 prediktorer. Multipel regression följer samma principer som den linjära regressionen som diskuterats hittills. Metoden least-squares används som vanligt men i detta fall anpassas inte en regressionslinje utan istället ett regressionsplan genom datapunkterna. Detta plan har ett tredimensionellt utseende som illustreras nedan i samma data. Den andra prediktorn är pressure (blodtryck).

Koden för regressionsmodellen blir:

R
modell_2 <- lm(glucose ~ mass + pressure, data=PimaIndiansDiabetes)
summary(modell_2)
Resultat
Call:
lm(formula = glucose ~ mass + pressure, data = PimaIndiansDiabetes)

Residuals:
     Min       1Q   Median       3Q      Max 
-129.725  -20.893   -3.277   19.206   80.092 

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)    
(Intercept) 84.60294    5.48135  15.435 < 0.0000000000000002 ***
mass         0.78442    0.14834   5.288          0.000000161 ***
pressure     0.16201    0.06042   2.681              0.00749 ** 
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 31.08 on 765 degrees of freedom
Multiple R-squared:  0.05773,	Adjusted R-squared:  0.05526 
F-statistic: 23.43 on 2 and 765 DF,  p-value: 0.0000000001326

Tolkning av koefficienterna är som följer.

  • När mass stiger med 1 enhet ökar glucose med 0.78442 enheter. Denna effekt är justerad för pressure.
  • När pressure stiger 1 enhet ökar glucose med 0.16201 enheter. Denna effekt är justerad för mass.