Erstellen eines Berichtes in R-Markdown

Das ist eine erste Spielerei mit der Erstellung eines Berichtes in Markdown. In Markdown kann man recht einfach ein formatiertes Dokument erstellen. Verfügbare Formate sind HTML, PDF, oder MS Word. Für weitere Informationen zu Markdown ist folgende Homepage hilfreich: http://rmarkdown.rstudio.com.

Diese Seite ist eigentlich für mich selbst erstellt worden, um meine “Fortschritte” in R zu dokumentieren. Ich mache sie, die Seite, nicht wirklich öffentlicht. Falls jemand irgendwann über diese Seite stolpert und meine Ausführungen hilfreich findet, freu ich mich natürlich.

Um mir R beizubringen, benutze ich unter anderen Videos der Platform Youtube. Hier muss man naturgemäß viele “Leerläufe” durchlaufen. Wenn ich ein Video aber hilfreich finde, wird es mit link gepostet.

Weitere sehr hilfreiche Links -wird ständig erweitert- sind: https://github.com

https://stackoverflow.com/

Ich folge den Arbeitsschritten aus folgendem YouTube-Videos: https://www.youtube.com/watch?v=RCllzwWqSFg

Kann auch so als Link dargestellt werden: Tabellen in R. Mit RMarkdown und KnitR einen Bericht mit Tabelle erstellen von Thomas Buhl

Erster R Source Code

Hierbei soll die R- Arbeitsumgebung gelöscht werden und der in R integrierte Datensatz ToothGrowth geladen und analysiert werden. Der Source Code -leicht grau hinterlegt- und die einzelnen ergebnisse der Arbeitsschritte -weiß- sind unten ersichtlich.

# 1. Umgebung löschen
rm(list = ls())

# 2. einen Beispieldatensatz laden, der in R defaultmäßig zur Verfügung steht
data("ToothGrowth")
head(ToothGrowth)
##    len supp dose
## 1  4.2   VC  0.5
## 2 11.5   VC  0.5
## 3  7.3   VC  0.5
## 4  5.8   VC  0.5
## 5  6.4   VC  0.5
## 6 10.0   VC  0.5
# 2.1 Libraries laden
library(psych)
library(knitr)

# 3. Tabellle erstellen
ausgabe <- describe(ToothGrowth$len)

kable(ausgabe)
vars n mean sd median trimmed mad min max range skew kurtosis se
X1 1 60 18.81333 7.649315 19.25 18.94583 9.04386 4.2 33.9 29.7 -0.1425376 -1.042514 0.9875223

Unterschiedlichste Grafiken aus Regressionen darstellen

Hier wird ein einfaches, lineares Regressionsmodell erstellt. Benutzt werden Daten, die in R abrufbar sind. Es wurde der Datensatz mtcars verwendet. Auch hier gibt es einen Link zu den Sorce Codes und Arbeitsschritten; https://www.youtube.com/watch?v=Z9qGF9Z2Agk

Dieser wird wiefolgt abgerufen

data(mtcars)
## 
## Attache Paket: 'ggplot2'
## Die folgenden Objekte sind maskiert von 'package:psych':
## 
##     %+%, alpha
## 
## Attache Paket: 'dplyr'
## Die folgenden Objekte sind maskiert von 'package:stats':
## 
##     filter, lag
## Die folgenden Objekte sind maskiert von 'package:base':
## 
##     intersect, setdiff, setequal, union
## 
## Attache Paket: 'plotly'
## Das folgende Objekt ist maskiert 'package:ggplot2':
## 
##     last_plot
## Das folgende Objekt ist maskiert 'package:stats':
## 
##     filter
## Das folgende Objekt ist maskiert 'package:graphics':
## 
##     layout
## `geom_smooth()` using formula = 'y ~ x'

Modell 2 mit einer metrischen und einer kathegorialischen Variablen

In diesem Modell wird die metrische Variable -disp: Hubraum in Cubic Inches- und die kathegorische Variable am: Das Schaltgetriebe -0 = automatik und 1 = manuell- in einem Regressionsmodell dargestellt und grafisch zurückgegeben. Der Source Code wird eingeblendet:

########
#
# Modell 2 mit einer metrischen und kategorialischen Variablen
# aka "parallel slope model"
# die Variable am als Factor umwandeln
mtcars$am <-factor(mtcars$am)

# Die Variable AM umschreiben: 0 = atm und 1 = man
mtcars$am <- recode(mtcars$am,
                    "0" = "Automatik",
                    "1" = "Manuell")

# tatsächliche Regressionsanalyse durchführen 
# disp =  Hubraum
# am = Getriebe
mod2 <- lm(mpg ~ disp + am,     # winw refgression der Form y = x+ z+ e
           data = mtcars)

reg_plott_2 <- ggplot(augment(mod2), 
                      aes(x = disp,
                          y = mpg,
                          color = am))+
                        geom_point() +
  geom_line(aes(y = .fitted),
            linewidth = 1) +
  labs(x = "Hubraum in cubic inch",
       y = "Meilen pro Galone",
       title = "Regression mit zwei erklärenden Variablen",
       subtitle = "R-Formel: lm( mpg ~ disp + am, data= mtcars)")

reg_plott_2     

Die Grafik und das dahinterliegende Regressionsmodell ist etwas naiv. Da es bestimmt keine “paralellen” Zusammenhang zwischen einem automatik und manuellen Getriebes bei Autos gibt. Daher wird im zweiten Schritt die erklärenden Variablen auf zwei lineare Regressionen aufgeteilt:

 ######################
#
# Überprüfen, ob reg_plott_2 Modellananhme 

reg_plott_3 <- ggplot(mtcars, 
                      aes(x = disp,           # x achse die hubraum
                          y = mpg,        # y meilen pro galone
                          color = am))+
  geom_point() +                                # punktdiagram
  geom_smooth(method = "lm",                #regressionsmethode
              se = T,                       # Standardfehler
              linewidth = 0.5) +             # linien stärke
  labs( x = "Hubraum in cubic inches",
        y = "Meilen pro Galone",
        title = "Zwei seperate Regressionen auf mpg",
        subtitle = "R-Formel: lm( mpg ~ disp, data= mtcars) und lm( mpg ~ am...")

######
# Grafik aufrufen
reg_plott_3                      
## `geom_smooth()` using formula = 'y ~ x'

######
# Erklärung des Effektes: Es handelt sich hier um einen Interaktions-, oder Moeratoreffekt
# Der zusammenhang zischen Hubraum und Getriebe ist bei manuell größer als bei automatik 

# Regressionsmodell zur Überprüfung dieses Effektes

mod3 <- lm(mpg ~ disp*am,
           data = mtcars)

# ausgabe Ergebnis
summary(mod3)
## 
## Call:
## lm(formula = mpg ~ disp * am, data = mtcars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.6056 -2.1022 -0.8681  2.2894  5.2315 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    25.157064   1.925053  13.068 1.94e-13 ***
## disp           -0.027584   0.006219  -4.435  0.00013 ***
## amManuell       7.709073   2.502677   3.080  0.00460 ** 
## disp:amManuell -0.031455   0.011457  -2.745  0.01044 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.907 on 28 degrees of freedom
## Multiple R-squared:  0.7899, Adjusted R-squared:  0.7674 
## F-statistic: 35.09 on 3 and 28 DF,  p-value: 1.27e-09
#####
#
# Ausgabe des ergebnisses Grafisch
# Ergebnis ist gleich wie reg_plott_3 

reg_plott_4 <- ggplot(augment(mod3), 
                      aes(x = disp,
                          y = mpg,
                          color = am))+
  geom_point() +
  geom_line(aes(y = .fitted),
            linewidth = 1) +
  labs(x = "Hubraum in cubic inch",
       y = "Meilen pro Galone",
       title = "Regression mit zwei erklärenden Variablen",
       subtitle = "R-Formel: lm( mpg ~ disp + am, data= mtcars)")

reg_plott_4  

#######
#
# 3 dimensionales Modell
# mpg = zu erklärende Variable

# library plotly wird dafür benötigt

# 1. vektor plane erzeugen
# 1.1.1 Lineare Regression der Form mpg = hp + disp + e erzeugen
mod4 <- lm(mpg ~ hp + disp, 
           data = mtcars)
# 1.1.2 Zwei Vektoren, der beiden erklärenden Variablen erzeugen
hp <- mtcars$hp  
disp <- mtcars$disp

# 1.1.3 eine Matrix (Dataframe) aus den beiden Vektoren zusammenfügen
grid <- expand.grid(hp, 
                    disp)
# 1.1.4 Den Spalten der Matrix Namen geben
d <- setNames(data.frame(grid), 
              c("hp", "disp"))
# 1.1.4 Werte der "predicten"
vals <- predict(mod4, 
                newdata = d)

# 1.1.5 die Werte in ein Matrix zusammenführen
mpg <- matrix(vals, 
              nrow = length(d$hp), 
              ncol = length(d$disp))
# 1.1.6 mpg in plane umbenennen
plane <- mpg
# 1.1.7 die vektoren und Matritzen löschen
rm(d, grid, vals)


# 2. grundgrafik festlegen festlegen
# 2.1.Plott erstellen
p <- plot_ly(data = mtcars,
             x = ~ disp,
             y = ~ hp,
             z = ~ mpg,
             opasity = 0.6) %>%
  add_markers()

# 2.1 Die Regressionsfläche einfügen
reg_plott_5 <- p %>%
  add_surface(x = ~ disp,
              y = ~ hp,
              z = ~ plane,
              showscale = F)

reg_plott_5
## Warning: 'scatter3d' objects don't have these attributes: 'opasity'
## Valid attributes include:
## 'connectgaps', 'customdata', 'customdatasrc', 'error_x', 'error_y', 'error_z', 'hoverinfo', 'hoverinfosrc', 'hoverlabel', 'hovertemplate', 'hovertemplatesrc', 'hovertext', 'hovertextsrc', 'ids', 'idssrc', 'legendgroup', 'legendgrouptitle', 'legendrank', 'line', 'marker', 'meta', 'metasrc', 'mode', 'name', 'opacity', 'projection', 'scene', 'showlegend', 'stream', 'surfaceaxis', 'surfacecolor', 'text', 'textfont', 'textposition', 'textpositionsrc', 'textsrc', 'texttemplate', 'texttemplatesrc', 'transforms', 'type', 'uid', 'uirevision', 'visible', 'x', 'xcalendar', 'xhoverformat', 'xsrc', 'y', 'ycalendar', 'yhoverformat', 'ysrc', 'z', 'zcalendar', 'zhoverformat', 'zsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'
## Warning: 'surface' objects don't have these attributes: 'opasity'
## Valid attributes include:
## '_deprecated', 'autocolorscale', 'cauto', 'cmax', 'cmid', 'cmin', 'coloraxis', 'colorbar', 'colorscale', 'connectgaps', 'contours', 'customdata', 'customdatasrc', 'hidesurface', 'hoverinfo', 'hoverinfosrc', 'hoverlabel', 'hovertemplate', 'hovertemplatesrc', 'hovertext', 'hovertextsrc', 'ids', 'idssrc', 'legendgroup', 'legendgrouptitle', 'legendrank', 'lighting', 'lightposition', 'meta', 'metasrc', 'name', 'opacity', 'opacityscale', 'reversescale', 'scene', 'showlegend', 'showscale', 'stream', 'surfacecolor', 'surfacecolorsrc', 'text', 'textsrc', 'type', 'uid', 'uirevision', 'visible', 'x', 'xcalendar', 'xhoverformat', 'xsrc', 'y', 'ycalendar', 'yhoverformat', 'ysrc', 'z', 'zcalendar', 'zhoverformat', 'zsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'

Formate

Ein#Header1

Dicke Überschrift

Dick und kursive Überschrift 1

Header2

Header3

Header 4

Header 5
Header 6: Das ist die letzte Ebene