Я пытаюсь создать трехмерный график кривой доходности, как показано ниже, но я хотел бы показать на оси x (ось времени) правильные даты вместо чисел. Помещение даты вместо чисел в качестве переменных в функцию напрямую не работает, потому что функция surf3D принимает только матрицы в качестве входных данных. Я пытался использовать другие аргументы, такие как xaxt='n'
или axes = FALSE
, но ни один из них, похоже, не работает. Кто-нибудь может мне помочь? Спасибо!
suppressWarnings(suppressMessages(library("plot3D")))
suppressWarnings(suppressMessages(library("YieldCurve")))
suppressWarnings(suppressMessages(library("xts")))
tau <- 1:10 * 12
# Data
rates_1 <- c(8.15, 7.11, 6.90, 7.72, 7.65, 7.40, 7.00, 6.84, 6.58, 6.29, 5.06, 4.94, 4.23, 3.69, 3.92, 4.77, 5.13, 6.24, 6.18, 5.28, 5.27, 4.64, 4.76, 4.46)
rates_2 <- c(8.27, 7.27, 7.13, 7.89 , 7.84, 7.77 ,7.51 , 7.36 , 6.97 , 6.85 ,5.72, 5.84 , 5.34, 4.84, 4.56 , 5.76 , 5.91, 6.77 , 6.83 , 5.81 , 5.77 , 5.30 , 5.39 , 5.15 )
rates_3 <- c( 8.27, 7.31, 7.24 , 7.95 , 7.83, 7.77, 7.58 , 7.45, 7.18, 7.04, 5.99 , 5.98 , 5.78 , 5.36 , 5.06 , 6.08 , 6.24, 6.86, 6.96, 6.07, 6.06 , 5.78 , 5.84 , 5.50)
rates_4 <- c( 7.90, 7.10, 7.16 , 7.93 , 7.82 , 7.76, 7.57 , 7.51 ,7.32 ,7.22 , 6.38, 6.25, 6.07 , 5.78 , 5.36 , 6.17 ,6.40, 6.93 , 6.99, 6.22 , 6.10, 5.88, 6.05, 5.85)
rates_5 <- c(7.75, 6.90, 7.08 , 7.82 , 7.95, 7.68 , 7.38 , 7.49 , 7.29 , 7.33, 6.49 ,6.50 , 6.09, 6.14 , 5.53 , 6.08, 6.38 , 6.70 , 6.85 , 6.28 , 6.00 , 5.87, 5.93, 5.89)
yields <- xts(cbind(rates_1, rates_2, rates_3, rates_4, rates_5),
order.by = seq(as.Date("1970-01-01"),as.Date("1971-12-31"), by = "month"))
# Fit the yield curve model
beta <- Nelson.Siegel(yields, c(12,36,60,84,120))
fitted_yields <- NSrates(beta, tau)
# 3D Plot
par(mfrow = c(1, 1), mar = c(1, 1, 1, 1))
n <- length(tau)
t <- nrow(fitted_yields)
z <- as.matrix(fitted_yields)
y <- matrix(rep(1 : n, t), nrow = t, byrow = T)
x <- matrix(rep(1 : t, each = n), nrow = t, byrow = T)
surf3D(x = x, y = y, z = z , bty = "bl2", phi = 30, theta = 22, expand = 0.5, level = 3,
ticktype = "detailed", xlab = "Time", ylab = "Maturity (Months)", zlab = "Yields (%)",
colkey = FALSE, cex = 0.6, xaxt='n')