Migrationsmatrix Rechnung
Migrationsmatrix Rechnung
Hallo!
Ich hatte früher mal was gelernt, wo mir nun temporär abhanden gekommen ist, Migrationsmatrizen aka Übergangsmatrizen.
Gegeben sei eine Menge A mit Untermengen A1, A2, A3, ...
deren Elementanzahlen als Vektor a bekannt ist.
Weiterhin migrieren die Elemente zwischen den Untermengen und die Übergangswahrscheinlichkeiten sind bekannt.
Wie muss ich nun die Übergangswahrscheinlichkeiten in eine Migrationsmatrix M schreiben, damit ich in Matritzenrechnung rechnen kann
a(t=1)= a(t=0) %*% M
oder ähnlich
Consuli
Ich hatte früher mal was gelernt, wo mir nun temporär abhanden gekommen ist, Migrationsmatrizen aka Übergangsmatrizen.
Gegeben sei eine Menge A mit Untermengen A1, A2, A3, ...
deren Elementanzahlen als Vektor a bekannt ist.
Weiterhin migrieren die Elemente zwischen den Untermengen und die Übergangswahrscheinlichkeiten sind bekannt.
Wie muss ich nun die Übergangswahrscheinlichkeiten in eine Migrationsmatrix M schreiben, damit ich in Matritzenrechnung rechnen kann
a(t=1)= a(t=0) %*% M
oder ähnlich
Consuli
Irmgard.
Re: Migrationsmatrix Rechnung
Hallo consuli,
stell Dir vor, zum Zeitpunkt t0 wäre nur die Menge A1 belegt (z.B. 100) und alle anderen Mengen A2, A3, ... hätten 0 Elemente. Dann ist klar, für den Übergang der Elemente aus A1 in eine andere Menge ist die erste Zeile der Matrix M verantwortlich ...
Dein Vektor a.t0 muss als Zeilenvektor interpretiert werden. Der Vektor a.t1 <- a.t0 %*% M ist wieder ein Zeilenvektor.
Gruß, Jörg
stell Dir vor, zum Zeitpunkt t0 wäre nur die Menge A1 belegt (z.B. 100) und alle anderen Mengen A2, A3, ... hätten 0 Elemente. Dann ist klar, für den Übergang der Elemente aus A1 in eine andere Menge ist die erste Zeile der Matrix M verantwortlich ...
Dein Vektor a.t0 muss als Zeilenvektor interpretiert werden. Der Vektor a.t1 <- a.t0 %*% M ist wieder ein Zeilenvektor.
Gruß, Jörg
Re: Migrationsmatrix Rechnung
... und passt genau!
Jetzt habe ich nur noch eine kleine Erweiterung.
Ich brauche nun noch den repräsentativen (mittleren) Anzahlvektor a* für eine Periode mit T Migrationen (von t=0 bis t=T). Z.B. sei T= 10. Entspricht der representative Anzahlvektor a* dann a.t4.5 ? Müsste ja eigentlich so sein, wenn sich die Migrationswahrscheinlichkeiten (ohne Wachstum oder Rezession, wovon ich ausgehe) immer zeilenweise zu 1 addieren. Wie berechne ich dann die halbe Migration?
Und wie schreibe ich das ganze für die Dokumentation dann in einer allgemeinen mathematischen Formel für T Perioden? Es gibt ja kein Matrix-Reihen-Multiplikations-Zeichen!
Consuli
Jetzt habe ich nur noch eine kleine Erweiterung.
Ich brauche nun noch den repräsentativen (mittleren) Anzahlvektor a* für eine Periode mit T Migrationen (von t=0 bis t=T). Z.B. sei T= 10. Entspricht der representative Anzahlvektor a* dann a.t4.5 ? Müsste ja eigentlich so sein, wenn sich die Migrationswahrscheinlichkeiten (ohne Wachstum oder Rezession, wovon ich ausgehe) immer zeilenweise zu 1 addieren. Wie berechne ich dann die halbe Migration?
Und wie schreibe ich das ganze für die Dokumentation dann in einer allgemeinen mathematischen Formel für T Perioden? Es gibt ja kein Matrix-Reihen-Multiplikations-Zeichen!
Consuli
Irmgard.
Re: Migrationsmatrix Rechnung
prima
Wenn ich Dich richtig verstanden habe hast Du jetzt 10 verschiedene Matrizen M_i, die nacheinander wirken (Schritt für Schritt bzw. Jahr für Jahr o.w.a.i) und die durchschnittliche Migrationsmatrix für die Hälfte des Zeitraums, richtig?Jetzt habe ich nur noch eine kleine Erweiterung.
Ich brauche nun noch den repräsentativen (mittleren) Anzahlvektor a* für eine Periode mit T Migrationen (von t=0 bis t=T). Z.B. sei T= 10. Entspricht der representative Anzahlvektor a* dann a.t4.5 ? Müsste ja eigentlich so sein, wenn sich die Migrationswahrscheinlichkeiten (ohne Wachstum oder Rezession, wovon ich ausgehe) immer zeilenweise zu 1 addieren. Wie berechne ich dann die halbe Migration?
Du kannst Dir eine Funktion schreiben, die eine Liste von Matrizen als Argument nimmt und als Ergebnis deren Produkt zurückliefert.Und wie schreibe ich das ganze für die Dokumentation dann in einer allgemeinen mathematischen Formel für T Perioden? Es gibt ja kein Matrix-Reihen-Multiplikations-Zeichen!
Mit der Quadratwurzel aus diesem Produkt ist es etwas tricky
(andererseits auch wieder ziemlich einfach, wenn man den Kunstgriff kennt):
Man kann beliebige Funktionen einer Matrix berechnen z.B. sin(A) oder e^A - aber nicht wie R es meint elementweise - sondern in einem korrekten algebraischen Sinn, wenn man eine Reihenentwicklung verwendet, die (falls man Glück hat) konvergiert.
Du benötigst also eine Taylorreihe für die Funktion sqrt(A).
Code: Alles auswählen
A <- matrix(c(0.85, 0.05, 0.10, 0.07, 0.90, 0.03, 0.08, 0.02, 0.90), 3, byrow = TRUE)
A
m <- nrow(A)
n <- 5 # Anzahl der Ableitungen
z <- c(1, seq(1, by=2, length.out = n-1))
fi <- -1
S <- diag(x=1, m,m) # hier wird der Wert für sqrt(A) berechnet
Delta <- A - S
Delta.i <- S
for (i in 1:n) {
fi <- -fi*z[i]/2/i # Koeffizient im i-ten Glied der Reihe
Delta.i <- Delta.i %*% Delta
S <- S + fi*Delta.i
print(S)
}
S %*% S ### Probe
A
p.s.:
ich schau mal, ob sich alternativ ein Algorithmus verwenden lässt, den man bei der Berechnung der Quadratwurzel mit einem Abakus einsetzt.
(Es gibt einige Verfahren, um mit einem Soroban eine Quadratwurzel auszurechnen. Ich habe folgendes im Sinn: https://de.wikipedia.org/wiki/Heron-Verfahren)
Re: Migrationsmatrix Rechnung
Auch das Verfahren von Heron funktioniert:
Da es sich hierbei um das Newton-Verfahren für die iterative Berechnung einer Nullstelle handelt, konvergiert es quadratisch.
Gruß, Jörg
Code: Alles auswählen
#### Heron https://de.wikipedia.org/wiki/Heron-Verfahren
A <- matrix(c(0.85, 0.05, 0.10, 0.07, 0.90, 0.03, 0.08, 0.02, 0.90), 3, byrow = TRUE)
A
m <- nrow(A)
S <- diag(x=1, m,m) # hier wird der Wert für sqrt(A) berechnet
n <- 3 # Anzahl der Iterationen
for (i in 1:n) {
S <- 0.5*(S + solve(S, A))
print(S)
}
S %*% S ### Probe
A
Gruß, Jörg
Re: Migrationsmatrix Rechnung
Das Problem der ungeraden mittleren Periode habe ich einfach schlank durch aufrunden auf eine gerade Totalperiodenlänge gelöst.
Jetzt ist nur noch die mathematische Formel offen.
Jetzt ist nur noch die mathematische Formel offen.
consuli hat geschrieben:Und wie schreibe ich das ganze für die Dokumentation dann in einer allgemeinen mathematischen Formel für T Perioden? Es gibt ja kein Matrix-Reihen-Multiplikations-Zeichen!
Nein, nix R will ich wissen. Ich brauche nur dieses mathematische Formelzeichen groß PI zum verketten von Faktoren! Nur mit Aadaption für Matrizenmultiplikation.jogo hat geschrieben:Du kannst Dir eine Funktion schreiben, die eine Liste von Matrizen als Argument nimmt und als Ergebnis deren Produkt zurückliefert.
Irmgard.
Re: Migrationsmatrix Rechnung
so, jetzt verlassen wir definitiv das Thema R.
(deshalb auch nachfolgend nicht mehr R-Operator für die Matrizenmultiplikation sondern mathematische Symbolik)
Was passt Dir denn an dem großen Pi nicht? Es ist in der Mathematik gut genug für das Aufmultiplizieren von natürlichen Zahlen, ganzen Zahlen, rationalen Zahlen, reellen Zahlen und auch komplexen Zahlen ohne dass jemand die Notwendigkeit empfand, für eine neue Menge von Objekten jeweils ein neues Symbol einzuführen.
Wenn Du das Produktzeichen vermeiden möchtest und mit etwas mehr Schreibaufwand etwas mehr Klarheit haben möchtest, kannst Du die übliche Auflösung des Symbols verwenden:
M_gesamt := M_1 * ... * M_10
Nun soll eine Matrix M_halbeDauer bestimmt werden, so dass:
M_halbeDauer * M_halbeDauer = M_gesamt
Gruß, Jörg
Re: Migrationsmatrix Rechnung
Für die normale (Skalar)Multiplikation wird in der Mathematik i.d.R. ein Punkt oder gar kein Zeichen verwendet, während bei der Matrizenmultiplikation oft ein kleines "x" verwendet wird. Ich hatte nun gedacht, dass das Produktkettenzeichen Pi nur für (Skalar)Multiplikationen verwendet wird. Aber das ist nicht so?
Consuli
Consuli
Irmgard.