Aktienschätzung

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

jogo
Beiträge: 1006
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aktienschätzung

Beitrag von jogo » Di Aug 28, 2018 9:40 am

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.

Code: Alles auswählen

A[, .(t100=myDelta(.SD), .N), Monats_id]
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

jogo
Beiträge: 1006
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aktienschätzung

Beitrag von jogo » Fr Aug 31, 2018 8:51 am

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

StatistikMensch
Beiträge: 16
Registriert: So Aug 12, 2018 9:59 pm

Re: Aktienschätzung

Beitrag von StatistikMensch » Mo Sep 03, 2018 5:28 pm

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!

StatistikMensch
Beiträge: 16
Registriert: So Aug 12, 2018 9:59 pm

Re: Aktienschätzung

Beitrag von StatistikMensch » Fr Sep 28, 2018 12:49 pm

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

jogo
Beiträge: 1006
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aktienschätzung

Beitrag von jogo » Sa Sep 29, 2018 2:32 pm

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

StatistikMensch
Beiträge: 16
Registriert: So Aug 12, 2018 9:59 pm

Re: Aktienschätzung

Beitrag von StatistikMensch » Do Okt 04, 2018 12:13 pm

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

Code: Alles auswählen

Q<-S[,ntile(Beta,10)]
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

Code: Alles auswählen

Q<-S[,ntile(Beta,5)]
zu diskutieren.
Dateianhänge
Test.csv
(76.29 KiB) 17-mal heruntergeladen

jogo
Beiträge: 1006
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aktienschätzung

Beitrag von jogo » Do Okt 04, 2018 5:40 pm

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

Code: Alles auswählen

Q<-S[,ntile(Beta,10)]
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

StatistikMensch
Beiträge: 16
Registriert: So Aug 12, 2018 9:59 pm

Re: Aktienschätzung

Beitrag von StatistikMensch » Do Okt 04, 2018 10:35 pm

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.

jogo
Beiträge: 1006
Registriert: Fr Okt 07, 2016 8:25 am

Re: Aktienschätzung

Beitrag von jogo » Fr Okt 05, 2018 11:58 am

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

StatistikMensch
Beiträge: 16
Registriert: So Aug 12, 2018 9:59 pm

Re: Aktienschätzung

Beitrag von StatistikMensch » Fr Okt 05, 2018 8:20 pm

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.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast