################################################# ### Erstellen von R Packages ################################################# # Beispiel: Die Funktionen und Daten zur ML-Schätzung # in Abschnitt J (Numerische Optimierung) sollen zu # einem Paket zusammengefasst werden, das sich mit library(GARCHml) # einlesen lässt. ### VORGEHEN: ################################################# ### 1. Erzeugen der Funktionen, Datensätze etc. in R ################################################# # Siehe I_Optimization.R LogLik.GARCH <- function(PAR,X,P,Q) { c <- PAR[1]; a <- PAR[2:(P+1)]; g <- PAR[(P+2):(P+Q+1)] n <- length(X) h_sq <- rep(var(X),n) ll <- numeric(n) if (sum(a)+sum(g)>1) return(Inf) if (any(PAR<0)) return(Inf) for (i in (max(P,Q)+1):n) { h_sq[i] <- c+sum(X[i-(1:P)]^2*a)+sum(h_sq[i-(1:Q)]*g) ll[i] <- 0.5*(log(2*pi)+log(h_sq[i])+X[i]^2/h_sq[i]) # minus Likelihood } h_sq <<- h_sq return(sum(ll)) } ML.GARCH <- function(x, p=1, q=1, startwerte = NULL, ...) { if (is.null(startwerte)) startwerte <- c(var(x),rep(0,p+q)) result.nlm <- nlm(f=LogLik.GARCH, p=startwerte, X=x, P=p, Q=q, hessian=TRUE, ...) result.table <- cbind( # schätzer und standardfehler Estimate = result.nlm$estimate, Std.err. = sqrt( diag( solve(result.nlm$hessian)))) rownames(result.table) <- c("c",paste("a",1:p,sep=""),paste("g",1:q,sep="")) RESULT <- list(Table=result.table,nlm=result.nlm,LogLik=-result.nlm$minimum) class(RESULT) <- "garch" return(RESULT) } print.garch <- function(x) print(x$Table) # Ausgabe des Schätzergebnisses setwd("g:/R Kurs/Daten2") # Datensatz einlesen, Renditen DAX <- read.csv("Daxdaily.csv") # berechnen DAX$Return <- c(NA,diff(log(DAX$Adj.Close))) DAX$Date <- as.Date(DAX$Date) library(zoo) ?zoo returns <- zoo(x = diff(log(DAX$Adj.Close)), order.by = DAX$Date[-1], frequency = NULL) ################################################# ### 3. Erzeugen eines Source-Verzeichnisses mit Codes, Daten und Dokumentationen ################################################# ### Automatische Erzeugung in das Arbeitsverzeichnis setwd("g:/R Kurs/Daten2") package.skeleton("GARCHml", list=c("LogLik.GARCH","ML.GARCH","print.garch","DAX","returns"), force=TRUE) ### Dokumentation des Pakets sowie der Funktionen und Datensätze # DESCRIPTION Datei modifizieren # Wichtig: Nach Depends: ... zu ladende Pakete schreiben! Package: GARCHml Type: Package Title: Maximum Likelihood Estimation of GARCH Processes Version: 1.0 Date: 2013-10-08 Author: Roland Weigand Maintainer: Roland Weigand Depends: R (>=2.15.1), zoo # WICHTIG! Description: This is an example package to describe the building of R packages. License: Unlimited # Oder GPL-2 oder so LazyLoad: yes # In Ordner g:\r kurs\daten\GARCHml\man # gehen. *.Rd Dateien enthalten die Dokumentationen -> modifizieren # Falls Doku nicht erwünscht: # *.Rd Dateien ausser das mit dem Paketnamen # LÖSCHEN (wenn Titel einer *Rd fehlt, geht es nicht) ### Namespace erzeugen und exportieren (falls erwünscht) # Erzeuge (Text-)Datei NAMESPACE (ohne Endung) im g:\r kurs\daten\GARCHml Verzeichnis # DARIN: # Gib Pakete an, auf deren Funktionen zugegriffen wird import(AER) # hier nicht notwendig! # Spezifiziere Funktionen, die exportiert werden sollen (die nach laden des Pakets sichtbar # sein sollen) export("ML.GARCH","data.dax","print.garch") # S3 Klassen und Methoden definieren (hier: print.garch ist die print-Funktion # für die S3-Klasse garch) S3method(print, garch) ### C-codes etc.: in ein Unterverzeichnis GARCHml\src packen # können mit .C() Funktion in den R-Codes verwendet werden -> Anleitung lesen ################################################# ### 4. Installieren bzw. Kompilieren ################################################# # Im Explorer auf Ordner R\R-2.12.0\bin\i386 gehen # Dann 'cmd' in die Adressleiste eingeben -> Eingabeaufforderung # Eingabe Rcmd build g:\GARCHml # um Paketsource zu erstellen und zu verpacken Rcmd INSTALL g:\GARCHml # um Paket in die Standard-Bibliothek zu installieren # Dann mit library(GARCHml) # einlesbar!