ใช้เฉพาะข้อมูลที่มีอยู่ ณ เวลาที่ทำการพยากรณ์

GARCH Models in R

Kris Boudt

Professor of finance and econometrics

การพยากรณ์ความผันผวนด้วย `sigma()` บนออบเจกต์ `ugarchforecast`

garchspec <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "norm")
garchfit <- ugarchfit(data = sp500ret, spec = garchspec)
garchforecast <- ugarchforecast(fitORspec = garchfit, n.ahead = 3)
sigma(garchforecast)

2017-12-29 T+1 0.005034754 T+2 0.005127582 T+3 0.005217770
GARCH Models in R

การประมาณความผันผวนด้วย `sigma()` บนออบเจกต์ `ugarchfit` (i)

head(sigma(garchfit), 3)
1989-01-04 0.01099465
1989-01-05 0.01129167
1989-01-06 0.01084294
tail(sigma(garchfit), 3)
2017-12-27 0.005051926
2017-12-28 0.004947569
2017-12-29 0.004862908
GARCH Models in R

การประมาณความผันผวนด้วย sigma() บนออบเจกต์ ugarchfit (ii)

Look ahead bias: การประมาณความผันผวนใช้ผลตอบแทนในอนาคต

GARCH Models in R

วิธีหลีกเลี่ยง look-ahead bias: การประมาณแบบ Rolling

  • เขียน for loop: วนซ้ำตามเวลาพยากรณ์ ใช้ ugarchfit() ประมาณโมเดล และ ugarchforecast() พยากรณ์ความผันผวน
  • ฟังก์ชันในตัว ugarchroll() จากแพ็กเกจ rugarch
  • ตัวเลือก:
    • ขนาดของชุดข้อมูลสำหรับการประมาณ
    • ความถี่ในการประมาณโมเดล
GARCH Models in R

การประมาณแบบ Expanding Window

ใช้ผลตอบแทนทั้งหมดที่มีอยู่ ณ เวลาที่พยากรณ์

GARCH Models in R

การประมาณแบบ Moving Window

ใช้เฉพาะข้อมูลผลตอบแทนล่าสุดจำนวนคงที่ที่มีอยู่ ณ เวลาที่พยากรณ์

GARCH Models in R

คุณสมบัติของการประมาณแบบ Rolling Window

  • Rolling window ช่วยให้ปรับตัวตามการเปลี่ยนแปลงของพารามิเตอร์โมเดลได้
  • ต้นทุนการคำนวณของ ugarchroll() อยู่ที่การวนซ้ำตามเวลาพยากรณ์:
    • ลดได้โดยประมาณโมเดลใหม่ด้วยความถี่ต่ำกว่าความถี่การพยากรณ์
GARCH Models in R

Rolling และการประมาณโมเดลใหม่

ลดต้นทุนการคำนวณโดยประมาณโมเดลใหม่ทุก $K$ การสังเกต

GARCH Models in R

ฟังก์ชัน ugarchroll

garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
                        refit.window = "moving", refit.every = 500)

อาร์กิวเมนต์ที่ต้องระบุ:

  1. GARCH specification ที่ใช้
  2. data : ข้อมูลผลตอบแทนที่ใช้
  3. n.start: ขนาดของชุดข้อมูลเริ่มต้นสำหรับการประมาณ
  4. refit.window: วิธีเปลี่ยนชุดข้อมูลตามเวลา: "moving" หรือ "expanding"
  5. refit.every: ความถี่ในการประมาณโมเดลใหม่
GARCH Models in R

ตัวอย่างผลตอบแทน EUR/USD รายวัน ม.ค. 1999 – ธ.ค. 2018

สำหรับผลตอบแทน EUR/USD จำนวน 4,961 การสังเกต เริ่มต้นวันที่ 1999-01-05 โดยใช้ moving estimation window ขนาด 2,500 การสังเกต:

GARCH Models in R

ผลลัพธ์ของพารามิเตอร์ที่เปลี่ยนแปลง

เมธอด coef() สร้าง list ของค่าสัมประสิทธิ์ที่ประมาณได้สำหรับแต่ละช่วงการประมาณ

coef(garchroll)[[1]]
$index
"2008-12-08"

$coef
            Estimate   Std. Error     t value  Pr(>|t|)
mu     -1.480000e-04 1.330915e-04 -1.11201737 0.2661307
ar1    -2.953484e-03 1.985344e-02 -0.14876432 0.8817396
omega   7.498928e-08 5.587618e-06  0.01342062 0.9892922
alpha1  2.805079e-02 6.401139e-02  0.43821564 0.6612300
beta1   9.709400e-01 6.080197e-02 15.96889122 0.0000000
shape   1.098068e+01 2.609293e+01  0.42082981 0.6738794
GARCH Models in R

การเปลี่ยนแปลงระหว่างช่วงการประมาณ

coef(garchroll)[[1]]$coef # 2008-12-08
            Estimate   Std. Error     t value  Pr(>|t|)
omega   7.498928e-08 5.587618e-06  0.01342062 0.9892922
alpha1  2.805079e-02 6.401139e-02  0.43821564 0.6612300
beta1   9.709400e-01 6.080197e-02 15.96889122 0.0000000
coef(garchroll)[[5]]$coef # 2016-11-28
            Estimate   Std. Error      t value     Pr(>|t|)
omega   8.982527e-08 2.639680e-05  0.003402885 9.972849e-01
alpha1  4.149787e-02 2.550381e-01  0.162712424 8.707449e-01
beta1   9.573885e-01 2.195782e-01  4.360125676 1.299878e-05
GARCH Models in R

ค่าเฉลี่ยและความผันผวนที่พยากรณ์แบบ Rolling คืออะไร?

สำหรับผลตอบแทน EUR/USD ที่มี n.start = 2500 การพยากรณ์แรกคือการสังเกตที่ 2501 ได้แก่ 2008-12-09:

GARCH Models in R

เมธอด as.data.frame()

preds <- as.data.frame(garchroll)
head(preds, 3)
                      Mu      Sigma Skew    Shape Shape(GIG)      Realized
2008-12-09 -8.271288e-05 0.01196917    0 10.98068          0  0.0003864884
2008-12-10 -1.495786e-04 0.01179742    0 10.98068          0 -0.0066799754
2008-12-11 -1.287079e-04 0.01167929    0 10.98068          0 -0.0203099142

หมายเหตุ:

  • preds$Mu: อนุกรมค่าเฉลี่ยที่พยากรณ์
  • preds$Sigma: อนุกรมความผันผวนที่พยากรณ์
GARCH Models in R

ความผันผวนที่พยากรณ์

garchvol <- xts(preds$Sigma, order.by = as.Date(rownames(preds)))
plot(garchvol)

GARCH Models in R

ความแม่นยำของการพยากรณ์แบบ Rolling

preds <- as.data.frame(garchroll)
head(preds)
                      Mu      Sigma Skew    Shape Shape(GIG)      Realized
2008-12-09 -8.271288e-05 0.01196917    0 10.98068          0  0.0003864884
2008-12-10 -1.495786e-04 0.01179742    0 10.98068          0 -0.0066799754
2008-12-11 -1.287079e-04 0.01167929    0 10.98068          0 -0.0203099142
2008-12-12 -8.845214e-05 0.01199756    0 10.98068          0 -0.0041201588
2008-12-15 -1.362683e-04 0.01184438    0 10.98068          0 -0.0230532787
2008-12-16 -8.034966e-05 0.01228900    0 10.98068          0 -0.0105720492

ประเมินความแม่นยำของ preds$Mu และ preds$Sigma โดยเปรียบเทียบกับ preds$Realized

GARCH Models in R

ค่าเฉลี่ยของความคลาดเคลื่อนกำลังสองสำหรับค่าเฉลี่ย

# Prediction error for the mean
e  <- preds$Realized - preds$Mu  
mean(e ^ 2)
3.867998e-05
GARCH Models in R

ค่าเฉลี่ยของความคลาดเคลื่อนกำลังสองสำหรับความแปรปรวน

# Prediction error for the mean
e  <- preds$Realized - preds$Mu  

# Prediction error for the variance
d  <- e ^ 2 - preds$Sigma ^ 2 
mean(d ^ 2)
6.974161e-09
GARCH Models in R

เปรียบเทียบสองโมเดล

Standard GARCH ที่ใช้การแจกแจงแบบ student t

tgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
     variance.model = list(model = "sGARCH"), distribution.model = "std")
garchroll <- ugarchroll(tgarchspec, data = EURUSDret, n.start = 2500,
                        refit.window = "moving", refit.every = 500)

GJR GARCH ที่ใช้การแจกแจงแบบ skewed student t

gjrgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
   variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
gjrgarchroll <- ugarchroll(gjrgarchspec, data = EURUSDret, n.start = 2500,
            refit.window = "moving", refit.every = 500)
GARCH Models in R

การเปรียบเทียบความแม่นยำของการพยากรณ์

Standard GARCH ที่ใช้การแจกแจงแบบ student t

preds <- as.data.frame(garchroll)
e  <- preds$Realized - preds$Mu  
d  <- e ^ 2 - preds$Sigma ^ 2 
mean(d ^ 2) # yields 6.974161e-09

GJR GARCH ที่ใช้การแจกแจงแบบ skewed student t

gjrpreds <- as.data.frame(gjrgarchroll)
e  <- gjrpreds$Realized - gjrpreds$Mu  
d  <- e ^ 2 - gjrpreds$Sigma ^ 2 
mean(d ^ 2) # yields 6.965095e-09
GARCH Models in R

ผลลัพธ์จริงคือบทพิสูจน์ที่ดีที่สุด

GARCH Models in R

Preparing Video For Download...