Programmering i R

Föreläsning 7: Grafik med ggplot2, statistik

Josef Wilzén

STIMA, Linköpings universitet

2021-03-08

Föreläsning 7: Innehåll

  • Miniprojektet
  • ggplot2
  • Statistik, (Linjär regression)

Miniprojekt del 2

Miniprojekt del 2

  • Samma data som i del 1.
  • Inlämning: Rmd-fil och pdf/html
  • Enklare statistika analyser
  • All grafik med ggplot2
  • Två veckor
  • Instruktioner

ggplot2

ggplot2

ggplot2

“Grammatik för grafik”

  • Abstraktioner av grafiska idéer. Jmf med ordklasser/satsdelar i språk
  • Ger ett teoretiskt fundament för hur grafik kan skapas
  • Enkla principer -> avancerade grafer

ggplot2

  • Bygger upp en graf av flera delar
    • data: en data.frame med all data
    • aes: aesthteic mappings (färger, former)
    • geom: geometriska objekt
    • facets: skapar subplottar baserat på villkor
    • scales: skalor för aesthteic mappings
    • coordinate system

ggplot2

alt text Bild från denna källa

ggplot2

  • ggplot2 bygger upp en plot med olika lager, när plotten är klar så visas plotten genom att anropa print()
    • Utgår från funktionen: ggplot()
      • Returnerar objekt som vi kan spara
    • Lager adderas med “+”,
      • tex: + geom_line()
    • Speciella klasser för ggplot2

ggplot2

”In brief, the grammar tells us that a statistical graphic is a mapping from data to aesthetic attributes (colour, shape, size) of geometric objects (points, lines, bars). The plot may also contain statistical transformations of the data and is drawn on a specific coordinate system.”

Från “ggplot2 book” av Hadley Wickham

aes

  • Kopplar färg, form och utseende till data
aes Beskrivning
x x-axel
y y-axel
size storlek
color färg
shape form

geom

  • Vilken geometrisk representation ska användas
geom Beskrivning
geom_point Scatterplot
geom_line Line graph
geom_bar Barplot
geom_boxplot Boxplot
geom_histogram Histogram

aes och geoms

  • Finns även speciella aestetics för vissa geoms
geom aes
geom_points point shape, point size
geom_line line type, line size
geom_bar y min, y max, fill color, outline color

Exempel

ggplot(data=Nile) + aes(x=years, y=level) + geom_point()

plot of chunk unnamed-chunk-2

Exempel

ggplot(data=Nile) + aes(x=years, y=level) + geom_line()

plot of chunk unnamed-chunk-3

Exempel

p <- ggplot(data=Nile) + aes(x=years, y=level, color=period) +  geom_point(aes(shape=period))
p

plot of chunk unnamed-chunk-4

Exempel

p <- ggplot(data=Nile) + aes(x=years, y=level, color=period) + geom_line(aes(type=period)) + geom_point()
p

plot of chunk unnamed-chunk-5

Exempel

p <- ggplot(data=Nile) + aes(x=years, y=level) + facet_grid(period~.) + geom_line()
p

plot of chunk unnamed-chunk-6

Exempel

p <- ggplot(data=Nile) + aes(x=years, y=level) + facet_grid(~period) + geom_line()
p

plot of chunk unnamed-chunk-7

Exempel: Teman

p + theme_bw()

plot of chunk unnamed-chunk-8

Exempel: Teman

p + theme_classic()

plot of chunk unnamed-chunk-9

Exempel: Teman

p + theme_grey()

plot of chunk unnamed-chunk-10

ggplot2

  • qplot(): Liknar plot() från basgrafiken.
  • Bra för snabba grafer.
  • Se Roger Pengs video för en introduktion
  • För mer kontroll använd ggplot()

ggplot2 i R: Demo

Statistik

Enklare statistiska tester

  • Det finns många statistiska modeller/metoder i R, se CRAN Task Views för ex.
  • \( {\chi}^2 \)-tester görs på (Obs!) tabeller med:
    • chisq.test(), fisher.test()
  • För t-tester används t.test()
  • Korrelation och kovarians beräknas med:
    • cor() och cov() och testas med
    • cor.test()

Exempel: t-test

data("chickwts")
horsebean <- chickwts$weight[chickwts$feed == "horsebean"]
sunflower <- chickwts$weight[chickwts$feed == "sunflower"]

mean(horsebean)
[1] 160.2
mean(sunflower)
[1] 328.9167

Exempel: One Sample t-test

t.test(horsebean,alternative="two.sided", mu = 150, conf.level = 0.95)

    One Sample t-test

data:  horsebean
t = 0.83507, df = 9, p-value = 0.4253
alternative hypothesis: true mean is not equal to 150
95 percent confidence interval:
 132.5687 187.8313
sample estimates:
mean of x 
    160.2 

Exempel: Two Sample t-test

t.test(horsebean, sunflower,alternative="two.sided", mu = 0, conf.level = 0.95)

    Welch Two Sample t-test

data:  horsebean and sunflower
t = -9.0449, df = 19.964, p-value = 1.69e-08
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -207.6313 -129.8021
sample estimates:
mean of x mean of y 
 160.2000  328.9167 

statistik i R: Demo

Frivillig fördjupning: Linjär regression

Frivillig fördjupning: Linjär regression

  • R skiljer sig från andra statistikprogram
  • Objektorienteringen i R
  • Grunden är formelobjektet y ~ x1 + x2 Används på flera håll i R (ex. facet-grid)
  • Att arbeta med modeller i R innebär fyra delar/steg:
    1. Anpassa/träna vår modell och spara som ett objekt
    2. Analysera/studera resultatet
    3. Diagnostisera
    4. Använda modellen och resultaten

Anpassa en modell: formula

  • Kräver formel och data (med samma variabeler)
library(MASS)
library(car)
data(Prestige)
mod1 <- lm(prestige ~ income + women + education, data=Prestige)
mod2 <- lm(prestige ~ income + women + education - 1, data=Prestige)
mod3 <- lm(prestige ~ income:women + education, data=Prestige)

Analysera resultatet

  • Använder följande funktioner för att studera resultatet:
    • summary()
    • anova()

Exempel:

summary(mod1)
anova(mod1)
anova(mod3, mod1, test="Chisq")

Diagnosticera modellen

  • Finns ett stort antal metoder för detta, ex:
plot(mod1)
durbinWatsonTest(mod1)
qqPlot(mod1)  

Använda modellen

  • Vi kan göra olika saker med en färdig modell som
    • Publicera resultat
    • Studera residualer
    • Prediktion
    • Generera “fina” tabeller
  • Vi kan spara vår modell och sedan använda funktioner som
    • resid()
    • predict()