Seite 1 von 2

Problem bei einem Probit Modell Vorhersage

Verfasst: Mo Mai 27, 2019 4:13 pm
von jotk
Hallo Zusammen,

ich sitze seit länger Zeit an einer Ausarbeitung zum Thema der Rezessions Vorhersage und muss dazu das Thema auch empirisch bearbeiten. Nun habe ich bereits verschiedene R-Kurse belegt und bin eigentlich mit den Grundlagen vertraut, allerdings komme ich in diesem Fall einfach nicht weiter, vllt liegt es auch daran dass ich mich schon zu viel mit dem Thema beschäftigt habe und nun irgendwie den Faden verloren habe. Deshalb dachte ich einmal ich versuche es auf diese weise, evtl. kann mir ja jemand weiter helfen.

Ich möchte mit Hilfe eines Probit-Modells über die Zinsstruktur(langfristige Zinsen - kurzfristige Zinsen) Rezessionen vorhersagen. Das wurde auch schon viel in Fachzeitschriften etc. gemacht, leider finde ich nichts was mir bei meinem Problem weiter hilft. Im optimal Fall soll bei einer negativen Zinsstrukutr eine Hohe Wahrscheinlichkeit für eine Rezession herauskommen.

Ich habe also einen Datensatz mit einer binären Variable (1=Rezession, 0=keine Rezession) und den dazugehörigen Wert der oben genannten Differenz.
Mein erster Versuch war einmal, ein ganz "normal" Probit Regression durchzuführen, was auch soweit funktioniert habe. (nber steht für die Zeitreihe der binären Variable und ts_ts für den Term Spread)

Code: Alles auswählen

glm(formula=ts_nber~ts_ts, family = binomial(link="probit"))
summary(prob1)
predict(prob1, ts_nber, type="response")

Call:
glm(formula = ts_nber ~ ts_ts1, family = binomial(link = "probit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3024  -0.5671  -0.4450  -0.3556   2.4854  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -1.00803    0.06734 -14.969  < 2e-16 ***
ts_ts1      -0.20465    0.03879  -5.276 1.32e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 496.84  on 650  degrees of freedom
Residual deviance: 468.61  on 649  degrees of freedom
AIC: 472.61

Number of Fisher Scoring iterations: 5

summary(pred1)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
0.04105 0.07424 0.10800 0.12750 0.16168 0.57180
Jetzt habe ich versuch dieses Ergebniss zu interpretieren und komme dabei leider an meine Grenzen. Da ich nicht genau weis, was R macht hinter dem Befehl. Hinter dem Minimum (0.04105) steht der größte Zinsstrukturwert und hinter dem Maximal Wert (0.57) der kleinste, also müsste das mit der Theorie passen, dass umso negativer diese Differenz ist, umso höher die Wahrscheinlichkeit für eine Rezession (Y=1).

Wie lässt sich das nun genau interpretieren was R macht? Mein Datensatz sind monatle Daten von 1965-01 bis 2019-03. Bedeutet dieses Ergebniss einfach nur, dass in dem Monat wo die Differenz besonders niedrig ist, eine Hohe Wahrscheinlichkeit auf eine Rezession besteht?

Wie könnte ich nun in R fortfahren und verschiedene Lags einbauen, damit ich in etwa herausbekomme bspw. für eine 10% Rezessionswahrscheinlichkeit muss die Zinsstruktur -0.1 erreichen und dies zeitlich versetzt untersuchen, also bspw. ein Quartal oder vier Monate im vorraus?

Schonmal Vielen Dank ich hoffe ich hab den Rahmen dieses Forums nicht ein wenig gesprengt bei der Menge die ich geschrieben habe.

Würde mich wirklich sehr über jede Bemühung, mir bei meinem Problem weiterzuhelfen, freuen.

Edit: bigben hat code-Tags stat i-Tags gesetzt.

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Mo Mai 27, 2019 4:39 pm
von bigben
Hi!
jotk hat geschrieben: Mo Mai 27, 2019 4:13 pmBedeutet dieses Ergebniss einfach nur, dass in dem Monat wo die Differenz besonders niedrig ist, eine Hohe Wahrscheinlichkeit auf eine Rezession besteht?
Nein. Das wäre ja nur eine qualitative Aussage. Das Ergebnis ermöglicht aber auch eine quantitative Prognose. Im Zentrum jedes generalisierten linearen Modells steht eine lineare Funktion. In Deinem Modell lautet die

y = - 0.20465 * ts_ts1 - 1.00803

Jetzt musst Du mit dieser linearen Funktion errechnete y-Werte noch in die Link-Funktion einsetzen. An dieser Stelle kommt es nun darauf an, wieviel Du von der Probit-Regression verstanden hast. Eine nicht ganz schlechte Einführung in logit-Fregression hat der Forenbetreiber hier eingestellt: https://www.youtube.com/watch?v=FGhU4j4Us1M Der Unterschied zu Probit besteht nur in der link-Funktion: https://www.methodsconsultants.com/tuto ... it-models/

Hilft dann das?:

Code: Alles auswählen

par(mfrow=c(2,1), mar= c(4.2,5,1,1))
curve(pnorm(- 0.20465 *x - 1.00803), from = -20, to = 10,
      ylab ="Wahrscheinlichkeit", xlab="ts_ts1")
abline(h=.10, lty=3)
curve(pnorm(- 0.20465 *x - 1.00803), from = 0.5, to = 2.5,
      ylab ="Wahrscheinlichkeit", xlab="ts_ts1", yaxt="n")
axis(2, at = seq(0,1,.02))
abline(h=.10, lty=3)
abline(v=seq(1,2,.1), lty=2, col="grey")
points((qnorm(.1)+1.008)/-0.205, .1, pch=18, col="red")
Wie könnte ich nun in R fortfahren und verschiedene Lags einbauen
Bitte beschreibe konkret, was Du genau machen möchtest. Solche unpräzisen ("zum Beispiel") Fragen führen gerne mal dazu, dass Forumsmitglieder Programmieraufwand betreiben und nachher kommt heraus, dass das umsonst war, weil die eigentliche Frage doch anders lautete.

LG,
Bernhard

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Mo Jun 10, 2019 2:08 pm
von jotk
Viele Dank schon einmal für die Antwort. Ich habe mich nun noch etwas besser eingelesen und versucht mein Problem ein wenig zu präzisieren. Leider bin ich noch nicht so fit in diesen Themen, also schonmal sorry falls etwas unverständlich rüber kommt

Meine errechnete Funktion:

y = - 0.20465 * ts_ts1 - 1.00803

Ich könnte nun verschiedene Werte für TS (term spread) einsetzen und würde dafür die Wahrscheinlichkeit für Y=1 bekommen.

Ich möchte aber gerne den genau anderen Weg nehmen und möchte für verschiedene Wahrscheinlichkeiten für eine Rezession, einen Wert für den Termspread bekommen. Also die Wahrscheinlichkeit für Y=1 ist 10% wenn der term spread den Wert X annimmt.

Frage 1: Wie wäre es möglich die Wahrscheinlichkeiten für Y=1, für einen bestimmten X- Wert zu bekommen? ( Rezessionswahrscheinlichkeit von Y% falls der Regressor den Wert X annimmt)

Frage 2: Ist es möglich in R dann auch diese Wahrscheinlichkeiten mit einer Zeitverzögerung zu errechnen. Wie hoch ist die Wahrscheinlichkeit einer Rezession ein Quartal im Vorraus?

Schon einmal vielen Dank für die Anwort und ich hoffe ich habe es etwas besser dargestellt

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Mo Jun 10, 2019 5:02 pm
von bigben
Hallo,
jotk hat geschrieben: Mo Jun 10, 2019 2:08 pmMeine errechnete Funktion:

y = - 0.20465 * ts_ts1 - 1.00803

Ich könnte nun verschiedene Werte für TS (term spread) einsetzen und würde dafür die Wahrscheinlichkeit für Y=1 bekommen.
Es scheint so, als hättest Du die Probit-Regression noch nicht ausreichend verstanden. Wenn Du in die Formel oben ts_ts1 als Null einsetzt, dann kommt ein negativer Wert heraus. Es gibt aber keine negativen Wahrscheinlichkeiten. Also fehlt da noch ein wesentlicher Zwischenschritt, den Du Dir im Statistikbuch im Kapitel Logit/Probit-Regression anlesen und klar machen musst.
Ich möchte aber gerne den genau anderen Weg nehmen und möchte für verschiedene Wahrscheinlichkeiten für eine Rezession, einen Wert für den Termspread bekommen.

Wenn Du weist, wie man von einem ts_ts1 zur Wahrscheinlichkeit kommt, dann kannst Du diese Gleichung leicht umformen. Sie nach ts_ts1 auflösen. Wenn Du sie umgeformt hast, musst Du nur noch wissen, wie eine darin verwendete Funktion in R heißt und alles ist ganz einfach.
Nebenher habe ich Dir am 27. Mai bereits Code gepostet, der den 10%-Wert berechnet und in eine Kurve einzeichnet. Die Formel für die Wahrscheinlichkeitskurve und auch deren Umkehrfunktion stehen also seit fast zwei Wochen oben. Du hast Dir den Code nur entweder nicht richtig angeschaut oder kannst ihn noch nicht verstehen. Aber wenn Du die Gleichung oben aufgestellt und umgeformt hast, dann findest Du die umgestellte Gleichung im Code wieder und weißt dann auch, wie die noch benötigte R-Funktion heißt.
Frage 2: Ist es möglich in R dann auch diese Wahrscheinlichkeiten mit einer Zeitverzögerung zu errechnen. Wie hoch ist die Wahrscheinlichkeit einer Rezession ein Quartal im Vorraus?
Ja, natürlich. Du musst dann halt die Spalten im Datensatz so gegeneinander verschieben, dass immer das TS von t-1 in der gleichen Zeile steht wie die Rezession zum Zeitpunkt t.

Dafür schenke ich Dir zwei wertvolle Funktionen: drop.first.observation() und drop.last.observation(), die wie folgt definiert sind, und die Du in Deinem Code gerne genau so verwenden darfst:

Code: Alles auswählen

drop.first.observation <- function(v) v[-1]
drop.last.observation <- function(v) v[-length(v)]
Sie funktionieren ganz einfach:

Code: Alles auswählen

print(1:5)
print(drop.first.observation(1:5))
print(drop.last.observation(1:5))
Damit kann man ein Quartal einer nachfolgenden Beobachtung gegenüberstellen. Versuche, das folgende Beispiel zu verstehen, dann kannst Du später print durch glm ersetzen:

Code: Alles auswählen

quartal <- 1:10
beobachtung <- 1:10

print(data.frame(q = quartal, b = beobachtung))

# jetzt kürzen wir beide Beobachtungsreihen, eine vorne und eine hinten, und 
# schon steht das frühere Quartal neben der späteren Beobachtung:
print(data.frame(q = drop.last.observation(quartal),
                 b = drop.first.observation(beobachtung)))
LG,
Bernhard

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Di Jun 11, 2019 3:04 pm
von jotk
Vielen Dank noch einmal, ich komm jetzt auf gute Ergebnisse, dank der Umstellung !
Vielen Dank für die Mühen!

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Di Jun 11, 2019 3:13 pm
von jogo
Es können auch die Funktionen head() und tail() verwendet werden (für Vektoren und Dataframes):

Code: Alles auswählen

BOD
tail(BOD, -1)
head(BOD, -1)
Gruß, Jörg

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Di Jun 11, 2019 4:27 pm
von bigben
@jotk Freut mich

@jogo Danke, head und tail mit negativen Argumenten kannte ich noch nicht.

LG,
Bernhard

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Mi Jun 12, 2019 9:32 am
von jotk
Hallo nochmal,

es hat sich leider doch nochmal eine Unverständlichkeit meinerseits aufgetan, was die R-Befehle angeht.

Und zwar habe ich nun mit Hilfe der umgestellten Formeln ((qnorm(0.1)+beta0)/beta1) nun die Wahrscheinlichkeiten bekommen:

Code: Alles auswählen

Geschätzte Wahrscheinlichkeiten
====================================================
Wahrscheinlichkeit (%)           Zinsspread
 t-12         
----------------------------------------------------
1                                  3.8076522651964  
10                                 2.3481337787869  
25                                 1.50010442159123 
50                                0.557882237899001 
60                                0.203971358335126 
70                                -0.174674181334135
80                                -0.617812717151518
90                                 -1.2323693029889

Nun habe ich aber über den predict() Befehl der Probit Regression folgendes angezeigt bekommen:

Code: Alles auswählen

> pred1_t12 = predict(pr1_t12, type="response")
> summary(pred1_t12)

     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
0.0001808 0.0118241 0.0559870 0.1288157 0.2093989 0.9329716
und hinter den 0.93 steht ein Zinsspread von -2.65 was ja zur oben gezeigten Tabbelle nicht wirklich passt.

Interpretiere ich den Vorgang hinter predict() falsch? Ich dachte der predict() Befehl übernimmt gerade den Vorgang die einzelnen X Werte in die Probit Gleichng einzusetzen und diese dann mit Hilfe der standard normal cdf in Wahrscheinlichkeiten umzurechnen. Habe bereits versucht zu verstehen was der Befehl mit der Probit Gleichung macht, leider aber nichts passendes gefunden.

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Mi Jun 12, 2019 11:14 am
von bigben
Hallo,

ich bin nicht sicher, ob ich die letzte Frage richtig verstanden habe. Was genau heißt "hinter den 0,93 steht ein Zinsspread von -2,65"? Bedeutet das einen Unterschied zwischen der händisch ausgerechneten Vorhersage und der mit predict ausgerechneten Vorhersage, oder bedeutet das einen Unterschied zwischen der Vorhersage und der Beobachtung?

Ich vermute letzteres, und darüber darfst Du Dich nicht wundern: Die Vorhersage ist immer nur so gut wie das Modell. In Deinem Eingangspost steht:

Code: Alles auswählen

    Null deviance: 496.84  on 650  degrees of freedom
Residual deviance: 468.61  on 649  degrees of freedom
Das Probit-Modell kann also nur ganz wenig der Varianz im Datensatz aufklären, will sagen, die Beobachtungen sind so einfach nicht zu erklären. Jetzt bezieht sich diese Varianzaufklärung auf das Modell ohne Zeitverschiebung und Du hast die entsprechende Beurteilung mit Zeitverschiebung noch nicht gepostet. Ist die Residual deviance dort denn sehr viel kleiner als die Null deviance?

Wahrscheinlich solltest Du Dir mal in ein Streudiagramm die Zinsspreads ein Quartal zuvor auf der x-Achse und die Rezession als 0 und 1 auf der y-Achse auftragen und Dich fragen, wie gut eine Probit-Kurve diesen Beobachtungen wohl beschreibt.

LG,
Bernhard

Re: Problem bei einem Probit Modell Vorhersage

Verfasst: Mi Jun 12, 2019 11:37 am
von jotk
Also der predict() Befehl gibt mir für jede Beobachtung von x (Term spread) eine Wahrscheinlichkeit, dass y=1 ist? Das war damit gemeint dass wenn ich den niedrigsten X-Wert (-2.65) in meine Gleichung einrechne und mit Hilfe der standard normal cdf tabelle diesen Wert nachschaue, er mir 0.93 ausgibt, was dem selben Wert entspricht, der auch predict() ausgibt.
Allerdings kommt über die umgestellte Formel für ~90% ein X-Wert von ~-0.123 heraus.

Mein Probit Output für 12 Monate zeitversetzt

Code: Alles auswählen

Call:
glm(formula = D1$NBERt12 ~ D1$zst12, family = binomial(link = "probit"))

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-2.20625  -0.46832  -0.22261  -0.09573   2.84796  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -0.40016    0.09138  -4.379 1.19e-05 ***
D1$zst12    -0.71640    0.07413  -9.664  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 492.98  on 636  degrees of freedom
Residual deviance: 352.17  on 635  degrees of freedom
  (12 observations deleted due to missingness)
AIC: 356.17

Number of Fisher Scoring iterations: 6