Faltung von stetigen Zufallsvariablen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
pat_the_kid

Faltung von stetigen Zufallsvariablen

Beitrag von pat_the_kid »

Hallo,

ich arbeite gerade an meiner Masterarbeit , es gehtallgemein um Versichergunsmathematik. Da mein Dozent mir keine "echten" Daten besorgen konnte für die Arbeit, musste ich selber welche erzeugen.
Nun habe ich 3 Datensätze erzeugt: Weibull-, lognormal- und Frechetverteilt. Die 3 Datensätze sollen Schadenshöhe simulieren. Ich habe die jeweiligen Datensätze bearbeitet und möchte jetzt aus den drei einen einzigen Datensatz erzeugen um zu vergleichen.
So bin in R vorgegangen um die Daten zu erzeugen:
  • weibull.data<-rweibull(2000,1,2000)
  • lnormal.data<-rlnorm(10000,7,0.09)
  • frechet.data<-rfrechet(15, loc=6, scale=1200000, shape=10000)
In R bzw. Package stats gibt es die Funktion "convolve" ,die das erledigen soll aber sie scheint nur für diskreten Funktionen zu funktionieren.
Kennt sich hier einer von euch damit aus ? Ich wäre für jede Hilfe, jeden Ansatz dankbar...
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Faltung von stetigen Zufallsvariablen

Beitrag von bigben »

Hallo!
pat_the_kid hat geschrieben: Mi Sep 05, 2018 3:43 pmund möchte jetzt aus den drei einen einzigen Datensatz erzeugen um zu vergleichen.
Die Aufgabe habe ich noch nicht verstanden. Was soll mit den dreien passieren, dass einer daraus wird? Ich habe natürlich in der Wikipedia nachgeschaut, dort steht Faltung und Konvolution für etwas, was man mit Funktionen macht. Du willst aber offensichtlich etwas mit Stichproben machen. Was denn?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
pat_the_kid

Re: Faltung von stetigen Zufallsvariablen

Beitrag von pat_the_kid »

Hallo Bernhard,
danke erstmal für die schnelle Antwort.
In den 3 Arrays wurden Zahlen erzeugt. Ich habe also 3 verschiedene Datensätze angelehnt an 3 Verteilungen. Für jeden einzelnen Datensatz musste ich ein paar Analysen durchführen. Nun möchte ich aus den 3 Arrays, einen einzigen Array erzeugen mit einer "geeigneten" Faltung. Die 3 sind von der Länge her unterschiedlich, deswegen würde z.B. eine einfache Addition nicht infrage kommen. Wie erzeuge ich aus 3 stetigen Zufallsvariablenfunktionen eine einzige ? Ich hoffe es ist etwa klarer, was ich erreichen möchte :D
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Faltung von stetigen Zufallsvariablen

Beitrag von jogo »

Hallo Pat,

willkommen im Forum!
Kannst Du bitte ein Beispiel angeben, wie Du bei einer diskreten Verteilung die Faltung mit convolve() aus dem Paket stats durchführen würdest?
Reicht für das Zusammenführen der Zufallszahlenreihen das einfache Aneinanderhängen mit c() :?:

Code: Alles auswählen

x <- 1:5
y <- 10:13
c(x, y)
oder muss noch etwas anderes getan werden?
Wenn es sonstige Literatur gibt zu dem, was Du machen möchtest, dann nenne sie bitte.

und noch etwas:
Bei meiner Installation von R ist die Funktion rfrechet() nicht dabei. Hast Du die selber programmiert?
Wenn ja, bitte den Quelltext zeigen; ansonsten die Quelle angeben.

Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Faltung von stetigen Zufallsvariablen

Beitrag von bigben »

Wenn Du geeignet in Anführungszeichen schreibst wird dadurch nicht klarer, wofür etwas geeignet sein soll bzw wann eine Zusammenführung geeignet ist.
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
pat_the_kid

Re: Faltung von stetigen Zufallsvariablen

Beitrag von pat_the_kid »

@Jogo
danke für deine Reaktion. Die Funktion convolve funktioniert folgendermaßen:
Usage
convolve(x, y, conj = TRUE, type = c("circular", "open", "filter"))
Arguments
x, y
numeric sequences to be convolved, of the same length for type = "circular", the default. For type = "filter", y must not be longer than y (and typically is much shorter).

conj
logical; if TRUE, take the complex conjugate before back-transforming (default, and used for usual convolution).

type
character; partially matched to "circular", "open", "filter". For "circular", the two sequences are treated as circular, i.e., periodic.

For "open" and "filter", the sequences are padded with 0s (from left and right) first; "filter" returns the middle sub-vector of "open", namely, the result of running a weighted mean of x with weights y.
type= circular wenn die beiden Arrays dieselbe Länge haben, sonst ist type="filter". Hier ein Beispiel:

Code: Alles auswählen

n <- length(x <- -20:24)
y <- (x-10)^2/1000 + rnorm(x)/8

top<- function(y)
       convolve(y, c(1,2,1)/4, type = "filter")
Das Aneinanderreihen der Zahlen mit c() ist auf jeden Fall nicht das, was ich möchte. Ich möchte eine neue Verteilung, die aus der Summe der 3 Verteilungen erzeugen. Mit einem neuen EW und Var. Gemäß der folgende Formel folge dem Link
http://statweb.stanford.edu/~susan/cour ... de114.html. Es geht um die Summe stetigen Verteilungen.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Faltung von stetigen Zufallsvariablen

Beitrag von jogo »

Hallo Pat,

Du hast mir meine Frage nach der Funktion rfrechet() nicht beantwortet. :?
pat_the_kid hat geschrieben: Do Sep 06, 2018 12:44 pm Das Aneinanderreihen der Zahlen mit c() ist auf jeden Fall nicht das, was ich möchte. Ich möchte eine neue Verteilung, die aus der Summe der 3 Verteilungen erzeugen. Mit einem neuen EW und Var. Gemäß der folgende Formel folge dem Link
http://statweb.stanford.edu/~susan/cour ... de114.html. Es geht um die Summe stetigen Verteilungen.
der Link beschreibt die Konstruktion der neuen Dichtefunktion mit Hilfe der beiden Dichtefunktionen f() und g()
In R kannst Du üblicherweise mit d..() die Dichte berechnen, die Funktionen r...() liefern Realisierungen entsprechend der angegebenen Verteilung, q...() für Quantile.
Die Funktion Für die Berechnung bestimmter Integrale ist: integrate(), so dass zumindest Funktionwerte der Convolution berechnen kannst.
Bitte schau auch mal in die TaskViews auf CRAN: https://cran.r-project.org/web/views/Distributions.html
Vielleicht finden sich dort die passenden Werkzeuge. Dort steht u.a.:
* _Transformation _: Lebesgue decomposition are implemented in [distr](https://cran.r-project.org/web/packages ... index.html), as well as Convolution, Truncation and Huberization of distributions. Furthermore, [distr](https://cran.r-project.org/web/packages ... index.html) provides distribution of the maximum or minimum of two distributions. See Object-orientation above.

Was ich leider immer noch nicht verstehe:
wie soll der Übergang aus den drei Reihen von Realisierungen von Zufallszahlen mit Hilfe der Formel http://statweb.stanford.edu/~susan/cour ... de114.html geschehen, da dort "nur" die Dichtefunktionen eingehen.

Den Verknüpfung von drei Dichtefunktionen geschieht iterativ, ist das richtig? Also:
Convolution(Convolution(A, B), C)
Welche algebraischen Regeln gelten für den Operator Convolution? Ist er wenigstens assoziativ? Oder ist er sogar kommutativ?

Gruß, Jörg
consuli
Beiträge: 479
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Faltung von stetigen Zufallsvariablen

Beitrag von consuli »

@ pat_the_kid

Beschreib doch zunächst mal mathematisch, was es werden soll. Was ist das Dein Ziel? Insbesondere, brauchst Du eine statistische Faltung oder mathematische Faltung ?

Es gibt eine Million Funktionen in R. Man kann nicht alle kennen und hat auch keine Lust diese eine genau jetzt zu lernen, nur weil Du gerade eine Frage dazu hast.

Consuli
Irmgard.
Antworten