|
1 | 1 | # Martingale Tests and Monte Carlo convergence -------------------------------------------------- |
2 | 2 |
|
3 | | -# Stochastic discount factors or discounted values |
4 | | -esgdiscountfactor <- function(r, X) |
5 | | -{ |
6 | | - if(missing(r) || missing(X)) |
7 | | - stop("'r' and 'X' must be provided") |
8 | | - |
9 | | - length.r <- length(r) |
10 | | - length.X <- length(X) |
11 | | - start.r <- start(r) |
12 | | - deltat.r <- deltat(r) |
13 | | - start.X <- start(X) |
14 | | - deltat.X <- deltat(X) |
15 | | - |
16 | | - if(length.r == 1 && length.X == 1) |
17 | | - { |
18 | | - return(X*exp(-r)) |
19 | | - } |
20 | | - |
21 | | - if(length.r == 1 && length.X != 1) |
22 | | - { |
23 | | - r <- ts(matrix(r, nrow(X), ncol(X)), |
24 | | - start = start.X, deltat = deltat.X) |
25 | | - |
26 | | - if(tsp(X)[1] > 0) |
27 | | - { |
28 | | - return(ts(X*exp(-apply(r, 2, cumsum)*deltat.X), |
29 | | - start = 0, |
30 | | - deltat = deltat.X)) |
31 | | - } |
32 | | - else |
33 | | - { |
34 | | - Int_r <- exp(-apply(r, 2, cumsum)*deltat.X) |
35 | | - return(ts(X*rbind(rep(1, ncol(X)), |
36 | | - Int_r[1:(nrow(X)-1), ]), , |
37 | | - start = 0, |
38 | | - deltat = deltat.X)) |
39 | | - } |
40 | | - } |
41 | | - |
42 | | - if(length.r != 1 && length.X == 1) |
43 | | - { |
44 | | - X <- ts(matrix(X, nrow(r), ncol(r)), |
45 | | - start = start.r, deltat = deltat.r) |
46 | | - |
47 | | - return(ts(X*exp(-apply(r, 2, cumsum)*deltat.r), |
48 | | - start = 0, |
49 | | - deltat = deltat.r)) |
50 | | - } |
51 | | - |
52 | | - if(length.r != 1 && length.X != 1) |
53 | | - { |
54 | | - if(tsp(X)[1] > 0) |
55 | | - { |
56 | | - return(suppressWarnings(ts(X*window(exp(-apply(r, 2, cumsum)*deltat.r), |
57 | | - start = start.X, |
58 | | - deltat = deltat.X), |
59 | | - start = 0, |
60 | | - deltat = deltat.X))) |
61 | | - } |
62 | | - else |
63 | | - { |
64 | | - Int_r <- ts(exp(-apply(r, 2, cumsum)*deltat.r), deltat = deltat.r) |
65 | | - return(suppressWarnings(ts(X*rbind(rep(1, ncol(X)), |
66 | | - Int_r[1:(nrow(X)-1), ]), , |
67 | | - start = 0, |
68 | | - deltat = deltat.X))) |
69 | | - } |
70 | | - } |
71 | | -} |
72 | | - |
73 | | - |
74 | | -# Estimation of discounted asset prices |
75 | | -esgmcprices <- function(r, X, maturity = NULL) |
76 | | -{ |
77 | | - if(missing(r) || missing(X)) |
78 | | - stop("'r' and 'X' must be provided") |
79 | | - |
80 | | - maturity.out <- maturity |
81 | | - |
82 | | - if(is.ts(X) && tsp(X)[1] > 0 && !is.null(maturity)) |
83 | | - { |
84 | | - maturity.out <- maturity - deltat(X) |
85 | | - } |
86 | | - |
87 | | - Y <- esgdiscountfactor(r, X) |
88 | | - |
89 | | - if(length(r) == 1 && length(X) == 1) |
90 | | - { |
91 | | - return(Y) |
92 | | - } |
93 | | - |
94 | | - Z <- ts(rowMeans(Y), start = start(Y), deltat = deltat(Y)) |
95 | | - |
96 | | - if(!is.null(maturity)) |
97 | | - { |
98 | | - return(window(Z, start = maturity.out, end = maturity.out)) |
99 | | - } |
100 | | - else |
101 | | - { |
102 | | - return(Z) |
103 | | - } |
104 | | - |
105 | | -} |
106 | | - |
107 | | - |
108 | 3 | # Convergence of Monte Carlo prices |
109 | 4 | esgmccv <- function(r, X, maturity, plot = TRUE, ...) |
110 | 5 | { |
|
0 commit comments