CAPM Bestandteile wiederholend berechnen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Sentinel66
Beiträge: 16
Registriert: Mo Aug 06, 2018 12:33 pm

CAPM Bestandteile wiederholend berechnen

Beitrag von Sentinel66 »

Hallo zusammen,

ich denke ich bin hier im Forum richtig aufgehoben und nicht im Bereich der Regressionsanalyse.

Ich muss für diverse Fonds ( Ca. 2000 ) die Überrendite gegenüber einem Marktportfolio berechnen, wobei ich das Alpha gemäß dem CAPM verwenden möchte. Warum mache ich das ganze? Ich will die Überrenditen untersuchen, welche die Manager erzielen, um daraus Aussagen ableiten zu können. Dabei soll untersucht werden, ob das Geschlecht des Managers einen Einfluss auf das Alpha / die Performance hat.
Am Ende möchte ich in der Lage sein eine Aussage darüber zu treffen wie viele Alphas signifkant positiv oder negativ waren. Für die Differenzierung zwischen Mann und Frau hätte ich an eine Dummy-Variable gedacht.
Als zweiter Schritt möchte ich wissen wie viele signifikante positive und negative Cooeffizienten ich habe im Bezug auf die beiden Risikofaktorenen SMB und HML aus dem 3 Faktor-CAPM habe. SMB und HML sind ebenso nur Renditen wie die Rendite es Marktporlios

Zur Berechnung des Alphas im 1-Faktor CAPM bin ich bereits auf die Funktion CAPM.alpha () aufmerksam geworden.
D
Meine Problemstellung resultiert aus meinem Stichprobenumfang. Ich werde vermutlich um die 2.000 Fonds haben und möchte nicht für jeden Fonds die Formel händisch schreiben. Ich gehe davon aus, dass man in R die Möglichkeit so etwas zu automatisieren. Im Prinzip ist es ja immer so, dass der Fonds die wechselnde Variable ist, während das Marktportfolio und der risikolose Zinssatz bzw. deren Spalten immer gleich bleiben.

Der nächste Schritt wäre die Berechnung des Alphas im Kontext eines 3 Faktor CAPM. Hierzu habe ich bisher keine Formel gefunden, aber schlussendlich ist es auch "nur" eine multiple lineare Regression.

Die Idee einer Panel-Regression habe ich bisher verworfen. Vielleicht liegt aber auch genau hier mein Verständnisproblem
Nach meinem Verständnis führt die Panel-Regression nachher zu "einem" Alpha. Oder kann ich hier das Alpha ganz regulär bestimmen und erhalte durch die Dummy-Variable die Aussagekraft, ob das Alpha unterschiedlich je Geschlecht ist.

Ich hoffe mein Problem ist soweit verständlich.

Ergänzend: In einem Paper, welches mich inspiriert hat wurde im Nachgang eine Quantil-Regression durchgeführt. Ich habe hierzu bisher sehr wenig Literatur gefunden, da es sich anscheinend um ein etwas fortschrittlicheres Thema handelt. Dabei wurden Portfolien gebildet, welche die Renditen der Fonds nach Geschlecht gleich gewichtet und dann darauf eine Quantilsregression auf das 3 Faktor CAPM gebildet.
Zuletzt geändert von Sentinel66 am Mi Feb 20, 2019 6:07 pm, insgesamt 3-mal geändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von jogo »

Hallo Sentinel66,

willkommen im Forum!
Sentinel66 hat geschrieben: Mo Aug 06, 2018 12:56 pm Ich muss für diverse Fonds die Überrendite gegenüber einem Marktportfolio berechnen, wobei ich das Alpha gemäß dem CAPM verwenden möchte.
Ich bin hierzu bereits auf die Funktion CAPM.alpha () aufmerksam geworden.

Meine Problemstellung resuliert aus meinem Stichprobenumfang. Ich werde vermutlich um die 2.000 Fonds haben und möchte nicht für jeden Fond die Formel händisch schreiben, insbesondere weil sich das ganze auf 1 bzw. 2 Marktportfolien bezieht.
Üblicherweise ist R sehr gut darin, zu wiederholende Berechnungen auf anderen Daten durchzuführen, wenn die Rechenvorschift ein Schema darstellt.
Der nächste Schritt wäre die Berechnung des Alphas im Kontext eines 3 Faktor CAPM. Hierzu habe ich bisher keine Formel gefunden.

Warum mache ich das ganze? Ich will die Überrenditen untersuchen, welche die Manager erzielen, um daraus Aussagen ableiten zu können.
Oder liegt hier ein Panel-Modell vor, was ich übersehen habe? In dem Paper, welches ich als Inspiration genommen habe wurde eine Quantil-Regression vorgenommen, weil die Alphas eine sehr unregelmäßige Verteilung hatten.

Ich hoffe mein Problem ist soweit verständlich.
Von dem Rest habe ich wenig verstanden.
Das Verstehen wird üblicherweise besser, wenn Du uns anhand von Daten erklärst, was Du erreichen willst.
Bitte lies hierfür: viewtopic.php?f=20&t=11

Gruß, Jörg
Sentinel66
Beiträge: 16
Registriert: Mo Aug 06, 2018 12:33 pm

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von Sentinel66 »

Hallo Jörg,

Ich habe den obigen Text nochmal ergänzt.
ich habe noch keine Rohdaten, daher versuche ich es wie folgt:

Ich werde ein Tabelle erhalten mit Spalten:
Tag, Rendite der Fonds (diese Spalte wird es je Fonds geben also n mal), Rendite des Marktportfolios, Rendite des Risikolosen Zinssatzes


Das CAPM sagt: prognostizierte Rendite (abhängige Variabel)= Beta Faktor * ( Rendite Marktportfolio - Risikoloser Zinssatz) + Risikoloser Zinssatz

In der Realität werden abweichende Renditen am Markt gemessen (quasi Theorie vs. Realität) --> das besagte Alpha wird berechnet:
(realisierte Rendite - prognostizierte Rendite) * ( Rendite Marktportfolio - Risikoloser Zinssatz)

Gemäß der nachfolgenden Beschreibung der Funktion CAPM.alpha müsste ich jedes mal das Ra neu definieren um je Fonds das Alpha zu berechnen. Es müsste für das Ra also immer wieder eine neue Spalte definiert werden, was ich am liebsten automatisiert hätte. Und dann müsste ich die Alphas alle am besten in einer Tabelle als Output haben. :D Das wäre dann ein Traum.

Description
This is a wrapper for calculating a CAPM alpha.

"Alpha" purports to be a measure of a manager's skill by measuring the portion of the managers returns that are not attributable to "Beta", or the portion of performance attributable to a benchmark.

Usage
CAPM.alpha(Ra, Rb, Rf = 0)
Arguments
Ra an xts, vector, matrix, data frame, timeSeries or zoo object of asset returns
Rb return vector of the benchmark asset
Rf risk free rate, in same period as your returns
Sentinel66
Beiträge: 16
Registriert: Mo Aug 06, 2018 12:33 pm

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von Sentinel66 »

Hallo zusammen,

ich habe jetzt einen Test Datensatz und hoffe ihr könnt über meinen dput Zusatz darauf zugreifen. Ansonsten muss ich die CSV.Datei hochladen.

Mein Problem ist aktuell, dass mein Coding an der Stelle mit "myalpha[1] <--" scheitert, weil der myalpha nicht findet. Ich vermute hier liegt schon mein Fehler.
Ich hoffe ihr könnt mir auch einen Feedback zu meiner Schleife geben. Ich hätte nachher gerne zu den Alphas folgende Sachen ausgewertet
p-Wert der Alphas um zu prüfen, ob diese signifikant zu meinem Signifikanzniveau sind
Die Standardabweichung der Daten und die Kurtosis. --> Das ganze würde ich gerne wieder als CSV-Datei exportieren.


Ich befürchte hier gerade aktuell etwas daneben zu liegen und kann nicht einschätzen ob eine Panel-Regression zum selben Ergebnis kommen würde.

Die wechselnde Variable des Fonds ist ab Spalte 8. Ich hoffe das ist mit 7+j richtig codiert. Kann es aber aktuell nicht prüfen, weil das Skript am "myalpha" scheitert.

Code: Alles auswählen

install.packages("tidyquant")
install.packages("tidyverse")
install.packages("timetk")
install.packages("tibbletime")
install.packages("broom")
install.packages("PerformanceAnalytics")


library(capm)
library(CAPM.alpha)
library(tidyquant)
library(tidyverse)
library(timetk)
library(tibbletime)
library(broom)


data_table <- read.table("test1.csv", header=TRUE, sep=";",dec=",")
dput(data_table)

#Ueberrendite Marktportfolio = Rendite Marktportfolio - Risikoloser Zinsatz
Rm <- data_table[ ,3] - data_table[ ,2]
Rf <- data_table[ ,2]
Rp <- data_table[ ,8]
#CAPM berechnen
# Rp = Rf + Beta * RM

#Alpha bestimmen Single Faktor Model
#Formally, the single factor performance measure is the intercept ( ̨p) in the regression of the
#fund excess returns on the excess returns of a representative market index:
#Rp,t − Rf,t = alpha + Beta (Rm,t − Rf,t) + εp,t
#where Rp,t is the return of fund p in period t; Rf,t is the risk-free rate in period t;
# Rm,t is the return of the proper market portfolio of each fund in period t.

#Rp,t − Rf,t = alpha + Beta (Rm,t − Rf,t) + εp,t


Resultsinglea <-lm (Rp-Rf~ Rm)
summary(Resultsinglea)
mysummmarysinglea <-summary(Resultsinglea)
mycoef <- coef(mysummmarysinglea)
myalpha[1] <- mycoef[1,1]

#Automatisierte Wiederholung um Alpha für alle Fonds zu berechnen
for(j in 1:9){
  Rp <- data_table[ ,7+j]-data_table[ ,1]
  Resultsinglea <-lm (Rp-Rf~ Rm)
  summary(Ressultsinglea)
  Rm <- data_table[ ,3] - data_table[ ,2]
  Rf <- data_table[ ,2]
  Rp <- data_table[ ,j]
  
  myalpha[j] <- mycoef[1,1]
}
[Code/]
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von jogo »

Hallo Sentinel,
Sentinel66 hat geschrieben: Mi Aug 08, 2018 11:54 am ich habe jetzt einen Test Datensatz und hoffe ihr könnt über meinen dput Zusatz darauf zugreifen. Ansonsten muss ich die CSV.Datei hochladen.
Was meinst Du mit dput-Zusatz? Wo können wir den sehen?
Mein Problem ist aktuell, dass mein Coding an der Stelle mit "myalpha[1] <--" scheitert, weil der myalpha nicht findet. Ich vermute hier liegt schon mein Fehler.
Soll myalpha ein Vektor werden? Wenn ja, empfiehlt sich die vorherige Initialisierung per:

Code: Alles auswählen

myalpha <- numeric(...)
ansonsten einfach:

Code: Alles auswählen

myalpha <- mycoef[1,1]
Gruß, Jörg
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von jogo »

so, jetzt zur Schleife:
Sentinel66 hat geschrieben: Mi Aug 08, 2018 11:54 am Ich hoffe ihr könnt mir auch einen Feedback zu meiner Schleife geben. Ich hätte nachher gerne zu den Alphas folgende Sachen ausgewertet
p-Wert der Alphas um zu prüfen, ob diese signifikant zu meinem Signifikanzniveau sind
Die Standardabweichung der Daten und die Kurtosis. --> Das ganze würde ich gerne wieder als CSV-Datei exportieren.

Code: Alles auswählen

#Automatisierte Wiederholung um Alpha für alle Fonds zu berechnen
for(j in 1:9){
  Rp <- data_table[ ,7+j]-data_table[ ,1]
  Resultsinglea <-lm (Rp-Rf~ Rm)
  summary(Ressultsinglea)
  Rm <- data_table[ ,3] - data_table[ ,2]
  Rf <- data_table[ ,2]
  Rp <- data_table[ ,j]
  
  myalpha[j] <- mycoef[1,1]
}
Da Du in der Schleife das Objekt mycoef nicht veränderst, werden alle myalpha[j] (für j=1, ..., 9) den gleichen Wert haben.
Ich glaube nicht, dass Du das so willst.

Ich weiß auch nicht, warum Du am Ende der Schleife:

Code: Alles auswählen

Rp <- data_table[ ,j]
setzt, wenn Du beim Beginn vom nächsten Duchlauf das Objekt Rp gleich wieder überschreibst.
Meiner Meinung nach ist das sinnfrei.

Gruß, Jörg
Sentinel66
Beiträge: 16
Registriert: Mo Aug 06, 2018 12:33 pm

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von Sentinel66 »

Hallo Jörg,
danke für die schnelle Rückmeldung

Ein Vektor ist für myalpha nicht notwendig.
Da Du in der Schleife das Objekt mycoef nicht veränderst, werden alle myalpha[j] (für j=1, ..., 9) den gleichen Wert haben.
Ich glaube nicht, dass Du das so willst.
Da hast du Recht, das möchte ich nicht. Ich bin auf dieses Beispiel zufällig gestoßen. Mit Schleifen habe ich bisher keine Erfahrung.
Ich möchte jeweils unterschiedliche myalphas angezeigt bekommen.
Wie meinst du müsste ich mycoeff anpassen? mycoef[1,j]?

Meine Schleife kann ich nun starten, aber es kommt nix gescheites bei rum.

Code: Alles auswählen

> #Automatisierte Wiederholung um Alpha für alle Fonds zu berechnen
> for(j in 1:9){
+   Rp <- data_table[ ,7+j]-data_table[ ,1]
+   Resultsinglea <-lm (Rp-Rf~ Rm)
+   summary(Ressultsinglea)
+   Rm <- data_table[ ,3] - data_table[ ,2]
+   Rf <- data_table[ ,2]
+   Rp <- data_table[ ,j]
+   
+   myalpha[j] <- mycoef[1,1]
+ }
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  alle Fälle NA
In addition: Warning message:
In Ops.factor(data_table[, 7 + j], data_table[, 1]) :
  ‘-’ not meaningful for factors
Mit dput wollte ich gemäß eurem Leitfaden "Wie erstelle ich ein reproduzierbares Beispiel?" die Daten zugänglich machen.

Code: Alles auswählen

dput(data_table)

structure(list(X = structure(c(58L, 52L, 18L, 46L, 12L, 40L, 
5L, 34L, 68L, 28L, 63L, 23L, 57L, 51L, 17L, 45L, 11L, 39L, 4L, 
33L, 67L, 27L, 62L, 22L, 56L, 50L, 16L, 44L, 10L, 38L, 6L, 32L, 
66L, 26L, 61L, 21L, 55L, 49L, 15L, 43L, 9L, 37L, 3L, 31L, 65L, 
25L, 60L, 20L, 54L, 48L, 14L, 42L, 8L, 36L, 2L, 30L, 64L, 24L, 
59L, 19L, 53L, 47L, 13L, 41L, 7L, 35L, 1L, 29L), .Label = c("28.02.2013", 
"28.02.2014", "28.02.2015", "28.02.2017", "28.02.2018", "29.02.2016", 
"30.04.2013", "30.04.2014", "30.04.2015", "30.04.2016", "30.04.2017", 
"30.04.2018", "30.06.2013", "30.06.2014", "30.06.2015", "30.06.2016", 
"30.06.2017", "30.06.2018", "30.09.2013", "30.09.2014", "30.09.2015", 
"30.09.2016", "30.09.2017", "30.11.2013", "30.11.2014", "30.11.2015", 
"30.11.2016", "30.11.2017", "31.01.2013", "31.01.2014", "31.01.2015", 
"31.01.2016", "31.01.2017", "31.01.2018", "31.03.2013", "31.03.2014", 
"31.03.2015", "31.03.2016", "31.03.2017", "31.03.2018", "31.05.2013", 
"31.05.2014", "31.05.2015", "31.05.2016", "31.05.2017", "31.05.2018", 
"31.07.2013", "31.07.2014", "31.07.2015", "31.07.2016", "31.07.2017", 
"31.07.2018", "31.08.2013", "31.08.2014", "31.08.2015", "31.08.2016", 
"31.08.2017", "31.08.2018", "31.10.2013", "31.10.2014", "31.10.2015", 
"31.10.2016", "31.10.2017", "31.12.2013", "31.12.2014", "31.12.2015", 
"31.12.2016", "31.12.2017"), class = "factor"), EURIBOR3MD.X = c(-0.319, 
-0.319, -0.321, -0.321, -0.329, -0.328, -0.327, -0.328, -0.329, 
-0.329, -0.331, -0.329, -0.329, -0.33, -0.331, -0.329, -0.329, 
-0.329, -0.33, -0.327, -0.319, -0.314, -0.313, -0.301, -0.299, 
-0.297, -0.286, -0.261, -0.251, -0.244, -0.205, -0.162, -0.131, 
-0.114, -0.068, -0.04, -0.033, -0.023, -0.014, -0.012, -0.005, 
0.019, 0.039, 0.054, 0.078, 0.082, 0.086, 0.083, 0.163, 0.209, 
0.207, 0.311, 0.339, 0.313, 0.286, 0.296, 0.287, 0.234, 0.23, 
0.225, 0.224, 0.228, 0.218, 0.2, 0.207, 0.211, 0.209, 0.232), 
    .STOXX = c(391.17, 391.61, 379.93, 383.06, 385.32, 370.87, 
    379.63, 395.46, 389.18, 386.69, 395.22, 388.16, 373.88, 377.85, 
    379.37, 389.99, 387.09, 381.14, 370.24, 360.12, 361.42, 341.99, 
    338.97, 342.92, 343.53, 341.89, 329.88, 347.45, 341.48, 337.54, 
    333.92, 342.27, 365.81, 385.43, 375.47, 347.77, 362.79, 396.37, 
    381.31, 399.87, 395.79, 397.3, 392.21, 367.05, 342.54, 347.25, 
    336.8, 343.08, 342, 335.99, 341.86, 344.24, 337.89, 334.31, 
    338.02, 322.52, 328.26, 325.16, 322.37, 310.46, 297.32, 299.58, 
    285.02, 300.88, 296.72, 293.78, 289.94, 287.22), .XBBSF = c(563.33, 
    566.69, 558.01, 565.6, 558.04, 539.66, 549.04, 565.51, 554.98, 
    542.63, 557.04, 549.79, 529.23, 535.11, 530.27, 543.75, 541.02, 
    517.95, 509.68, 494.75, 492.04, 471.07, 463.99, 476.65, 474.46, 
    466.44, 440.16, 488.27, 470.23, 470.58, 457.96, 461.57, 504.02, 
    516.51, 495.69, 467.3, 481.53, 511.47, 497.47, 513.35, 498.75, 
    494.79, 489.34, 450.28, 422.82, 414.25, 405.99, 410.66, 419.47, 
    414.49, 425.27, 431.46, 423.89, 430.95, 435.78, 407.99, 406.63, 
    398.43, 392.49, 376, 358.05, 355.69, 337.24, 355.56, 357.38, 
    344.89, 342.28, 328.18), .XBATF = c(327.64, 330.48, 320.12, 
    322.37, 325.63, 312.62, 320, 334.98, 329.51, 327.97, 335.59, 
    330.01, 317.64, 321.46, 323.51, 332.38, 329.74, 326.64, 317.27, 
    309.07, 311.4, 293.41, 291.19, 293.42, 294.11, 293.26, 284.63, 
    296, 291.39, 287.45, 285.54, 293.32, 312.52, 330.79, 323.47, 
    299.04, 312.71, 343.55, 329.62, 346.62, 344.55, 346.48, 342.51, 
    321.27, 300.04, 306.04, 297.73, 304.34, 301.91, 296.41, 300.67, 
    302.04, 296.77, 292.34, 295.29, 282.79, 289.05, 286.71, 284.36, 
    273.98, 262.23, 264.76, 252.95, 267.4, 264.35, 261.31, 257.93, 
    257.01), .STVP = c(1315.94, 1321.92, 1277.17, 1286.74, 1313.95, 
    1256.6, 1291.11, 1346.86, 1321.05, 1310.63, 1342.25, 1323.11, 
    1273.1, 1292.79, 1291.15, 1315.73, 1307.59, 1292.5, 1258.37, 
    1237.35, 1246.87, 1173.67, 1150.7, 1137.16, 1139.11, 1117.68, 
    1081.14, 1137.84, 1134.21, 1102.86, 1097.47, 1133.09, 1211.6, 
    1282.98, 1257.81, 1169.7, 1229.23, 1345.4, 1308.55, 1372.84, 
    1373.16, 1379.99, 1372.61, 1274.12, 1210.96, 1233.09, 1214.52, 
    1252.49, 1253.74, 1241.89, 1265.81, 1266.8, 1251.6, 1224.93, 
    1231.56, 1178.93, 1194.96, 1181.61, 1173.12, 1120.78, 1069.88, 
    1075.02, 1014.59, 1080.61, 1061.13, 1037.69, 1040.41, 1052.98
    ), .STGP = c(2332.98, 2327.73, 2263.89, 2289.83, 2238.05, 
    2168.68, 2211.41, 2300.94, 2260.17, 2238.05, 2297.09, 2231.8, 
    2153.1, 2162.86, 2195.44, 2279.24, 2250.9, 2187.61, 2125.43, 
    2047.52, 2049.76, 1956.46, 1952.08, 2024.29, 2026.31, 2037.18, 
    1947.79, 2032.22, 1986, 1983.22, 1960.62, 1998.94, 2141.24, 
    2233.82, 2171.17, 2009.67, 2077.77, 2256.29, 2155.54, 2266.48, 
    2227.66, 2252.09, 2203.06, 2067.13, 1910.42, 1929.01, 1855.35, 
    1877.27, 1871.47, 1833.27, 1873.92, 1885.54, 1851.51, 1846.78, 
    1873.87, 1780.76, 1813.17, 1798.37, 1776.39, 1731.02, 1665.89, 
    1682.05, 1620.66, 1691.2, 1674.69, 1679.76, 1631.31, 1578.26
    ), UniEuropa..net...ISIN.DE0009750232...EUR. = c(68.18, 68.36, 
    66.68, 67.53, 65.78, 62.87, 64.55, 67.61, 66.06, 65.59, 67.34, 
    65.1, 62.45, 63.13, 62.77, 63.94, 64.27, 62.17, 59.82, 59.16, 
    59.04, 56.66, 56.91, 58.6, 58.64, 57.97, 56.26, 59.66, 57.97, 
    58.36, 57.54, 59.46, 63.58, 66.09, 63.4, 59.06, 60.8, 65.85, 
    62.9, 65.74, 65.5, 65.8, 64.41, 60.36, 55.41, 56.37, 54.51, 
    55.08, 54.5, 53.19, 54.03, 54.36, 53.55, 53.12, 54.5, 51.68, 
    52.14, 51.59, 50.81, 49.09, 47.29, 48.04, 45.68, 47.64, 47.23, 
    46.76, 45.88, 45.24), UniValueFonds..Europa.A..ISIN..LU0126314995...EUR. = c(53.9, 
    54.76, 53.05, 53.93, 54.33, 51.55, 53.18, 55.6, 54.33, 54.2, 
    55.9, 55.44, 53.18, 54.04, 53.44, 54.38, 54.11, 53.52, 51.64, 
    51.33, 52.11, 48.71, 48.65, 47.86, 47.83, 47.2, 45.7, 48.65, 
    47.61, 46.38, 45.75, 47.2, 50.98, 53.83, 53.87, 50.09, 52.79, 
    57.18, 54.83, 57.24, 56.69, 56.34, 55.72, 51.99, 48.41, 49.35, 
    48.72, 49.94, 49.58, 48.69, 49.46, 49.8, 49.05, 48.52, 49.24, 
    46.9, 47.33, 46.88, 47.12, 44.73, 42.73, 43.02, 40.51, 42.86, 
    41.39, 40.06, 39.84, 40.29)), class = "data.frame", row.names = c(NA, 
-68L))
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: CAPM Bestandteile wiederholend berechnen

Beitrag von jogo »

Hallo Sentinel,
Sentinel66 hat geschrieben: Mi Aug 08, 2018 1:12 pm Ein Vektor ist für myalpha nicht notwendig.
Da Du in der Schleife das Objekt mycoef nicht veränderst, werden alle myalpha[j] (für j=1, ..., 9) den gleichen Wert haben.
Ich glaube nicht, dass Du das so willst.
Da hast du Recht, das möchte ich nicht. Ich bin auf dieses Beispiel zufällig gestoßen. Mit Schleifen habe ich bisher keine Erfahrung.
Ich möchte jeweils unterschiedliche myalphas angezeigt bekommen.
wenn Du die verschiedenen Werte von Alpha in einem Objekt speichern möchtest, brauchst Du sehr wohl einen Vektor (im einfachsten Fall).
Wie meinst du müsste ich mycoeff anpassen? mycoef[1,j]?
Warum bist Du der Meinung, dass Du es mit einer Matrix von Koeffizienten zu tun hast (Du verwendest Indizes für zwei Dimensionen). Hier ein lauffähiges Beispiel:

Code: Alles auswählen

coef(lm(Sepal.Length ~ Petal.Length, data=iris))
coef(lm(Sepal.Length ~ Petal.Length, data=iris))[1]
coef(lm(Sepal.Length ~ Petal.Length, data=iris))[1,1]
Meine Schleife kann ich nun starten, aber es kommt nix gescheites bei rum.

Code: Alles auswählen


In addition: Warning message:
In Ops.factor(data_table[, 7 + j], data_table[, 1]) :
  ‘-’ not meaningful for factors
Die erste Spalte von data_table enhält das Datum. Wie stellst Du Dir die Differenzbildung

Code: Alles auswählen

data_table[, 7 + j] - data_table[, 1]
vor :?:
Mit dput wollte ich gemäß eurem Leitfaden "Wie erstelle ich ein reproduzierbares Beispiel?" die Daten zugänglich machen.

Code: Alles auswählen

dput(data_table)

structure(list(X = structure(c(58L, 52L, 18L, 46L, 12L, 40L, 
5L, 34L, 68L, 28L, 63L, 23L, 57L, 51L, 17L, 45L, 11L, 39L, 4L, 
...
    46.9, 47.33, 46.88, 47.12, 44.73, 42.73, 43.02, 40.51, 42.86, 
    41.39, 40.06, 39.84, 40.29)), class = "data.frame", row.names = c(NA, 
-68L))
ja, prima :!: Jetzt (mit vorhandenem Output) lässt sich viel besser helfen, z.B. konnte ich schon feststellen,
dass die erste Spalte nicht numerisch ist, siehe:

Code: Alles auswählen

str(data_table)
Rein optisch programmtechnisch könnte es am Ende so oder ähnlich aussehen:

Code: Alles auswählen

#Automatisierte Wiederholung um Alpha für alle Fonds zu berechnen
single.a <- function(j) {
  Rf <- data_table[ , 2]
  Rp <- data_table[ , 7+j]
  Rm <- data_table[ , 3] - Rf
  Resultsinglea <- lm(Rp-Rf ~ Rm)
  coef(Resultsinglea)["(Intercept)"]
}
myalpha <- sapply(1:2, single.a)
Die Sachlogik habe ich nicht kontrolliert - das müsstest Du erledigen.

Gruß, Jörg
Antworten