1

11 の異なる利回り曲線の毎日の値があります。これは、同じ期間の 11 の利回り満期 (1 年、2 年、3 年、4 年、5 年、7 年、10 年、15 年、20 年、25 年、30 年) の時系列です。ある日の利回りの一部が欠落しており (NA)、同じ日の他の利回りの値を知って、それらの値を推定したいと思います。これは、特定の日に利用可能な利回りの最初の線形補間と、満期の期間 (1 年、2 年など) を重みとして使用して、同じ日の不足利回りの連続する外挿によって行う必要があります。たとえば、次のデータセットがあり、同じ日に利用可能なすべての利回りの内挿に基づいて、5 年利回りの毎日の値を推定したいと考えています。

Date      1     2     3     4  5  7     10    15    20    25 30
7/4/2007  9.642 9.278 8.899 NA NA 8.399 8.241 8.183 8.117 NA NA
7/5/2007  9.669 9.302 8.931 NA NA 8.44  8.287 8.231 8.118 NA NA
7/6/2007  9.698 9.331 8.961 NA NA 8.437 8.295 8.243 8.13  NA NA
7/9/2007  9.678 9.306 8.941 NA NA 8.409 8.269 8.214 8.092 NA NA
7/10/2007 9.65  9.283 8.915 NA NA 8.385 8.243 8.185 8.065 NA NA
7/11/2007 9.7   9.342 8.976 NA NA 8.445 8.306 8.249 8.138 NA NA
7/12/2007 9.703 9.348 8.975 NA NA 8.448 8.303 8.245 8.152 NA NA
7/13/2007 9.69  9.334 8.965 NA NA 8.439 8.294 8.24  8.145 NA NA
7/16/2007 9.683 9.325 8.964 NA NA 8.442 8.299 8.244 8.158 NA NA
7/17/2007 9.712 9.359 8.987 NA NA 8.481 8.33  8.277 8.192 NA NA
7/18/2007 9.746 9.394 9.018 NA NA 8.509 8.363 8.311 8.22  NA NA
...

誰かがそれを行う方法について提案がありますか? ありがとう。

4

1 に答える 1

1

Dateこれは、入手可能な情報に基づいてそれぞれの線形モデルを構築し、それを使用して 5 年目の値を予測/推定する方法の 1 つです。

プロセスを段階的に実行して、その仕組みを確認します。見積もりをチェックして、意味があることを確認します。

dt = read.table(text=
"Date      1     2     3     4  5  7     10    15    20    25 30
7/4/2007  9.642 9.278 8.899 NA NA 8.399 8.241 8.183 8.117 NA NA
7/5/2007  9.669 9.302 8.931 NA NA 8.44  8.287 8.231 8.118 NA NA
7/6/2007  9.698 9.331 8.961 NA NA 8.437 8.295 8.243 8.13  NA NA
7/9/2007  9.678 9.306 8.941 NA NA 8.409 8.269 8.214 8.092 NA NA
7/10/2007 9.65  9.283 8.915 NA NA 8.385 8.243 8.185 8.065 NA NA
7/11/2007 9.7   9.342 8.976 NA NA 8.445 8.306 8.249 8.138 NA NA
7/12/2007 9.703 9.348 8.975 NA NA 8.448 8.303 8.245 8.152 NA NA
7/13/2007 9.69  9.334 8.965 NA NA 8.439 8.294 8.24  8.145 NA NA
7/16/2007 9.683 9.325 8.964 NA NA 8.442 8.299 8.244 8.158 NA NA
7/17/2007 9.712 9.359 8.987 NA NA 8.481 8.33  8.277 8.192 NA NA
7/18/2007 9.746 9.394 9.018 NA NA 8.509 8.363 8.311 8.22  NA NA", header=T)


library(dplyr)
library(tidyr)


dt %>%
  gather(time, value, -Date) %>%                               # reshape dataset
  filter(!is.na(value)) %>%                                    # ignore NA values
  mutate(time = as.numeric(gsub("X","",time))) %>%             # get rid of the X created by importing data
  group_by(Date) %>%                                           # for each date
  do({model = lm(value~time, data=.)                              # build a linear model
      data.frame(pred = predict(model, data.frame(time=5)))})     # use model to predict at time = 5


# Source: local data frame [11 x 2]
# Groups: Date [11]
# 
#          Date     pred
#        (fctr)    (dbl)
# 1  7/10/2007 8.920932
# 2  7/11/2007 8.979601
# 3  7/12/2007 8.981383
# 4  7/13/2007 8.970571
# 5  7/16/2007 8.968542
# 6  7/17/2007 8.999584
# 7  7/18/2007 9.032026
# 8   7/4/2007 8.917645
# 9   7/5/2007 8.950605
# 10  7/6/2007 8.970669
# 11  7/9/2007 8.946661

私はそれをチェックするのに時間を費やしていないので、線形モデルが最適であることを示唆しているわけではありません. ただし、線形の代わりに二次モデルを使用すると、より正確な推定が得られる場合があります。

モデルの出力を確認し、作成してそれぞれに使用したモデルに関する情報を取得する場合は、次のDateようにします。

library(dplyr)
library(tidyr)
library(broom)


dt %>%
  gather(time, value, -Date) %>%                               # reshape dataset
  filter(!is.na(value)) %>%                                    # ignore NA values
  mutate(time = as.numeric(gsub("X","",time))) %>%             # get rid of the X created by importing data
  group_by(Date) %>%                                           # for each date
  do({model = lm(value~time, data=.)                              # build a linear model
      tidy(model)})                                               # check model output


# Source: local data frame [22 x 6]
# Groups: Date [11]
# 
#         Date        term    estimate  std.error statistic      p.value
#       (fctr)       (chr)       (dbl)      (dbl)     (dbl)        (dbl)
# 1  7/10/2007 (Intercept)  9.29495818 0.19895389 46.719158 8.485928e-08
# 2  7/10/2007        time -0.07480530 0.01875160 -3.989275 1.043399e-02
# 3  7/11/2007 (Intercept)  9.34942937 0.19823019 47.164509 8.093526e-08
# 4  7/11/2007        time -0.07396561 0.01868339 -3.958897 1.075469e-02
# 5  7/12/2007 (Intercept)  9.35001022 0.20037595 46.662337 8.537618e-08
# 6  7/12/2007        time -0.07372537 0.01888563 -3.903781 1.136592e-02
# 7  7/13/2007 (Intercept)  9.33730855 0.19974786 46.745476 8.462114e-08
# 8  7/13/2007        time -0.07334758 0.01882643 -3.895989 1.145551e-02
# 9  7/16/2007 (Intercept)  9.33045446 0.19856561 46.989276 8.245272e-08
# 10 7/16/2007        time -0.07238243 0.01871501 -3.867615 1.178869e-02
# ..       ...         ...         ...        ...       ...          ...
于 2015-09-14T15:55:21.607 に答える