Giảng viên hướng dẫn:” TS. Trần Đình Phụng
Sinh viên
thực hiện: Lê Ngọc Tường Vy
” output: word_document: toc: true html_document: df_print: paged theme: flatly toc: true toc_float: collapsed: false smooth_scroll: false number_sections: true code_folding: hide code_download: false
k2 <- read.csv("~/Downloads/TLHK3:2025/Kinh tế lượng PTTC/Gold Price Regression.csv")
head(k2)
## date sp500.open sp500.high sp500.low sp500.close sp500.volume
## 1 2010-01-14 114.49 115.14 114.42 114.93 115646960
## 2 2010-01-15 114.73 114.84 113.20 113.64 212252769
## 3 2010-01-18 NA NA NA NA NA
## 4 2010-01-19 113.62 115.13 113.59 115.06 138671890
## 5 2010-01-20 114.28 114.45 112.98 113.89 216330645
## 6 2010-01-21 113.92 114.27 111.56 111.70 344747028
## sp500.high.low nasdaq.open nasdaq.high nasdaq.low nasdaq.close nasdaq.volume
## 1 0.72 46.26 46.520 46.22 46.39 75209000
## 2 1.64 46.46 46.550 45.65 45.85 126849300
## 3 NA NA NA NA NA NA
## 4 1.54 45.96 46.640 45.95 46.59 84388200
## 5 1.47 46.27 46.604 45.43 45.92 145680000
## 6 2.71 46.06 46.350 45.30 45.49 204939600
## nasdaq.high.low us_rates_. CPI usd_chf eur_usd GDP silver.open silver.high
## 1 0.300 NA NA 1.0206 1.4478 NA 18.58 18.70
## 2 0.900 NA NA 1.0264 1.4376 NA 18.54 18.54
## 3 NA NA NA NA NA NA NA NA
## 4 0.690 NA NA 1.0340 1.4269 NA 18.53 18.79
## 5 1.174 NA NA 1.0453 1.4094 NA 18.31 18.31
## 6 1.050 NA NA 1.0426 1.4106 NA 17.82 17.91
## silver.low silver.close silver.volume silver.high.low oil.open oil.high
## 1 18.45 18.66 69804 0.25 39.30 39.4400
## 2 18.36 18.41 205106 0.18 38.97 39.0200
## 3 NA NA NA NA NA NA
## 4 18.50 18.79 130552 0.29 38.07 38.9499
## 5 17.78 17.86 230907 0.53 38.23 38.3500
## 6 17.32 17.38 198067 0.59 38.22 38.4100
## oil.low oil.close oil.volume oil.high.low platinum.open platinum.high
## 1 38.88 39.06 8575821 0.5600 160.13 161.85
## 2 38.28 38.40 12615299 0.7400 160.68 161.25
## 3 NA NA NA NA NA NA
## 4 38.03 38.93 8180157 0.9199 162.23 165.20
## 5 37.88 37.89 11438685 0.4700 163.51 163.51
## 6 37.09 37.24 13716561 1.3200 161.86 162.50
## platinum.low platinum.close platinum.volume platinum.high.low palladium.open
## 1 159.7200 161.45 228500 2.1300 43.93
## 2 159.5000 160.25 189900 1.7500 45.18
## 3 NA NA NA NA NA
## 4 162.1722 165.12 295900 3.0278 46.01
## 5 159.0900 163.22 438200 4.4200 46.59
## 6 159.1200 159.79 247600 3.3800 46.60
## palladium.high palladium.low palladium.close palladium.volume
## 1 45.02 43.86 44.84 364528
## 2 45.76 44.40 45.76 442210
## 3 NA NA NA NA
## 4 47.08 45.70 46.94 629150
## 5 47.31 45.17 47.05 643198
## 6 46.98 45.07 45.30 388457
## palladium.high.low gold.open gold.high gold.low gold.close gold.volume
## 1 1.16 111.51 112.37 110.79 112.03 18305238
## 2 1.36 111.35 112.01 110.38 110.86 18000724
## 3 NA NA NA NA NA NA
## 4 1.38 110.95 111.75 110.83 111.52 10467927
## 5 2.14 109.97 110.05 108.46 108.94 17534231
## 6 1.91 108.48 108.78 106.61 107.37 25747831
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
# 1. Chọn các biến
vars <- c("gold.close","sp500.close","oil.close","silver.close","usd_chf")
k2 <- k2 %>% select(all_of(vars)) %>% na.omit()
# Chỉ giữ log-return
k2_logret <- k2 %>%
transmute(across(everything(), ~ log(. / lag(.)), .names = "{.col}_ret")) %>%
drop_na() # bỏ quan sát đầu tiên vì lag tạo NA
# Kiểm tra
head(k2_logret)
## gold.close_ret sp500.close_ret oil.close_ret silver.close_ret usd_chf_ret
## 1 -0.010498549 -0.011287690 -0.01704147 -0.013488200 0.0056668447
## 2 0.005935803 0.012418174 0.01370770 0.020430818 0.0073772418
## 3 -0.023406675 -0.010220661 -0.02707794 -0.050761238 0.0108691495
## 4 -0.014516459 -0.019416364 -0.01730377 -0.027243456 -0.0025863322
## 5 -0.001864455 -0.022544072 -0.02446439 -0.017997583 -0.0024968802
## 6 0.002888425 0.005114633 0.01285048 0.003508776 0.0002884199
Mô hình đè xuất:
\[ gold.close\_ret = \beta_0 + \beta_1 \cdot sp500.close\_ret + \beta_2 \cdot silver.close\_ret + \beta_3 \cdot usd\_chf\_ret + \beta_4 \cdot oil.close\_ret + \varepsilon \]
summary(k2_logret)
## gold.close_ret sp500.close_ret oil.close_ret
## Min. :-0.0919051 Min. :-0.1158865 Min. :-0.291891
## 1st Qu.:-0.0048085 1st Qu.:-0.0038326 1st Qu.:-0.011170
## Median : 0.0004504 Median : 0.0006349 Median : 0.000785
## Mean : 0.0002197 Mean : 0.0004425 Mean : 0.000164
## 3rd Qu.: 0.0054858 3rd Qu.: 0.0057911 3rd Qu.: 0.011946
## Max. : 0.0479533 Max. : 0.0867310 Max. : 2.134250
## silver.close_ret usd_chf_ret
## Min. :-0.1540105 Min. :-1.302e-01
## 1st Qu.:-0.0081938 1st Qu.:-3.028e-03
## Median : 0.0004431 Median : 0.000e+00
## Mean : 0.0001477 Mean :-4.472e-05
## 3rd Qu.: 0.0091770 3rd Qu.: 3.001e-03
## Max. : 0.0859617 Max. : 8.891e-02
Quan sát các log-return của các biến, ta thấy:
gold.close_ret (vàng): giá trị trung bình xấp xỉ 0, phân bố gần đều quanh 0, nhưng có biên độ dao động từ khoảng -0.092 đến 0.048, cho thấy giá vàng biến động mạnh trong một số ngày nhất định.
sp500.close_ret (S&P500): biến động quanh 0, biên độ từ -0.116 đến 0.087, khá ổn định so với vàng nhưng vẫn có những ngày biến động lớn, phản ánh sự tác động của thị trường chứng khoán Mỹ đến giá vàng.
oil.close_ret (dầu thô): biên độ rộng nhất, từ -0.292 đến 2.134, thể hiện các cú sốc giá dầu có thể rất mạnh, đây là biến có thể ảnh hưởng đáng kể đến biến vàng. Trung vị và giá trị trung bình gần 0, cho thấy biến động tăng giảm cân bằng theo thời gian.
silver.close_ret (bạc): biến động tương tự vàng, trung vị và trung bình gần 0, biên độ từ -0.154 đến 0.086, cho thấy bạc cũng có xu hướng biến động cùng chiều với vàng, có thể được xem là biến đồng biến với vàng.
usd_chf_ret (tỷ giá USD/CHF): biến động nhỏ, biên độ từ -0.130 đến 0.089, trung bình gần 0, cho thấy tỷ giá chỉ tác động nhẹ đến giá vàng trong giai đoạn quan sát.
Nhìn chung, các biến đều có trung bình gần 0, phù hợp cho phân tích log-return, nhưng dầu thô và bạc có những biến động đáng kể, cần lưu ý khi xây dựng mô hình hồi quy để dự báo giá vàng.
library(corrplot)
## corrplot 0.95 loaded
M <- cor(k2_logret, use = "pairwise.complete.obs")
print(round(M, 3))
## gold.close_ret sp500.close_ret oil.close_ret silver.close_ret
## gold.close_ret 1.000 0.054 0.080 0.790
## sp500.close_ret 0.054 1.000 0.229 0.225
## oil.close_ret 0.080 0.229 1.000 0.148
## silver.close_ret 0.790 0.225 0.148 1.000
## usd_chf_ret -0.322 -0.034 -0.026 -0.266
## usd_chf_ret
## gold.close_ret -0.322
## sp500.close_ret -0.034
## oil.close_ret -0.026
## silver.close_ret -0.266
## usd_chf_ret 1.000
# Vẽ heatmap tương quan
corrplot(M, method = "color", type = "lower", addCoef.col = "black", number.cex = 0.7)
Nhận xét: Nhìn chung, vàng và bạc có mối quan hệ đồng biến rõ ràng, còn
các biến khác (SP500, dầu, tỷ giá) chỉ có tác động nhẹ hoặc ngược chiều.
Đây là thông tin quan trọng khi phân tích mô hình log-return, vì nó xác
định các biến giải thích chính và khả năng đa cộng tuyến thấp. Cụ
thể
gold.close_ret vs silver.close_ret: hệ số tương quan cao 0.79, cho thấy giá vàng và bạc thường biến động cùng chiều, bạc có thể là chỉ báo đồng biến với vàng.
gold.close_ret vs sp500.close_ret: tương quan rất thấp (0.05), nghĩa là biến động của S&P500 ít liên quan trực tiếp đến giá vàng trong dữ liệu này.
gold.close_ret vs oil.close_ret: tương quan thấp (0.08), tức biến động giá dầu thô có ảnh hưởng nhỏ đến vàng, mặc dù một số cú sốc dầu có thể gây tác động nhưng tổng thể không mạnh.
gold.close_ret vs usd_chf_ret: tương quan âm (-0.32), cho thấy khi USD tăng mạnh so với CHF, giá vàng có xu hướng giảm nhẹ, phù hợp với mối quan hệ vàng – USD truyền thống.
Các biến khác: sp500 – oil tương quan nhẹ (0.23), silver – oil (0.15), usd_chf với tất cả biến khác âm nhẹ, thể hiện tác động tỷ giá lên các loại tài sản có phần hạn chế.
# 4. Chạy mô hình OLS trên log-returns
model_logret1 <- lm(gold.close_ret ~ sp500.close_ret + silver.close_ret + oil.close_ret+ usd_chf_ret,
data = k2_logret)
# Xem kết quả
summary(model_logret1)
##
## Call:
## lm(formula = gold.close_ret ~ sp500.close_ret + silver.close_ret +
## oil.close_ret + usd_chf_ret, data = k2_logret)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.037833 -0.003129 0.000056 0.003039 0.036642
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.999e-04 9.527e-05 2.098 0.036 *
## sp500.close_ret -1.130e-01 9.185e-03 -12.298 <2e-16 ***
## silver.close_ret 4.187e-01 5.512e-03 75.957 <2e-16 ***
## oil.close_ret -2.624e-03 2.340e-03 -1.121 0.262
## usd_chf_ret -1.875e-01 1.624e-02 -11.546 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.005771 on 3671 degrees of freedom
## Multiple R-squared: 0.6537, Adjusted R-squared: 0.6533
## F-statistic: 1732 on 4 and 3671 DF, p-value: < 2.2e-16
Mô hình hồi quy tuyến tính được ước lượng với biến phụ thuộc là tốc độ thay đổi giá vàng (gold.close_ret) và các biến độc lập là:
\[ \text{gold.close_ret} = 0.0001999 - 0.1130 \cdot \text{sp500.close_ret} + 0.4187 \cdot \text{silver.close_ret} - 0.002624 \cdot \text{oil.close_ret} - 0.1875 \cdot \text{usd_chf_ret} \]
sp500.close_ret (tỷ suất thay đổi chỉ số S&P 500),
silver.close_ret (tỷ suất thay đổi giá bạc),
oil.close_ret (tỷ suất thay đổi giá dầu),
usd_chf_ret (tỷ suất thay đổi tỷ giá USD/CHF).
Mô hình có R² điều chỉnh = 0.6533, nghĩa là khoảng 65.3% biến thiên của giá vàng được giải thích bởi các biến độc lập trong mô hình. Đây là mức giải thích khá cao trong nghiên cứu tài chính, đặc biệt với dữ liệu biến động ngắn hạn (log-return).
Nhận xét hệ số hồi quy:
Biến | Hệ số ước lượng | Ý nghĩa | Ý nghĩa thống kê |
---|---|---|---|
Intercept | 0.0001999 | Khi tất cả các biến độc lập bằng 0, giá vàng tăng trung bình 0.02% | p = 0.036 < 0.05, có ý nghĩa thống kê ở mức 5% |
sp500.close_ret | -0.1130 | Khi S&P 500 tăng 1%, giá vàng giảm trung bình 0.113% | p < 2e-16, có ý nghĩa thống kê rất mạnh |
silver.close_ret | 0.4187 | Khi giá bạc tăng 1%, giá vàng tăng trung bình 0.419% | p < 2e-16, có ý nghĩa thống kê rất mạnh |
oil.close_ret | -0.002624 | Khi giá dầu tăng 1%, giá vàng giảm trung bình 0.26‰ | p = 0.262 > 0.05, không có ý nghĩa thống kê |
usd_chf_ret | -0.1875 | Khi tỷ giá USD/CHF tăng 1%, giá vàng giảm trung bình 0.1875% | p < 2e-16, có ý nghĩa thống kê rất mạnh |
Nhận xét chi tiết:
mối quan hệ S&P 500 và USD/CHF với giá vàng là âm và có ý nghĩa thống kê, phù hợp với lý thuyết “vàng là tài sản phòng ngừa rủi ro”: khi thị trường chứng khoán mạnh lên (S&P 500 tăng) hoặc USD mạnh hơn so với CHF, giá vàng thường giảm.
mối quan hệ giữa giá vàng và giá bạc là dương và rất mạnh, thể hiện mối tương quan chặt chẽ giữa hai kim loại quý.
giá dầu không có tác động đáng kể đến giá vàng trong mô hình này, có thể do dữ liệu ngắn hạn hoặc biến động dầu không đồng bộ với vàng.
Vì oil.close_retkhông có ý nghĩa thống kê nên bỏ biến.
# 4. Chạy mô hình OLS trên log-returns
model_logret <- lm(gold.close_ret ~ sp500.close_ret + silver.close_ret + usd_chf_ret,
data = k2_logret)
# Xem kết quả
summary(model_logret)
##
## Call:
## lm(formula = gold.close_ret ~ sp500.close_ret + silver.close_ret +
## usd_chf_ret, data = k2_logret)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.037882 -0.003145 0.000057 0.003033 0.036711
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.005e-04 9.528e-05 2.104 0.0354 *
## sp500.close_ret -1.150e-01 8.995e-03 -12.789 <2e-16 ***
## silver.close_ret 4.181e-01 5.485e-03 76.229 <2e-16 ***
## usd_chf_ret -1.876e-01 1.624e-02 -11.556 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.005772 on 3672 degrees of freedom
## Multiple R-squared: 0.6535, Adjusted R-squared: 0.6532
## F-statistic: 2309 on 3 and 3672 DF, p-value: < 2.2e-16
Tổng quan mô hình:
\[ \text{gold.close_ret} = 0.0002005 - 0.1150 \cdot \text{sp500.close_ret} + 0.4181 \cdot \text{silver.close_ret} - 0.1876 \cdot \text{usd_chf_ret} \]
Biến phụ thuộc: tốc độ thay đổi giá vàng (gold.close_ret).
Biến độc lập: S&P 500 (sp500.close_ret), bạc (silver.close_ret), USD/CHF (usd_chf_ret).
R² điều chỉnh = 0.6532 → ~65% biến thiên của giá vàng được giải thích bởi các biến này.
F-statistic = 2309, p-value < 2.2e-16 → mô hình có ý nghĩa tổng thể, ít nhất một biến độc lập có tác động với vàng.
Nhận xét hệ số hồi quy:
Biến | Hệ số | Ý nghĩa | Ý nghĩa thống kê |
---|---|---|---|
Intercept | 0.0002005 | Khi tất cả biến độc lập = 0, vàng tăng ~0.02% | p = 0.035 → ý nghĩa ở mức 5% |
sp500.close_ret | -0.115 | Khi S&P 500 tăng 1%, vàng giảm ~0.115% | p < 2e-16 → rất có ý nghĩa |
silver.close_ret | 0.418 | Khi giá bạc tăng 1%, vàng tăng ~0.418% | p < 2e-16 → rất có ý nghĩa |
usd_chf_ret | -0.188 | Khi USD mạnh hơn CHF 1%, vàng giảm ~0.188% | p < 2e-16 → rất có ý nghĩa |
Nhận xét chi tiết:
Vàng di chuyển ngược chiều với S&P 500 và USD/CHF, phù hợp lý thuyết “vàng là tài sản phòng ngừa rủi ro”.
Vàng có quan hệ mạnh và dương với bạc, cho thấy tương quan chặt chẽ giữa hai kim loại quý.
# 1. Tính VIF từ mô hình log-return
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
vif_vals <- vif(model_logret)
# 2. Chuyển sang data frame để ggplot vẽ
vif_df <- data.frame(
Variable = names(vif_vals),
VIF = as.numeric(vif_vals)
)
# 3. Vẽ biểu đồ trực quan hoá VIF
library(ggplot2)
library(ggthemes)
high_vif_threshold <- 5 # ngưỡng cảnh báo
ggplot(vif_df, aes(x = reorder(Variable, -VIF), y = VIF, fill = VIF)) +
geom_col(width = 0.6, show.legend = FALSE) +
geom_text(aes(label = round(VIF, 2)), vjust = -0.5, color = "black", size = 4.5) +
geom_hline(yintercept = high_vif_threshold, linetype = "dashed", color = "#D72638", size = 1.2) +
annotate("text", x = 1, y = high_vif_threshold + 0.5,
label = paste("Ngưỡng =", high_vif_threshold),
color = "#D72638", size = 4.2, hjust = 0) +
scale_fill_gradient(low = "#A6CEE3", high = "#1F78B4") +
scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
labs(
title = "Kiểm tra đa cộng tuyến bằng chỉ số VIF",
subtitle = "Biểu đồ trực quan hoá giá trị VIF của các biến giải thích",
x = "Tên biến độc lập",
y = "Giá trị VIF"
) +
theme_minimal(base_family = "Helvetica") +
theme(
plot.title = element_text(hjust = 0.5, size = 17, face = "bold", color = "#003366"),
plot.subtitle = element_text(hjust = 0.5, size = 13, color = "#666666"),
axis.title = element_text(size = 13, face = "bold"),
axis.text.x = element_text(angle = 20, vjust = 0.7, size = 11),
axis.text.y = element_text(size = 11)
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Nhìn vào biểu đồ VIF:
Các biến độc lập trong mô hình (silver.close_ret, usd_chf_ret, sp500.close_ret) có giá trị VIF lần lượt là 1.13, 1.08 và 1.05.
Ngưỡng cảnh báo đa cộng tuyến thường là VIF > 5 (hoặc 10).
Nhận xét:
Tất cả các biến đều có VIF rất thấp (< 5) → không có hiện tượng đa cộng tuyến đáng kể giữa các biến độc lập.
Mô hình hồi quy có thể tin tưởng vào các ước lượng hệ số, không lo sai số do cộng tuyến.
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest_res <- bptest(model_logret)
bptest_res
##
## studentized Breusch-Pagan test
##
## data: model_logret
## BP = 49.778, df = 3, p-value = 8.906e-11
Giả thuyết:
H0: Phương sai của sai số là đồng nhất (không có heteroskedasticity).
H1: Phương sai của sai số không đồng nhất (có heteroskedasticity).
Mức ý nghĩa: α=5%
Kết quả kiểm định: Giá trị p-value = 8.906e-11 < 0.05
Kết luận: Bác bỏ H0. Mô hình có phương sai sai số thay đổi.
# Kiểm định tự tương quan phần dư
library(lmtest)
dwtest(model_logret)
##
## Durbin-Watson test
##
## data: model_logret
## DW = 2.0713, p-value = 0.9848
## alternative hypothesis: true autocorrelation is greater than 0
Giả thuyết:
H0: Không có tự tương quan bậc 1 trong sai số.
H1: Có tự tương quan bậc 1 trong sai số.
Mức ý nghĩa: α=5%
Kết quả kiểm định: Giá trị p-value = 0.9848 > 0.05
Kết luận: Không đủ cơ sở bác bỏ H0. Mô hình không có dấu hiệu tự tương quan bậc 1.
shapiro.test(residuals(model_logret)) # Nếu n <= 5000
##
## Shapiro-Wilk normality test
##
## data: residuals(model_logret)
## W = 0.96574, p-value < 2.2e-16
# Hoặc histogram & QQ plot cho n lớn
par(mfrow=c(1,2))
hist(residuals(model_logret), main="Histogram residuals", xlab="Residuals", col="lightblue", breaks=30)
qqnorm(residuals(model_logret))
qqline(residuals(model_logret), col="red")
par(mfrow=c(1,1))
Giả thuyết:
H0: Sai số tuân theo phân phối chuẩn.
H1: Sai số không tuân theo phân phối chuẩn.
Mức ý nghĩa: α=5%
Kết quả kiểm định: Giá trị p-value < 2.2e-16 < 0.05
Kết luận: Bác bỏ H0. Sai số không tuân theo phân phối chuẩn.
`
library(nlme)
##
## Attaching package: 'nlme'
## The following object is masked from 'package:dplyr':
##
## collapse
# GLS chỉ khắc phục heteroskedasticity
gls_logret <- gls(
gold.close_ret ~ sp500.close_ret + silver.close_ret + usd_chf_ret,
data = k2_logret,
weights = varIdent(form = ~1), # khắc phục PSSS
method = "REML"
)
summary(gls_logret)
## Generalized least squares fit by REML
## Model: gold.close_ret ~ sp500.close_ret + silver.close_ret + usd_chf_ret
## Data: k2_logret
## AIC BIC logLik
## -27420.63 -27389.58 13715.31
##
##
## Coefficients:
## Value Std.Error t-value p-value
## (Intercept) 0.0002005 0.000095276 2.10426 0.0354
## sp500.close_ret -0.1150421 0.008995320 -12.78911 0.0000
## silver.close_ret 0.4180837 0.005484553 76.22932 0.0000
## usd_chf_ret -0.1876230 0.016236311 -11.55576 0.0000
##
## Correlation:
## (Intr) s500._ slvr._
## sp500.close_ret -0.040
## silver.close_ret 0.003 -0.224
## usd_chf_ret 0.007 -0.028 0.265
##
## Standardized residuals:
## Min Q1 Med Q3 Max
## -6.563356515 -0.544963046 0.009813533 0.525540309 6.360613154
##
## Residual standard error: 0.00577168
## Degrees of freedom: 3676 total; 3672 residual
\[ \text{gold.close_ret} = 0.0002005 - 0.1150421 \cdot \text{sp500.close_ret} + 0.4180837 \cdot \text{silver.close_ret} - 0.187623 \cdot \text{usd_chf_ret} \]
Nhận xét hệ số:
Intercept = 0.0002005, t = 2.10426, p = 0.0354 < 0.05 → có ý nghĩa thống kê, trung bình log return của vàng khi các biến khác bằng 0 là dương rất nhỏ.
sp500.close_ret = -0.1150421, t = -12.78911, p < 0.001 → có ý nghĩa thống kê, log return của vàng giảm khi S&P 500 tăng.
silver.close_ret = 0.4180837, t = 76.22932, p < 0.001 → có ý nghĩa thống kê mạnh, log return của vàng tăng khi bạc tăng.
usd_chf_ret = -0.1876230, t = -11.55576, p < 0.001 → có ý nghĩa thống kê, log return của vàng giảm khi USD/CHF tăng.
Kết luận:Mô hình có tất cả các biến độc lập có ý nghĩa thống kê ở mức 5%. Hướng tác động phù hợp với kỳ vọng kinh tế: vàng tương quan dương với bạc và tương quan nghịch với S&P 500 và USD/CHF.
library(sandwich)
library(lmtest)
model_logret <- lm(gold.close_ret ~ sp500.close_ret + silver.close_ret + usd_chf_ret, data = k2_logret)
# Hồi quy OLS với sai số chuẩn HC3
coeftest(model_logret, vcov = vcovHC(model_logret, type = "HC3"))
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.0049e-04 9.6205e-05 2.0839 0.03723 *
## sp500.close_ret -1.1504e-01 1.6060e-02 -7.1634 9.465e-13 ***
## silver.close_ret 4.1808e-01 1.0606e-02 39.4205 < 2.2e-16 ***
## usd_chf_ret -1.8762e-01 2.7577e-02 -6.8037 1.186e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
\[ \text{gold.close\_ret} = 0.0002005 - 0.115042 \cdot \text{sp500.close\_ret} + 0.4180837 \cdot \text{silver.close\_ret} - 0.187623 \cdot \text{usd\_chf\_ret} \]
Nhận xét bình thường:
Intercept = 0.0002005, t = 2.0839, p = 0.03723 < 0.05 → có ý nghĩa thống kê.
sp500.close_ret = -0.115042, t = -7.1634, p < 0.001 → log return vàng giảm khi S&P 500 tăng.
silver.close_ret = 0.4180837, t = 39.4205, p < 0.001 → log return vàng tăng khi bạc tăng.
usd_chf_ret = -0.187623, t = -6.8037, p < 0.001 → log return vàng giảm khi USD/CHF tăng.
Kết luận: Mô hình ổn định, tất cả các biến độc lập đều có ý nghĩa thống kê ở mức 5%, hướng tác động phù hợp với kỳ vọng kinh tế.
library(lmtest)
bptest(model_logret) # Kiểm heteroskedasticity
##
## studentized Breusch-Pagan test
##
## data: model_logret
## BP = 49.778, df = 3, p-value = 8.906e-11
Giả thuyết:
H0: Phương sai của sai số là đồng nhất (không có heteroskedasticity).
H1: Phương sai của sai số không đồng nhất (có heteroskedasticity).
Mức ý nghĩa: α=5%
Kết quả kiểm định: Giá trị p-value = 8.906e-11 < 0.05
Kết luận: Bác bỏ H0. Mô hình có phương sai sai số thay đổi.
# Load thư viện
library(nlme)
# Chạy GLS cho log-returns
gls_logret <- gls(
gold.close_ret ~ sp500.close_ret + silver.close_ret + usd_chf_ret,
data = k2_logret,
correlation = corAR1(form = ~1), # tự tương quan AR(1)
weights = varIdent(form = ~1), # heteroskedasticity
method = "REML"
)
# Tóm tắt kết quả
summary(gls_logret)
## Generalized least squares fit by REML
## Model: gold.close_ret ~ sp500.close_ret + silver.close_ret + usd_chf_ret
## Data: k2_logret
## AIC BIC logLik
## -27423.5 -27386.24 13717.75
##
## Correlation Structure: AR(1)
## Formula: ~1
## Parameter estimate(s):
## Phi
## -0.03645525
##
## Coefficients:
## Value Std.Error t-value p-value
## (Intercept) 0.0002007 0.000091870 2.18461 0.029
## sp500.close_ret -0.1151897 0.009019473 -12.77122 0.000
## silver.close_ret 0.4178642 0.005481548 76.23105 0.000
## usd_chf_ret -0.1891724 0.016189194 -11.68510 0.000
##
## Correlation:
## (Intr) s500._ slvr._
## sp500.close_ret -0.042
## silver.close_ret 0.003 -0.226
## usd_chf_ret 0.007 -0.027 0.267
##
## Standardized residuals:
## Min Q1 Med Q3 Max
## -6.568822770 -0.543644528 0.009982601 0.525776864 6.364342858
##
## Residual standard error: 0.005771635
## Degrees of freedom: 3676 total; 3672 residual
\[ \text{gold.close\_ret} = 0.0002007 - 0.1151897 \cdot \text{sp500.close\_ret} + 0.4178642 \cdot \text{silver.close\_ret} - 0.1891724 \cdot \text{usd\_chf\_ret} \]
Nhận xét bình thường:
Intercept = 0.0002007, t = 2.18461, p = 0.029 < 0.05 → có ý nghĩa thống kê.
sp500.close_ret = -0.1151897, t = -12.77122, p < 0.001 → log return vàng giảm khi S&P 500 tăng.
silver.close_ret = 0.4178642, t = 76.23105, p < 0.001 → log return vàng tăng khi bạc tăng.
usd_chf_ret = -0.1891724, t = -11.68510, p < 0.001 → log return vàng giảm khi USD/CHF tăng.
Kết luận: Mô hình ổn định, tất cả các biến độc lập đều có ý nghĩa thống kê ở mức 5%, hướng tác động phù hợp với kỳ vọng kinh tế.
library(lmtest)
# Lấy residuals chuẩn hóa
resid_gls <- residuals(gls_logret, type = "normalized")
# Kiểm định Breusch-Pagan
bptest(resid_gls ~ sp500.close_ret + silver.close_ret + usd_chf_ret, data = k2_logret)
##
## studentized Breusch-Pagan test
##
## data: resid_gls ~ sp500.close_ret + silver.close_ret + usd_chf_ret
## BP = 51.235, df = 3, p-value = 4.359e-11
Giả thuyết:
H0: Phương sai của sai số là đồng nhất (không có heteroskedasticity).
H1: Phương sai của sai số không đồng nhất (có heteroskedasticity).
Mức ý nghĩa: α=5%
Kết quả kiểm định: Giá trị p-value = 4.359e-11 < 0.05
Kết luận: Bác bỏ H0. Mô hình có phương sai sai số thay đổi, tức tồn tại heteroskedasticity.
# Durbin-Watson test
durbinWatsonTest(lm(resid_gls ~ 1))
## lag Autocorrelation D-W Statistic p-value
## 1 -0.0001448712 1.998476 0.89
## Alternative hypothesis: rho != 0
Giả thuyết:
H0: Không có tự tương quan bậc 1 trong sai số.
H1:Có tự tương quan bậc 1 trong sai số.
Mức ý nghĩa: α=5%
Kết quả kiểm định: DW = 1.998476, p-value = 0.95 > 0.05
Kết luận: Không bác bỏ H0. Mô hình không có dấu hiệu tự tương quan bậc 1.
# Giả sử ta có dữ liệu mới để dự báo
# newdata phải có các biến giải thích giống hệt mô hình
# sp500.close_ret, silver.close_ret, usd_chf_ret
# Ví dụ 2 quan sát mới:
newdata <- data.frame(
sp500.close_ret = c(0.002, -0.0015),
silver.close_ret = c(0.003, 0.001),
usd_chf_ret = c(-0.0005, 0.0008)
)
# Dự báo log-returns
pred_logret <- predict(gls_logret, newdata = newdata)
pred_logret
## [1] 0.0013185000 0.0006400114
## attr(,"label")
## [1] "Predicted values"
Kết quả dự báo log return giá vàng: Dự báo cho hai thời điểm tiếp theo:
\[ \hat{r}_{\text{gold},t+1} = 0.0013185, \quad \hat{r}_{\text{gold},t+2} = 0.0006410 \]
Nhận xét:
Giá trị dương nhỏ → dự báo log return vàng tăng nhẹ trong hai kỳ tới.
Mức tăng tương đối nhỏ, phù hợp với đặc tính biến động thấp trong ngắn hạn của log returns.
# Giá vàng cuối cùng trong dữ liệu
last_price <- tail(k2$gold.close, 1)
# Log-returns dự báo từ GLS
pred_logret <- c(0.0013185, 0.0006400)
# Chuyển sang giá dự báo
pred_price <- last_price * exp(pred_logret)
pred_price
## [1] 251.6015 251.4309
Kết quả dự báo giá vàng: Dự báo cho hai thời điểm tiếp theo:
\[ \hat{P}_{\text{gold},t+1} = 251.6015, \quad \hat{P}_{\text{gold},t+2} = 251.4309 \]
Nhận xét chi tiết:
Dự báo cho hai kỳ tiếp theo cho thấy giá vàng giảm nhẹ từ 251.6015 xuống 251.4309.
Mức giảm khoảng 0.17 đơn vị, tương đương 0.07%, là rất nhỏ, cho thấy thị trường vàng được dự báo ổn định trong ngắn hạn.
Điều này phù hợp với đặc tính của dữ liệu log return: biến động hàng ngày hoặc theo ngắn hạn thường không quá lớn, nên giá vàng không thay đổi đột ngột.
Nhà đầu tư có thể xem dự báo này như tín hiệu rằng thị trường vàng tạm thời không có cú sốc lớn, nhưng vẫn cần theo dõi các yếu tố kinh tế vĩ mô (S&P 500, USD/CHF, giá bạc) vì các biến này có tác động đáng kể đến giá vàng theo mô hình hồi quy đã xây dựng.
Nhìn tổng thể, dự báo này giúp lên kế hoạch giao dịch ngắn hạn hoặc điều chỉnh danh mục đầu tư vàng một cách thận trọng, tránh kỳ vọng lợi nhuận lớn trong giai đoạn ổn định này.