Data Science, Machine Learning und KI
Kontakt
Content Hub
Blog Post

Korrelierte Zufallszahlen in R

  • Expert:innen Sebastian Heinz
  • Datum 14. Juni 2017
  • Thema
  • Format Blog
  • Kategorie Technology
Korrelierte Zufallszahlen in R

Das Erzeugen von korrelierten Zufallsvariablen ist einer der Kernpunkte bei der Programmierung von Simulationen. Aktienrenditen, Zeitreihen, MCMC-Algorithmen und viele weitere Verfahren verwenden können durch das Erstellen korrelierter Zufallszahlen verwendet werden.

Zerlegen der Korrelationsmatrix

Korrelierte Zufallszahlen können durch Multiplikation der n x p Matrix der Zufallswerte mit der gewünschten Cholesky-zerlegten Korrelationsmatrix C der Zufallswerte erzeugt werden. Eine Cholesky-Zerlegung lässt sich in R einfach mit dem Befehl chol() durchführen. Dieses Vorgehen findet z. B. Anwendung bei der Simulation von korrelierten Zeitreihenverläufen im Finance-Bereich (z.B. Aktienkursentwicklungen). In unserem Beispiel simulieren wir so die Renditen zweier Aktien und visualisieren diese in einem X-Y Streudiagramm nebst entsprechendem, linearen Fit. Hierzu bedienen wir uns eines Features in RStudio, mit dessen Hilfe man einfach, interaktive Plots erstellen kann. Hierzu wird das R Package manipulate benötigt, das zusammen mit RStudio installiert wird.

Interaktive Plots in RStudio mit Manipulate

manipulate() erzeugt Slider oder Checkboxen, die es dem Benutzer ermöglichen Parameter des Plots variieren zu lassen. In unserem Beispiel können folgende Parameter vom Benutzer bestimmt werden:

  • Korrelation der Zufallswerte r
  • Anzahl der Zufallsrenditen n
  • Mittelwert der Renditen m1 und m2
  • Standardabweichung der Renditen s1 und s2

Zu Beginn des Codes wird der „Seed“ von R, der Zufallszahlengenerator, fixiert, sodass bei wiederholter Ausführung des Codes die gleichen Zufallszahlen erzeugt werden. Dies geschieht mit der Funktion set.seed(). Nach Ausführung des Codes erscheint oben links im Plot-Fensten von RStudio ein kleines Zahnrad, das durch Klicken die interaktiven Parameter anzeigt, die Sie nun verändern können. Der Plot passt sich nach Einstellung des jeweiligen Parameters automatisch an. Der Code kann per Copy und Paste direkt nach RStudio übernommen werden. Viel Spaß beim Exerimentieren!


# Libraries laden
library(manipulate)
library(ggplot2)
 
# Seed
set.seed(123)
 
# Interaktive Grafik zur Darstellung von korrelierten Aktienrenditen
manipulate(
  # Plot
  qplot(x=X1, y=X2, xlab="Rendite Aktie X", ylab="Rendite Aktie Y",
        data=data.frame(matrix(nrow=n, ncol=2,
                        data=cbind(rnorm(n, m1, s1), rnorm(n, m1, s1))) %*%
                        chol(matrix(nrow=2, ncol=2, data=c(1, r, r, 1))))) +
        theme_bw() + 
        stat_smooth(method="lm"),
  # Slider
  r = slider(-0.99, 0.99),
  n = slider(100, 1000),
  m1 = slider(0, 0.1),
  s1 = slider(0.01, 0.05),
  m2 = slider(0, 0.1),
  s2 = slider(0.01, 0.05)
) # Ende manipulate

Zusammenfassung

Mit manipulate() lassen sich schnell interaktive Visualisierungen erstellen. Für größere Projekte im Bereich interaktive Visualisierung eignet sich Shiny, das HTML5/CSS/JavaScript Framework von RStudio. Hiermit können Sie komplexe Applikationen entwickeln, die im Intra- oder Internet veröffentlicht werden können. Falls Sie Fragen zum Thema interaktive Visualisierung haben sollten, stehen Ihnen unsere Experten unter info@statworx.com gerne zur Verfügung. Sebastian Heinz

Erfahre mehr!

Als eines der führenden Unternehmen im Bereich Data Science, Machine Learning und KI begleiten wir Sie in die datengetriebene Zukunft. Erfahren Sie mehr über statworx und darüber, was uns antreibt.
Über uns