Neuling

Allgemeine Fragen zur Programmierung mit R.

Neuling

Beitragvon cLiiix » Fr 21. Sep 2018, 11:06

Hallo zusammen,

ich habe seit diesem Semester an der Uni das Fach Portfoliomanagenemt mit R und benötige dringend Hilfe. Wir bekommen jede Woche ein Assignment, wo wir verschiedene Aufgaben gestellt bekommen und in der nächsten Stunde vorstellen sollen. Wir haben auch wirklich viel Material zur Verfügung gestellt bekommen mit den "Basiscs". In den Anleitungen klingt das auch immer völlig einfach und plausibel, aber sobald ich den Code bei mir in R ausführen will funktioniert wieder irgendetwas nicht und ich bekomme Fehlermeldungen mit denen ich als Neuling absolut nichts anfangen kann. :(

Falls ich hier im falschen Teil des Forums bin bitte den Thread verschieben.

Vorab:

Wir arbeiten mit R-Markdown Dokumenten und Tidyverse. Grundsätzlich bin ich sehr motiviert was Zeug angeht was für mich Neuland ist, aber bis jetzt habe ich fast kein Erfolgserlebnis erzielen können mit R, da es mich mich mit den vielen Möglichkeiten nahezu erschlägt. Ich sitze wirklich Stunden davor und lese extrem viel wie was geht aber bei der "Ausführung" happert es leider einfach...

Also grundsätzliche Fragen die ich habe:

Wenn ich ein Package mal installiert habe ist es dann in allen anderen R-Dokumenten die ich öffne auch verfügbar oder muss ich es extra nochmal installieren oder nur mit require(...) bzw. library(...) laden ?
Wie weiss ich den welche Packages ich den jetzt brauche ? Ich habe beim letzten Assignment einfach alles was wir bisher hatten "required" um sicher zu gehen, aber der Professor meinte das ist unnötig da man ja nicht alles braucht... und das eventuell einige Sachen nicht funktionieren weil es überschrieben oder so wird.

Das sind so ziemlich alle Packages mit denen wir "gearbeitet" haben:

# Working Packages
install.packages("rmarkdown")
install.packages("tinytex")
tinytex::install_tinytex()
install.packages(c("tidyverse", "tidyquant", "tibbletime", "PortfolioAnalytics"))
install.packages(c("cluster","mvoutlier","pastecs","fPortfolio"), repos = "http://cran.r-project.org")
install.packages(c("fAssets", "fImport", "tseries"))
install.packages("fBasics")
install.packages("PerformanceAnalytics")
install.packages("fExtremes")
install.packages("zoo")
install.packages("quantmod")
install.packages("FinCal")
install.packages("qqtest")
install.packages("psych")
install.packages("FinCal")

require(rmarkdown)
require(timetk)
require(tinytex)
require(tidyverse)
require(tidyquant)
require(tibbletime)
require(PortfolioAnalytics)
require(fImport)
require(fBasics)
require(cluster)
require(mvoutlier)
require(pastecs)
require(fPortfolio)
require(PerformanceAnalytics)
require(fExtremes)
require(zoo)
require(tseries)
require(fAssets)
require(quantmod)
require(FinCal)
require(qqtest)
require(psych)
require(FinCal)

Ich habe leider keine Ahnung was ich davon wirklich brauche um die Aufgabe zu bearbeiten und was nicht.

Zu meinem derzeitigen Assignment habe ich folgende Angaben bzw. Aufgaben (bitte nicht erschrecken):

# Assignment 2

## Optimzing portfolios

Take your personal dataset of 10 stocks from *Assignment 1* (check that you have data available from January 2000 for each stock, if not use another one), set the time-frame to January 2000/ December 2017 and calculate monthly simple returns (if you have not done so yet)! Use `spread(symbol,return)` and `tk_xts()` to make a xts (timeseries) from it.

a) As off now, we always perform the following steps before doing anything portfolio related: Check the summary/basic statistics and moments of the assets. Plot and check for (multivariate) normality (OPTIONAL). Check the correlations and do a scatterplot. Check the covariance structure.
b) Plot the average return of the assets against their standard deviation. Are there any dominated assets? Use code from <https://rpubs.com/mr148/333559> to plot the efficient frontier (note that you don't need the plot_ly stuff to do that).
c) Now comes the fun: Work through the vignette of the `portfolioAnalytics`-package
(`vignette("portfolio_vignette")`), set a full investment constraint and limit the portfolio weights to be 'long only' and calculate minimum-variance/maximum-return and quadratic utility portfolios.
c) Allow for short selling (delete the long only constraint). What happens to your portfolio? Illustrate!
d) Play around with the constraints and see what happens. Illustrate.

## Do it yourself

In this exercise you first download the IBoxx Euro Corporate All Maturities ("IBCRPAL") and the EuroStoxx ("DJES50I") index from Datastream - monthly data as long as possible. We will check the calculations of `R`. Calculate discrete monthly returns.

a) Stats/Normality (see A2)
b) Get the necessary input parameters (mu, sigma, please using variables, I don't want to see manual numbers in your code) and calculate the Minimum-Variance-Portfolio (manually in R). Then do it using the `portfolioAnalytics`-package.
c) Now assume a risk-free rate of 0 and calculate the Tangency-Portfolio manually and with the `portfolioAnalytics`-package. What is the slope of the CAL? Plot a mu-sigma-diagram including all relevant information. What are your portfolio weights and weighted returns? Additionally allow for shortselling and check for changes.
d) Now, assume a risk-aversion of A=1, 2 or 3 and calculate your optimal complete portfolio (see lecture slides).

### Covariance Problems

In the first part of this exercise we will be checking covariances and portfolios that might occur from faulty correlation matrices. We use the dataset from our example
```{r cov, echo=FALSE, fig.cap="Faulty covariance matrix", out.width = '60%'}
knitr::include_graphics("cov.png")
```
where we additionally assume mean returns of 10% for all three assets.
If we define $\mu$ to be the vector of mean returns and $\sigma$ the vector of standard deviations, we can calculate the covariance matrix $\Sigma$ as $\Sigma=diag(\sigma)\cdot R\cdot diag(\sigma)$, where $R$ is the correlation matrix (as in the table above) and $diag$ puts the three standard deviations into the diagonal of a matrix.
Now we can calculate the Minimum-Variance-Portfolio using matrix calculus as
$w_MP=\frac{\Sigma^{-1}\cdot 1'}{1\cdot\Sigma^{-1}\cdot 1'}$
where 1 is a vector of ones with dimension equal to the number of assets. Similarly one can calculate the tangency portfolio as
$w_TP=\frac{\Sigma^{-1}\cdot (\mu-r_f)'}{1\cdot\Sigma^{-1}\cdot (\mu-r_f)'}$
So to get used to the necessary tools, we install the package "matrixcalc" wherein we have a function `is.positive.semi.definite()` that can check covariance/correlation matrices for positive semidefiniteness. In the package `Matrix` we find a function `nearPD` that can help us to create a valid correlation matrix. Try and calculate the weights of the MVP and the TP, and then calculate portfolio mean and variance using $\mu_P=w\cdot \mu'$ and $\sigma_P^2=w\cdot \Sigma\cdot w'$ for the MVP and the TP as well as the weight vector w=(-1,1,1). Do this for the faulty matrix as well as the corrected one. What do you observe?

------------------------------------------------------------------------------------------------------------------------


Habe jetzt erstmal die ganze Angabe reingepostet - sorry für soviel Text. Für mich ist das eine Mammutaufgabe da es bei mir schon von Anfang an happert....
Dass hier habe ich bisher bearbeitet:




# Assignment 2

## Optimzing portfolios

Take your personal dataset of 10 stocks from *Assignment 1* (check that you have data available from January 2000 for each stock, if not use another one), set the time-frame to January 2000/ December 2017 and calculate monthly simple returns (if you have not done so yet)! Use `spread(symbol,return)` and `tk_xts()` to make a xts (timeseries) from it.

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

rm(list=ls(all=TRUE))


Sys.setlocale("LC_TIME","en_GB.utf8")

setwd("G:/WW/Bachelor_WW/FDL/WS18/sst/portfoliomanagement/Assignment2/my_Name")
getwd()

install.packages("zoo")

require(PerformanceAnalytics)
require(rmarkdown)
require(tidyquant)
require(zoo)
require(xts)

```

Bis hierher funktioniert eigentlich alles so weit ich das beurteilen kann^^


```{r stocks, echo=TRUE}

vignette("TQ01-core-functions-in-tidyquant") # very very helpfull
tq_index_options() # all indices available
tq_exchange_options() # all exchanges available
tq_get_options() # all data available
# question: tq_exchange() does not work and i dont know why, error message is not helpful

nyse <- tq_exchange("NYSE") # Returns stock symbol, company, last sale price, market capitalization, sector and industry of every stock

##Returns the stock symbols and various attributes for every stock in an index or exchange. Eighteen indexes and three exchanges are available.

nyse.select <- nyse %>% arrange(market.cap) %>% slice(1:10) ##we select the 10 highest capitalized companies
nyse.select
?symbol
nyse.returns <- nyse.select $symbol %>%
tq_get(get = "stock.prices",
from = "2000-01-01",
to = "2017-31-12") %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "return")
```

tq_exchange() funktioniert bei mir z.b. nicht und was das $symbol %>% macht hab ich auch keine ahnung.


Also es wäre für mich schon ein Segen wenn mir jemand die Eingangs gestellten Fragen beantworten könnte ! Bin nämlich langsam echt am Rande des Nervenzusammenbruchs :D

Liebe Grüsse, cLiiix
cLiiix
 
Beiträge: 2
Registriert: Fr 21. Sep 2018, 10:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Neuling

Beitragvon jogo » Fr 21. Sep 2018, 11:56

Hallo cLiiix,

cLiiix hat geschrieben:Also grundsätzliche Fragen die ich habe:

Wenn ich ein Package mal installiert habe ist es dann in allen anderen R-Dokumenten die ich öffne auch verfügbar oder muss ich es extra nochmal installieren oder nur mit require(...) bzw. library(...) laden ?

installieren muss man jedes Paket nur einmal. Wenn man ein Paket benötigt, muss man es vorher mit require() oder library() einbinden.
Zu den Unterschieden siehe: https://stackoverflow.com/questions/559 ... nd-library

Wie weiss ich den welche Packages ich den jetzt brauche?
Wenn der Name der Funktion bekannt ist, dann kann man mit google sein Glück versuchen.
Man kann auch R in den Paketen suchen lassen, z.B. Suche nach der Funktion shift():
Code: Alles auswählen
??shift
Im Ergebnis achte man auf Treffer der Form
Paketname::Funktionsname (hier also data.table::shift)

Wenn man nicht weiß, welchen Namen die Funktion hat (sonder man kennt eigentlich nur das Verfahren, das man anwenden möchte), hilft oft ein Durchstöbern der TaskViews auf CRAN:
https://cran.r-project.org/web/views/

Ich habe beim letzten Assignment einfach alles was wir bisher hatten "required" um sicher zu gehen,
Deine Motivation kann ich verstehen, jedoch ist dies ein enormer overkill.

aber der Professor meinte das ist unnötig da man ja nicht alles braucht... und das eventuell einige Sachen nicht funktionieren weil es überschrieben oder so wird.

Man achte auf die Warnungen "The following object is masked from 'package:xxx'
https://stackoverflow.com/questions/391 ... gexxx-mean

Das kann harmlos sein, weil
a) es so gewollt ist (das Paket bringt eine effizientere Implementierung der Funktion mit)
b) die überdeckte Funktion wird ohnehin nicht verwendet.
Es muss aber nicht immer harmlos sein: notfalls muss man dann die überdeckte Funktion mit einem qualifizierten Namen aufrufen:
Paketname::Funktionsname(...) statt einfach nur Funktionsname(...)

Gruß, Jörg
jogo
 
Beiträge: 118
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post

Re: Neuling

Beitragvon cLiiix » So 23. Sep 2018, 14:47

Vielen dank für deine Hilfe Jörg !

Beim den Assignments an sich kann mir wie es scheint leider keiner helfen ?

lg
cLiiix
 
Beiträge: 2
Registriert: Fr 21. Sep 2018, 10:13
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Neuling

Beitragvon jogo » Mo 24. Sep 2018, 13:18

cLiiix hat geschrieben:Beim den Assignments an sich kann mir wie es scheint leider keiner helfen ?
In dieser Form sind die Aufgaben nicht mehr minimal im Sinne von https://stackoverflow.com/help/mcve
Außerdem sind wir hier in einem deutschsprachigen Forum.

tq_exchange() funktioniert bei mir z.b. nicht
# question: tq_exchange() does not work and i dont know why, error message is not helpful

Du hast die Fehlermeldung nicht gezeigt. Normalerweise geben die Fehlermeldungen doch einen Hinweis auf die Ursache - auch wenn man dabei um die Ecke denken muss. Oft lohnt sich auch das googeln der Fehlermeldung.

und was das $symbol %>% macht hab ich auch keine ahnung.
Das ist der pipe-Operator, er leitet das Ergebnis der links stehenden Funktion an die rechts stehende Funktion weiter. Das spart etwas Schreibarbeit.

Gruß, Jörg
jogo
 
Beiträge: 118
Registriert: Mo 26. Feb 2018, 09:56
Danke gegeben: 3
Danke bekommen: 0 mal in 0 Post


Zurück zu Programmierung allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron