Seite 3 von 4
Re: Aktienschätzung
Verfasst: Di Aug 28, 2018 9:40 am
von jogo
Hallo StatistikMensch,
da der Code so funktioniert für einen Monat, muss man ihn jetzt nur noch verallgemeinern, indem man ihn in eine Funktion packt.
Ich habe mal an der
data.table-Version weitergebastelt:
Code: Alles auswählen
library("data.table")
A <- fread("http://forum.r-statistik.de/download/file.php?id=306")
BetasDT <- function(Aktie) {
n <- 60
Fenster <- 1:n
Betai <- function(i) lm(Aktienrendite ~ Marktrendite, data=Aktie[i+Fenster,])$coefficients[2]
c(rep(NA, n-1), sapply(0:(nrow(Aktie)-n), Betai))
}
A[, Beta:=BetasDT(.SD), AktienNummer]
A[AktienNummer==1] ## Kontrolle
A <- na.omit(A)
myDelta <- function(S) {
Q <- S[, ntile(Beta, 2)]
S[Q==1, mean(Aktienrendite)] - S[Q==2, mean(Aktienrendite)] ## a100 - b100
}
A[, myDelta(.SD), Monats_id]
Hier noch mit der Anzahl der Beobachtungen pro Monats_id, womit auch die
NaNs eine Erklärung finden.
Die Funktion
ntile() ist aus dem Paket
dplyr. Bei Bedarf kann die Funktion
quantile() Ersatz schaffen.
... oder man kupfert den Quelltext von
ntile()
... oder man bastelt sich etwas mit
frank()
Gruß, Jörg
Re: Aktienschätzung
Verfasst: Fr Aug 31, 2018 8:51 am
von jogo
jogo hat geschrieben: ↑Di Aug 28, 2018 9:40 am
Die Funktion
ntile() ist aus dem Paket
dplyr. Bei Bedarf kann die Funktion
quantile() Ersatz schaffen.
... oder man kupfert den Quelltext von
ntile()
... oder man bastelt sich etwas mit
frank()
Hier eine Variante:
Code: Alles auswählen
fntile <- function (x, n) {
len <- sum(!is.na(x))
if (len == 0L) rep(NA_integer_, length(x))
else as.integer(floor(n * (frank(x) - 1)/len + 1))
}
Gruß, Jörg
Re: Aktienschätzung
Verfasst: Mo Sep 03, 2018 5:28 pm
von StatistikMensch
Hallo Jörg,
vielen Lieben Dank, das hat mir doch mal wieder gut weitergeholfen
Habe erst versucht den zweiten Teil des Codes, also alles was A<-na.omit(A) passierte separat durchlaufen zu lassen, funktioniert allerdings nicht. Packe ich es in die Beta-generierende Schleife funktioniert es perfekt!
Re: Aktienschätzung
Verfasst: Fr Sep 28, 2018 12:49 pm
von StatistikMensch
Hallo nochmal
Ich habe nochmal eine kleine Frage zur Überführung. Ich habe nun sämtliche Betastrukturen durchlaufen lassen (also mean(low-high), mean(high), mean(low))für verschiedene Beobachtungen. Wie kriege ich es hin, dass die Monatsvariable einem Datum zugeordnet wird, sodass ich es als Zeitreihe grafisch vergleichen kann? Würde es hier reichen, die Definition erst bei der Plottdarstellung der Zeitreihe zu ändern? Wäre super wenn es dafür einen automatisierten Befehl gäbe, denn es sind teilweise über 400 Monate.
LG
Re: Aktienschätzung
Verfasst: Sa Sep 29, 2018 2:32 pm
von jogo
Hallo Statistikmensch,
kannst Du mich bitte auf den aktuellen Stand bringen, was Du gerade betreibst im Sinne von
viewtopic.php?f=20&t=11
Ich habe wirklich keine Ahnung, was hier
low und
heigh sind und mit welchen Datenstrukturen Du gerade hantierst.
Gruß, Jörg
Re: Aktienschätzung
Verfasst: Do Okt 04, 2018 12:13 pm
von StatistikMensch
Guten Tag,
zunächst einmal, das Problem mit der Darstellung als Zeitreihe hatte sich von selbst gelöst, es ist nur eine kleine Einstellungssache gewesen
Ich habe den Code etwas ergänzt, da es bei der Berechnung der Qunitile doch etwas mehr Sinn macht hier ein paar mehr Beobachtungen zu haben.
Die Daten habe ich gemäß des Codes
Code: Alles auswählen
library("data.table")
A <- fread("http://forum.r-statistik.de/download/file.php?id=306")
BetasDT <- function(Aktie) {
n <- 60
Fenster <- 1:n
Betai <- function(i) lm(Aktienrendite ~ Marktrendite, data=Aktie[i+Fenster,])$coefficients[2]
c(rep(NA, n-1), sapply(0:(nrow(Aktie)-n), Betai))
}
A[, Beta:=BetasDT(.SD), AktienNummer]
A[AktienNummer==1] ## Kontrolle
A <- na.omit(A)
myDelta <- function(S) {
Q <- S[, ntile(Beta, 2)]
S[Q==1, mean(Aktienrendite)] - S[Q==2, mean(Aktienrendite)] ## a100 - b100
}
A[, myDelta(.SD), Monats_id]
durchlaufen lassen. Dabei habe ich allerdings
gewählt und dies für alle 10 Dezile durchlaufen lassen. Gibt es hier eine elegantere Schleife, sodass ich die 10 Zeitreihen direkt als ein Vektor abgreifen kann?
Ebenfalls fände ich es wichtig, für jedes Dezil den Mittelwert des dort verwendeten Betafaktors ebenfalls zu ermitteln.
Um das hier am Beispiel ein bisschen anschaulicher zu machen, würde ich vorschlagen es als
zu diskutieren.
Re: Aktienschätzung
Verfasst: Do Okt 04, 2018 5:40 pm
von jogo
StatistikMensch hat geschrieben: ↑Do Okt 04, 2018 12:13 pm
Die Daten habe ich gemäß dem Code
Code: Alles auswählen
library("data.table")
...
myDelta <- function(S) {
Q <- S[, ntile(Beta, 2)]
S[Q==1, mean(Aktienrendite)] - S[Q==2, mean(Aktienrendite)] ## a100 - b100
}
A[, myDelta(.SD), Monats_id]
durchlaufen lassen. Dabei habe ich allerdings
gewählt und dies für alle 10 Dezile durchlaufen lassen.
und wie sieht dann die Differenzbildung aus, also immer nur zwischen aufeinanderfolgenden Gruppen oder auch z.B. zwischen den Gruppen mit
Q==1 und
Q==3
Gruß, Jörg
Re: Aktienschätzung
Verfasst: Do Okt 04, 2018 10:35 pm
von StatistikMensch
Differenzen werden nicht gebildet.
Also einfach
Code: Alles auswählen
library("data.table")
...
myDelta <- function(S) {
Q <- S[, ntile(Beta, 5)]
S[Q==3, mean(Aktienrendite)]
}
A[, myDelta(.SD), Monats_id]
für bspw. hier das 3. Quintil.
Re: Aktienschätzung
Verfasst: Fr Okt 05, 2018 11:58 am
von jogo
also sowas:
Code: Alles auswählen
library("data.table")
fntile <- function (x, n) {
len <- sum(!is.na(x))
if (len == 0L) rep(NA_integer_, length(x))
else as.integer(floor(n * (frank(x) - 1)/len + 1))
}
A <- fread("http://forum.r-statistik.de/download/file.php?id=306")
BetasDT <- function(Aktie) {
n <- 60
Fenster <- 1:n
Betai <- function(i) lm(Aktienrendite ~ Marktrendite, data=Aktie[i+Fenster,])$coefficients[2]
c(rep(NA, n-1), sapply(0:(nrow(Aktie)-n), Betai))
}
A[, Beta:=BetasDT(.SD), AktienNummer]
A[AktienNummer==1] ## Kontrolle
na.omit(A)[, .SD[, mean(Aktienrendite), fntile(Beta, 3)], Monats_id]
oder
plus Kosmetik:
Code: Alles auswählen
B <- na.omit(A)[, .SD[, mean(Aktienrendite), fntile(Beta, 3)], Monats_id]
dcast(B, Monats_id ~ fntile)
Gruß, Jörg
Re: Aktienschätzung
Verfasst: Fr Okt 05, 2018 8:20 pm
von StatistikMensch
Vielen Dank, wie immer eine gute Idee von dir
Als letztes würde mich noch interessieren wie ich einfach für jeden Monat das durchschnittliche Beta aller Aktien berechne. Sinnvollerweise würde man diese Operation separat durchführen, wenn bereits alle Betas geschätzt sind. Ziel soll es dann sein, für alle Monate jeweiles einen Beta Wert zu erhalten, das wäre dann der durchschnittliche Beta Wert für diesen Monat.