Phân Tích Chuỗi Thời Gian Với Sự Hỗ Trợ Của Package Analyzets

62 896 0
Phân Tích Chuỗi Thời Gian Với Sự Hỗ Trợ Của Package Analyzets

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Sách Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS viết về sự hỗ trợ của package AnalyzeTS trong phân tích chuỗi thời gian, đặc biệt là chuỗi thời gian mờ. Mời các bạn cùng tham khảo nội dung cuốn sách để có thêm tài liệu học tập và ôn thi.

PHÂN TÍCH CHUỖI THỜI GIAN VỚI SỰ HỖ TRỢ CỦA PACKAGE AnalyzeTS Hồng Việt Minhhongvietminh@gmail.com Nguyễn Thị Diễm My myntdhg@gmail.com CẦN THƠ_12/2015 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS LỜI TỰA Chuỗi thời gian chủ đề rộng có ứng dụng nhiều thực tế, đặc biệt chuỗi thời gian mờ Trong R có không package hỗ trợ phân tích chuỗi thời gian Tuy nhiên vấn đề (theo tìm hiểu chúng tôi) mà package chưa hỗ trợ tìm mô hình tối ưu từ nhiều mô hình dự tuyển thuộc lớp mô hình “ARIMA”, “ARIMAX” “GARCH”, thứ hai mô hình chuỗi thời gian mờ Package AnalyzeTS nhóm xây dựng trình thực đề tài luận văn tốt nghiệp Công dụng package giải vấn đề nêu Nhằm giới thiệu chức hỗ trợ package AnalyzeTS phân tích chuỗi thời gian, biên soạn sách nhỏ xin giới thiệu đến bạn đọc Cần thơ, ngày 10 tháng 12 năm 2015 Hồng Việt Minh Nguyễn Thị Diễm My Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS MỤC LỤC LỜI TỰA MỤC LỤC PHẦN NỘI DUNG Cấu trúc hàm 1.1 Hàm av.res 1.2 Hàm base.ts 1.3 Hàm Descriptives 1.4 Hàm Dgroup 1.5 Hàm grid.on 1.6 Hàm forecastGARCH 1.7 Hàm Frequencies 1.8 Hàm fuzzy.ts1 1.9 Hàm fuzzy.ts2 1.10 Hàm PrintAIC 1.11 Hàm CMA 1.12 Hàm SES 10 Bài toán doanh thu quán cà phê 10 2.1 Nguồn số liệu 10 2.2 Thống kê mô tả 12 2.2.1 Thống kê mô tả cho month day.of.week 12 2.2.2 Thống kê mô tả cho sales 12 2.3 Mô hình Box-Jenkins 18 2.3.1 Mô hình Box-Jenkins với số liệu gốc 18 2.3.2 Mô hình Box-Jenkins với biến giả 24 2.3.3 Mô hình Box-Jenkins với số liệu làm trơn 29 2.3.3 Mô hình Box-Jenkins với số liệu mờ hóa 38 2.4 Mô hình chuỗi thời gian mờ Abbasov-Mamedova 46 2.5 Tổng hợp so sánh mô hình dự báo 50 Bài toán tỷ xuất sinh lợi giá cổ phiếu 51 3.1 Nguồn số liệu 51 3.1 Mô hình ARMA–GARCH 52 3.2 Mô hình ARMAX–GARCH 59 TÀI LIỆU THAM KHẢO 62 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS PHẦN NỘI DUNG Cấu trúc hàm 1.1 Hàm av.res Nếu ta ký hiệu Yt giá trị thực tế Ft giá trị tính mô hình dự báo thời đoạn ta có độ chênh lệch et = Yt - Ft Dựa sai số tính đại lượng đo lường sau : ME, MAE, MPE, MAPE, MSE, RMSE, U Công thức ME  e t Sai số trung bình (Mean Error) n MAE  e t Sai số tuyệt đối trung bình (Mean Absolute Error) n t e MSE  Sai số bình phương trung bình (Mean Square Error) n RMSE  Tên gọi t e n Căn bậc hai sai số bình phương trung bình (Root of Mean Square Error) et MPE  Y t 100% n et MAPE  U Y t n 100% RMSE RMSENaive Sai số phần trăm trung bình (Mean Percent Error) Sai số phần trăm tuyệt đối trung bình (Mean Absolute Percent Error) Chỉ số U Để tính toán đại lượng đo lường ta sử dụng hàm av.res( ) Ta dùng để tính lúc cho nhiều mô hình dự báo so sánh để tìm mô hình tốt av.res(Y = NULL, F = NULL, E = NULL, r = 3) Y:Chuỗi quan sát F: Chuỗi giá trị dự báo E: Chuỗi phần dư dự báo r: Số thập phân sau dấu phẩy (mặc định 3) Kết trả đại lượng đo lường (nếu có mô hình) ma trận (nếu có từ mô hình trở lên) mà cột giá trị đại lượng đo lường cho mô hình, cột cuối cho biết tên mô hình có giá trị đo lường nhỏ Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS Các chuỗi đầu vào phải tổ hợp dạng data frame Khi muốn tính toán so sánh lúc nhiều mô hình, cần nhóm giá trị dự báo (hoặc chuỗi sai số) lại thành data frame Khi R tính toán so sánh mô hình với Chúng ta đưa vào hàm tham số, Y F Y E Nếu không đưa Y (chuỗi số liệu gốc) vào, đưa lúc F E vào R không nhận dạng thực tính toán 1.2 Hàm base.ts Hàm tính số tiêu dãy số thời gian, nhiên thực tế sử dụng nên không trình bày Bạn đọc xem thông tin hàm thông qua ‘help’ R 1.3 Hàm Descriptives Có 11 đại lượng thống kê miêu tả thường dùng cho biến liên tục trình bày tóm tắt bảng sau Ký hiệu Tên gọi Ký hiệu Tên gọi N Kích thước mẫu rd QU Giá trị phân vị 75% NaN Giá trị NA Max Giá trị lớn Min Giá trị nhỏ VAR Phương sai sq QU Giá trị phân vị 25% SD Độ lệch chuẩn Median Median SE Sai số chuẩn Mean Giá trị trung bình Để tính toán so sánh (khi có nhiều biến liên tục data frame) ta dùng hàm Descriptives   Ta vẽ đồ thị so sánh biến với nhau, cho hiển thị vài giá trị mà ta cần Descriptives(x, plot = FALSE, r = 2, answer = 1, statistic = "ALL") x: Một biến liên tục data frame chứa biến liên tục plot: có dạng + plot = TRUE để vẽ đồ thị miêu tả x chuỗi thời gian chiều + plot = list(a1, a2, …) ( với a1, a2, … giá trị thống kê mô tả Mean, Max, …) để vẽ biểu đồ cột so sánh biến data frame r: Số thập phân sau dấu phẩy (mặc định 2) answer: Form kết trả Ta cho answer=1 (mặc định) answer=2 statistic: Một danh sách giá trị thống kê miêu tả mà người dùng muốn R in hình (mặc định ALL, tức tất 11 giá trị) Kết trả giá trị thống kê mô tả Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 1.4 Hàm Dgroup Đôi phân tích số liệu thống kê, cần thống kê giá trị quan sát theo nhóm đối tượng khác để so sánh Sử dụng hàm Dgroup( ) để thực phân tích Dgroup(x, follow = NULL, r = 2, answer = 1, statistic = "ALL") x: Một biến liên tục chuỗi thời gian follow: Một factor danh sách có không factor r: Số thập phân sau dấu phẩy (mặc định 2) answer: From kết trả Ta cho answer=1 (mặc định) answer=2 statistic: Một danh sách giá trị thống kê miêu tả mà người dùng muốn R in hình (mặc định ALL, tức tất 11 giá trị) Kết trả giá trị thống kê mô tả 1.5 Hàm grid.on Nếu vẽ đồ thị đường đơn điệu lên cửa sổ đồ thị thật tẻ nhạt khó nhận xét Ta thường vẽ lưới lên biểu đồ đường để tiện cho việc nhận xét, hàm grid.on( ) giúp ta việc grid.on(h = TRUE, v = TRUE, col = "gray", nv = 1, nh = 1, lty = 3) h: Cho h=FALSE để không vẽ lưới theo chiều ngang v: Cho v=FALSE để không vẽ lưới theo chiều đứng col: Màu sắc cho đường lưới nv: Số đường lưới điểm trục x nh: Số đường lưới điểm trục y lty: Type đường lưới Tùy thuộc vào giá trị tham số người dùng khai báo mà đường lưới xuất lên biểu đồ 1.6 Hàm forecastGARCH Theo tìm hiểu, phần mềm thống kê không hỗ trợ dự báo cho mô hình ARMA-ARCH (và mô hình tương tự ARMA-GARCH, …), việc dự báo thường tính toán excel Tuy nhiên cách tính dễ sai sót, hàm forecastGARCH( ) xây dựng nhầm mục đích tránh khỏi sai sót đáng tiếc Cấu trúc hàm cho bên forecastGARCH(fitARMA,fitGARCH,r=3,trace=FALSE,newxreg=NULL) fitARMA: Một đối tượng lớp ‘Arima’ fitGARCH: Một đối tượng lớp ‘garch’ r: Số thập phân sau dấu phẩy (mặc định 3) trace: Hiển thị kết tính toán đầy đủ hay hiển thị kết dự báo? Cho trace=TRUE để thị kết tính toán đầy đủ Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS newxreg: Một giá trị biến covariate ngày tiếp theo, dành cho mô hình ARMAX-GARCH Kết trả danh sách gồm thành phần sau: ARCH: Hệ số mô hình GARCH ARMA: Hệ số mô hình ARMA forecast: Kết dự báo gồm cột + Point:Thời điểm dự báo + res: Phần dư dự báo + res^2: Bình phương res + SSL.forecast: Giá trị trung bìnhdự báo + VAR.forecast: Giá trị phương sai dự báo 1.7 Hàm Frequencies Tương tự hàm Descriptives( ) trên, hàm Frequencies( ) tính toán giá trị thống kê mô tả cho biến rời rạc biến rời rạc data frame Frequencies(x, plot = FALSE, r = 2, answer = 1) x: Một biến rời rạc data frame chứa biến rời rạc plot: Cho plot=TRUE để vẽ biểu đồ tròn r: Số thập phân sau dấu phẩy (mặc định 3) answer: Form kết trả Ta cho answer=1 (mặc định) answer=2 Kết trả giá trị thống kê mô tả 1.8 Hàm fuzzy.ts1 Có mô hình làm mờ chuỗi thời gian thông dụng Chen, Singh, Heuristic Chen-Hsu Hàm fuzzy.ts1( ) làm mờ chuỗi thời gian với mô hình fuzzy.ts1(ts, n = 5, D1 = 0, D2 = 0, type = c("Chen", "Singh","Heuristic", "Chen-Hsu"), bin = NULL, trace = FALSE, divide = NULL, plot = FALSE) ts: Chuỗi quan sát n: Số tập mờ D1: Một giá trị thích hợp D2: Một giá trị thích hợp type: Mô hình mờ hóa bin: Điểm chia tập mờ cho mô hình Chen-Hsu Nếu bin=NULL (mặc định) hàm chia tập mờ theo tham số ‘divide’ trace: Hiển thị kết tính toán đầy đủ hay hiển thị kết dự báo? Cho trace=TRUE để thị kết tính toán đầy đủ divide: Phương thức chia tập mờ lần + Cho divide="distance" để chia tập mờ cũ thành tập mờ nhỏ khoảng cách Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS + Cho divide="density" để chia tập mờ cũ thành tập mờ nhỏ mật độ plot: Cho plot=TRUE để vẽ biểu đồ chuỗi quan sát chuỗi mờ hóa Kết trả gồm có: type: Tên mô hình mờ table1: Thông tin tập mờ table2: Kết mờ hóa mô hình Chen, Sinh, Heuristic Chen-Hsu bin != NULL Nếu type = “Chen-Hsu” bin = NULL table2 cung cấp thông tin tập mờ sau chia lại lần table3: Kết mờ hóa mô hình Chen-Hsu bin = NULL accuracy: Thông tin thước đo độ xác mô hình dự báo 1.9 Hàm fuzzy.ts2 Chuỗi thời gian mờ Abbasov-Mamedova nhiều nhà thống kê đánh giá cao độ xác dự báo Sử dụng hàm fuzzy.ts2( ) để mờ hóa dự báo chuỗi thời gian mô hình fuzzy.ts2(ts, n = 5, w = NULL, D1 = 0, D2 = 0, C = NULL, r = 4, trace = FALSE, forecast = NULL, plot = FALSE) ts: Chuỗi quan sát n: Số tập mờ w: Tham số ‘w’ D1: Một giá trị thích hợp D2: Một giá trị thích hợp C: Một số tùy ý r: Số thập phân sau dấu phẩy (mặc định 4) trace: Hiển thị kết tính toán đầy đủ hay hiển thị kết dự báo? Cho trace=TRUE để thị kết tính toán đầy đủ forecast: Số thời điểm dự báo cho tương lai plot: Cho plot=TRUE để vẽ biểu đồ chuỗi quan sát chuỗi mờ hóa Kết trả hàm: type: Tên mô hình mờ table1: Thông tin tập mờ biến đổi table2: Chuỗi quan sát chuỗi biến đổi table3: Mờ hóa biến đổi chuỗi quan sát table4: Giá trị nội suy table5: Giá trị dự báo table6: Mờ hóa biến đổi chuỗi dự báo accuracy: Thông tin thước đo độ xác mô hình dự báo Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 1.10 Hàm PrintAIC Chỉ số AIC tiêu chuẩn thông tin thông dụng việc chọn mô hình tối ưu Hàm PrintAIC( ) hỗ trợ tính toán in hình số AIC mô hình dự tuyển, từ chọn mô hình tối ưu Hiện hàm thực tính toán với mô hình thuộc lớp ‘Arima’, ‘Arimax’ ‘garch’ PrintAIC(DataTimeSeries, order = c(p, d = NULL, q = NULL), seas = list(order = c(P = NULL, D = NULL, Q = NULL), frequency = NULL), type = NULL,xreg=NULL) DataTimeSeries: Chuỗi quan sát order: Tùy thuộc vào giá trị tham số ‘type’ mà order có ý nghĩa sau: + Nếu type="ARMA" (ARMAX) ‘order’ vector chứa số nguyên dương, bậc mô hình ARMA (ARMAX) + Nếu type="ARIMA" (ARIMAX) ‘order’ vector chứa số nguyên dương, bậc mô hình ARIMA (ARIMAX) + Nếu type="SARIMA" (SARIMAX) ‘order’ vector chứa số nguyên dương, bậc mô hình ARIMA (ARIMAX) cho thành phần không mùa chuỗi + Nếu type="ARCH" ‘order’ số nguyên dương, bậc mô hình ARCH + Nếu type="GARCH" ‘order’ vector chứa số nguyên dương, bậc mô hình GARCH seas: Một danh sách chứa thành phần, ‘order’ ‘frequency’ Thành phần ‘order’ vector chứa số nguyên dương, bậc mô hình ARIMA (ARIMAX) cho thành phần mùa chuỗi Thành phần ‘frequency’ frequency chuỗi quan sát type: Mô hình cần tính AIC xreg: Một vector ma trận biến covariate có chiều dài với chuỗi quan sát Kết trả hàm danh sách gồm hai thành phần: Thành phần mohinh: Cho biết tất mô hình dự tuyển, số AIC xếp loại tương ứng mô hình Thành phần best: Cho biết mô hình tối ưu mô hình dự tuyển số AIC 1.11 Hàm CMA Hàm CMA( ) làm trơn chuỗi thời gian theo phương pháp trượt trung tâm CMA(x, n = 5) x: Chuỗi quan sát n: Giá trị khoảng trượt Kết trả hàm chuỗi làm trơn theo phương pháp trượt trung tâm Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 1.12 Hàm SES Hàm SES( ) làm trơn chuỗi thời gian theo phương pháp trượt mũ đơn SES(ts, alpha = 0.5, s0 = NULL) ts: Chuỗi quan sát alpha: Tham số làm trơn, < alpha < (mặc định alpha=0.5) s0: Ước tính ban đầu giá trị s0 Kết trả hàm chuỗi làm trơn theo phương pháp trượt mũ Bài toán doanh thu quán cà phê 2.1 Nguồn số liệu Bộ số liệu lấy từ Café Data Concetta A DePaolo David F Robinson Indiana State University Journal of Statistics Education Volume 19, Number (2011), www.amstat.org/publications/jse/v19n1/depaolo.pdf Bộ số liệu gốc có nhiều cột, sử dụng cột chúng, số liệu cụ thể cho bảng sau date 19/01/2010 20/01/2010 21/01/2010 22/01/2010 25/01/2010 26/01/2010 27/01/2010 28/01/2010 29/01/2010 01/02/2010 02/02/2010 03/02/2010 04/02/2010 05/02/2010 08/02/2010 09/02/2010 10/02/2010 11/02/2010 12/02/2010 month Jan Jan Jan Jan Jan Jan Jan Jan Jan Feb Feb Feb Feb Feb Feb Feb Feb Feb Feb day.of.week Tue Wed Thu Fri Mon Tue Wed Thu Fri Mon Tue Wed Thu Fri Mon Tue Wed Thu Fri 10 sales temperature 199.95 36 195.74 34 102.68 39 162.88 40 101.76 36 186.94 26 120.18 34 228.78 33 88.02 20 119.57 37 172.31 38 137.65 33 197.56 39 70 35 97 31 181.43 29 125.57 26 180.63 28 75.87 30 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS … 45 46 47 102.68 -93.06 … … … 45 82.96 8.83 46 240.87 157.91 47 151.52 -89.35 $table3 [1] NA [2] "A[2]={(0.9999989/u1),(0.9999998/u2),(1/u3),(0.9999995/u4),(0.9999983/u5)}" [3] "A[3]={(1/u1),(0.9999998/u2),(0.999999/u3),(0.9999974/u4),(0.9999951/u5)}" … [45] "A[45]={(0.9999986/u1),(0.9999996/u2),(1/u3),(0.9999996/u4),(0.9999986/u5)}" [46] "A[46]={(0.9999928/u1),(0.9999956/u2),(0.9999978/u3),(0.9999992/u4),(0.9999999/u5)}" [47] "A[47]={(1/u1),(0.9999999/u2),(0.999999/u3),(0.9999975/u4),(0.9999953/u5)}" $table4 point interpolate diff.interpolate 111.25488 8.574882 171.45494 8.574937 110.33498 8.574979 … … … … 42 45 82.7049 8.5749 43 46 91.53489 8.574894 44 47 249.44518 8.575181 $table5 point 48 49 50 51 52 forecast diff.forecast 258.0203 8.575082 266.5952 8.574896 275.1702 8.575 283.7452 8.575 292.3202 8.575 $table6 [1] "A[48]={(0.9999986/u1),(0.9999996/u2),(1/u3),(0.9999996/u4),(0.9999986/u5)}" [2] "A[49]={(0.9999986/u1),(0.9999996/u2),(1/u3),(0.9999996/u4),(0.9999986/u5)}" [3] "A[50]={(0.9999986/u1),(0.9999996/u2),(1/u3),(0.9999996/u4),(0.9999986/u5)}" [4] "A[51]={(0.9999986/u1),(0.9999996/u2),(1/u3),(0.9999996/u4),(0.9999986/u5)}" [5] "A[52]={(0.9999986/u1),(0.9999996/u2),(1/u3),(0.9999996/u4),(0.9999986/u5)}" $accuracy ME MAE MPE MAPE MSE RMSE U Abbasov.Mamedova -7.465 59.492 -19.668 48.1 5031.496 70.933 1.005 > w3 w4 w5 w6 sosanh dimnames(sosanh)[[1]] sosanh ME MAE MPE MAPE MSE RMSE U w2 -7.465 59.492 -19.668 48.1 5031.496 70.933 1.005 w3 -8.839 59.675 -20.862 48.482 5086.53 71.32 1.008 w4 -7.39 59.437 -19.728 48.005 5091.986 71.358 1.005 w5 -9.439 59.018 -21.209 48.177 5073.051 71.225 1.009 w6 -7.791 58.61 -20.172 47.814 5057.993 71.12 1.006 Theo tiêu chuẩn MAPE thấy mô hình w6 (mô hình với tham số w = 6) có giá trị nhỏ nhất, ta nói mô hình Abbasov-Mamedova với tham số w=6 đáng tin cậy Truy xuất giá trị dự báo vẽ đồ thị dự báo mô sau: > dubao.abbasov plot(dubao.abbasov [,2],type="o",pch=18,col=2,xlab="point",ylab="sales", + main="Đồ thị dự báo mô hình Abbasov-Mamedova") > grid.on(v=FALSE) 275 260 sales 290 Ðồ thị dự báo mô hình Abbasov-Mamedova point 49 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 2.5 Tổng hợp so sánh mô hình dự báo Sau phân tích qua mô hình, ta có mô hình dự báo mô hình với biến giả nhiệt độ, mô hình với số liệu làm trơn mô hình AbbasovMamedova Ta có kết dự báo từ mô hình lại thành data frame để tiện quan sát > kqth kqth bien.gia tron chuoi.mo 120.6013 150.7967 258.0201 146.9638 132.7841 266.5951 138.5314 122.5042 275.1701 143.7891 138.9585 283.7451 139.8764 156.1941 292.3201 Nhìn chung mô hình Abbasov-Mamedova có giá trị dự báo tăng liên tục, mô hình lại có giá trị tăng giảm không ngày > bien.gia lam.tron abbasov noisuy goc av.res(Y=goc,F=noisuy) bien.gia lam.tron abbasov min.model ME -3.628 -1.087 -7.791 abbasov MAE 33.414 37.92 58.61 bien.gia MPE -12.893 -11.267 -20.172 abbasov MAPE 28.259 30.344 47.814 bien.gia MSE 1771.301 2061.165 5057.993 bien.gia RMSE 42.087 45.4 71.12 bien.gia U 0.605 0.638 1.006 bien.gia Theo tiêu chuẩn MAPE mô hình bien.gia (mô hình ARIMA với biến giả nhiệt độ) đáng tin cậy Các lệnh bên giúp vẽ đồ thị tổng hợp cho kết dự báo > plot(kqth$bien.gia,type="o",pch=16,col="blue",xlab="point",ylab="sales", + main="Kết dự báo từ mô hình",ylim=c(min(kqth),max(kqth))) > lines(kqth$tron~c(48:52),pch=17,type="o",col="green") > lines(kqth$chuoi.mo~c(48:52),pch=18,type="o",col="red") > legend(51,250,c("biến giả","làm trơn","chuỗi mờ"),lty=c(1,1,1), + pch=c(16,17,18),col=c("blue","green","red")) > grid.on() 50 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 200 biến giả làm tron chuỗi mờ 150 sales 250 Kết dự báo từ mô hình 48 49 50 51 52 point Bài toán tỷ xuất sinh lợi giá cổ phiếu 3.1 Nguồn số liệu Trong phân tích tài chính, kí hiệu loại giá thay đổi hàng ngày Giat , để thuận tiện cho việc phân tích yếu tố ngẫu nhiên số, người ta hay xét đại lượng SSTt  Giat  Giat 1 Giat 1 Hay SSLt  ln Giat  ln Giat 1 xem tỷ suất sinh lợi (lợi nhuận) hay lợi nhuận logarit (t  1) , Giat giá thời điểm t Giả thiết thường ưa chuộng giả thiết cho SSL1 , , SSLt tuân theo luật phân phối chuẩn Thế nhưng, theo phân tích chuỗi thời gian tài chính, giả thiết nhiều không phù hợp với thực tế diễn biến giá tài Ta phân tích chuỗi giá chứng khoán thông qua việc phân tích chuỗi SSLt Dữ liệu phân tích cho toán giá cổ phiếu ACB – mã cổ phiếu Ngân hàng Á Châu Nguồn liệu lấy từ thời điểm 21/11/2006 đến 29/09/2015 địa www.Cophieu68.com/export/excel.php?id=ACB 51 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS Giá cổ phiếu tính lúc đóng cửa (đơn vị ngàn đồng) 3.1 Mô hình ARMA–GARCH Bước 1: Thiết lập suất sinh lợi xác định mô hình dự báo Ta tạo chuỗi liệu suất sinh lợi với 2199 quan sát, suất sinh lợi số giá chứng khoán ACB tính theo công thức SSL(t)=ln(Gia(t)/Gia(t-1)) > data names(data) [1] "X.Ticker." "X.DTYYYYMMDD." "X.OpenFixed." [5] "X.LowFixed." "X.CloseFixed." "X.Volume." [9] "X.High." "X.Low." "X.Close." [13] "X.VolumeFB." "X.VolumeFS." "date" > head(data1) X.DTYYYYMMDD X.CloseFixed date month 20150929 19.4 29 20150928 19.3 28 20150925 19.7 25 20150924 19.5 24 20150923 19.3 23 20150922 19.2 22 "X.HighFixed." "X.Open." "X.VolumeDeal." "month" Đây file số liệu gốc, nên số liệu có nhiều cột thứ tự ngày không với thứ tự chuỗi thời gian Nên ta cần đảo lại thứ tự liệu trích lọc chuỗi giá đóng cửa (cột X.CloseFixed) để phân tích Đoạn code phía sau làm công việc > temp data2 for(i in 1:dim(data2)[1]) data2[i,] head(data2) X.DTYYYYMMDD X.CloseFixed date month 20061121 26.3 21 11 20061122 27.2 22 11 20061123 27.9 23 11 20061124 29.6 24 11 20061127 29.6 27 11 20061128 28.9 28 11 > close #Suất sinh lợi > ln.close SSL Descriptives(SSL,plot="TRUE",r=0,answer=2) 52 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS N: NaN: Min: 1sq QU: Median: Mean: 3rd QU: Max: VAR: SD: SE: x 2198 0 0 0 0 0 10 Skewness: Kurtosis: 100 200 300 400 -0.10 0.00 Time x Series x Series x 0.10 0.05 -0.05 Partial ACF 0.15 0.00 0.05 0.10 0.15 ACF 20 30 Density 0.00 -0.10 x 0.10 40 50 Histogram of x Lag Lag > library(urca) > summary(ur.df(SSL,type="none",lags=5,selectlag="BIC")) Tóm tắt kết kiểm định ADF Giá trị tới hạn tau Test value 1% 5% 10% -32.0015 -2.58 -1.95 -1.62 Chuỗi SSL dao động quanh giá trị 0, kiểm định ADF cho giá trị thống kê |tau| = |-32.0015| > |-1.95| (giá trị tới hạn tau 5%) Ta có đủ chứng để kết luận chuỗi SSL chuỗi dừng Từ biểu đồ ACF PACF xác định mô hình cần tìm SARIMA với bậc p = 2, d = 0, q = 1, P = 1, D = 0, Q = 53 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS Bước 2: Tìm mô hình tối ưu > PrintAIC(SSL,order=c(2,0,1),seas=list(order=c(1,0,1),frequency=5),type="SARIMA") $mohinh Mo hinh Gia tri AIC Xep loai mo hinh SARIMA(0,0,1)*(0,0,1),s=5 AIC = -10306.5 mo hinh SARIMA(0,0,1)*(1,0,0),s=5 AIC = -10305.59 mo hinh SARIMA(0,0,1)*(1,0,1),s=5 AIC = -10306.31 mo hinh SARIMA(1,0,0)*(0,0,1),s=5 AIC = -10304.28 mo hinh SARIMA(1,0,0)*(1,0,0),s=5 AIC = -10303.32 15 mo hinh SARIMA(1,0,0)*(1,0,1),s=5 AIC = -10304.18 11 mo hinh SARIMA(1,0,1)*(0,0,1),s=5 AIC = -10304.54 mo hinh SARIMA(1,0,1)*(1,0,0),s=5 AIC = -10303.64 13 mo hinh SARIMA(1,0,1)*(1,0,1),s=5 AIC = -10304.35 mo hinh 10 SARIMA(2,0,0)*(0,0,1),s=5 AIC = -10305.6 mo hinh 11 SARIMA(2,0,0)*(1,0,0),s=5 AIC = -10304.74 mo hinh 12 SARIMA(2,0,0)*(1,0,1),s=5 AIC = -10305.35 mo hinh 13 SARIMA(2,0,1)*(0,0,1),s=5 AIC = -10304.18 10 mo hinh 14 SARIMA(2,0,1)*(1,0,0),s=5 AIC = -10303.34 14 mo hinh 15 SARIMA(2,0,1)*(1,0,1),s=5 AIC = -10303.89 12 $best Mo hinh toi uu SARIMA(0,0,1)*(0,0,1),s=5 AIC = -10306.5 Mô hình tối ưu SARIMA(0,0,1)*(0,0,1)[5] Ước lượng hệ số cho mô hìnhtối ưu > fit1 fit1 Call: arima(x = SSL, order = c(0, 0, 1), seasonal = list(order = c(0, 0, 1), 5)) Coefficients: ma1 sma1 intercept 0.1514 0.0903 -1.00E-04 s.e 0.0211 0.0219 6.00E-04 sigma^2 estimated as 0.0005364: log likelihood = 5157.25, aic = -10308.5 Bước 3: Kiểm tra hiệu ứng ARCH > Descriptives(res,answer=2,plot=TRUE) N: NaN: Min: 1sq QU: Median: Mean: 3rd QU: Max: VAR: SD: SE: x 2198 -0.12 -0.01 0 0.01 0.13 0.02 54 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 40 30 10 200 300 400 -0.10 0.00 0.10 x Series x Series x Partial ACF -0.04 -0.04 0.00 0.04 Time 0.00 100 0.04 ACF Skewness: 0.15 Kurtosis: 3.74 20 Density 0.00 -0.10 x 0.10 Histogram of x Lag Lag > Box.test(res,lag=32,type="Ljung") Box-Ljung test data: res X-squared = 47.459, df = 32, p-value = 0.03855 Chuỗi phần dư có giá trị dao động quanh giá trị 0, có phương sai không Trên biểu đồ ACF có nhiều độ trễ lớn 0, kiểm định Ljung – Box cho giá trị p–value = 1.00e-04< 0.05, cho thấy có tượng tương quan chuỗi chuỗi phần dư Ta thực kiểm định nhân tử Lagrange để xem có ảnh hưởng ARCH/GARCH hay không 55 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS > library(FinTS) > ArchTest(res,30) ARCH LM-test; Null hypothesis: no ARCH effects data: res Chi-squared = 418.5, df = 30, p-value < 2.2e-16 Giá trị p-value < 2.2e-16 (rất nhỏ so với mức ý nghĩa 5%) bác bỏ giả thuyết, tức chuỗi phần dư có ảnh hưởng ARCH/GARCH Bước 4: Xác định bậc ARCH > tsnew par(mfrow=c(2,1)) > acf(tsnew,lag=100) > pacf(tsnew,lag=100) 0.15 0.30 -0.05 ACF Series tsnew 10 15 20 15 20 Lag 0.25 0.10 -0.05 Partial ACF Series tsnew 10 Lag 56 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS Từ biểu đồ ta thấy, biểu đồ ACF tắt dần nên ta khẳng định chuỗi phần dư có ảnh hưởng ARCH Chọn bậc q = 9, ta tìm mô hình tối ưu từ mô hình dự tuyển > PrintAIC(res,order=9,type="ARCH") $mohinh Mo hinh Gia tri AIC Xep loai mo hinh ARCH(1) AIC = -10845.84 mo hinh ARCH(2) AIC = -11186.86 mo hinh ARCH(3) AIC = -11230.91 mo hinh ARCH(4) AIC = -11345.73 mo hinh ARCH(5) AIC = -11386.54 mo hinh ARCH(6) AIC = -11402.35 mo hinh ARCH(7) AIC = -11406.84 mo hinh ARCH(8) AIC = -11451.1 mo hinh ARCH(9) AIC = -11451.65 $best Mo hinh toi uu ARCH(9) AIC = -11451.65 Warning messages: 1: In sqrt(pred$e) : NaNs produced 2: In sqrt(pred$e) : NaNs produced 3: In sqrt(pred$e) : NaNs produced 4: In sqrt(pred$e) : NaNs produced 5: In sqrt(pred$e) : NaNs produced 6: In sqrt(pred$e) : NaNs produced 7: In sqrt(pred$e) : NaNs produced 8: In sqrt(pred$e) : NaNs produced Mô hình tối ưu ARCH(8) Tuy nhiên bậc lớn nên ta xét thêm mô hình GARCH(1,1) để xem số AIC mô hình có tốt không > PrintAIC(res,order=c(1,1),type="GARCH") $mohinh Mo hinh Gia tri AIC Xep loai mo hinh GARCH(1,0) AIC = -10306.93 mo hinh GARCH(1,1) AIC = -11478.51 $best Mo hinh toi uu GARCH(1,1) AIC = -11478.51 Warning messages: 57 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 1: In garch(DataTimeSeries, order = c(i1, i2), trace = FALSE) : singular information 2: In sqrt(pred$e) : NaNs produced Chỉ số AIC GARCH(1,1) nhở só với mô hình ARCH(8) Ta chọn mô hình GARCH(1,1) để dự báo cho phương sai Bước 5: Ước lượng mô hình Ta có bảng kết ước lượng mô sau: > fit2 summary(fit2) Call: garch(x = res, order = c(1, 1), trace = 0) Model: GARCH(1,1) Residuals: Min 1Q Median 3Q Max -9.67232 -0.55306 -0.00464 0.538362 6.086255 Coefficient(s): Estimate Std Error t value Pr(>|t|) a0 1.32E-05 6.76E-07 19.55 sqrt( 0.0002189) [1] 0.01479527 Theo kết dự báo vào ngày 30/09/2015 (ngày chuỗi) suất sinh lợi kỳ vọng số chứng khoáng ACB tăng khoảng 0.17% với độ lệch chuẩn dự kiến 1.48% 3.2 Mô hình ARMAX–GARCH Sử dụng nguồn số liệu số chứng khoán ACB để phân tích mô hình, xem ngày lễ có ảnh hưởng đến biến động thị trường chứng khoáng ta tiến hành kiểm định mô hình ARMAX – GARCH sau: Ta tạo chuỗi liệu suất sinh lợi với 2199 quan sát biến giả dummy hiểu ngày lễ lớn năm Theo dòng lệnh bên để tính chuỗi tỷ suất sinh lợi chuỗi biến giả dummy > #Load liệu > event data temp close for(i in 1:dim(close)[1]) close[i,] #Tạo biến giả > dummy for(i in 1:length(dummy)){ 59 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS + for(j in 1:dim(event)[1]){ + if(close[i,3]==event[j,1] & close[i,4]==event[j,2]) + dummy[i] dummy dt ln.dt SSL fit1 res tsnew fit2 forecastGARCH(fitGARCH=fit2,fitARMA=fit1,trace=TRUE,r=7,newxreg=0) $ARCH a0 a1 a2 a3 a4 a5 5.57e-05 3.59e-01 2.64e-01 7.51e-02 6.82e-02 7.64e-02 a6 a7 a8 5.56e-02 1.70e-02 1.65e-01 $ARMA ma1 sma1 intercept xreg 0.151617 0.091441 -0.00031 0.001522 $forecast Point (439,2) (439,3) (439,4) (439,5) (440,1) (440,2) res res^2 SSL.forecast VAR.forecast 0.008095 8.21E-05 -0.00038 0.000464 -0.00347 6.84E-05 0.004703 6.11E-05 0.007817 2.21E-05 0.008268 1.20E-05 60 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS (440,3) -0.02154 (440,4) 0.009061 (440,5) 1.00E-07 6.55E-05 0.0014507 0.00023 > sd sd [1] 0.0357701 Theo kết mô hình ARCH(8), vào ngày 30/09/2015 không trùng vào ngày lễ năm nên ta có suất sinh lợi kỳ vọng số chứng khoán ACB thay đổi không đáng kể (giảm khoảng 0.33%) với độ lệch chuẩn dự kiến 3.58% 61 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS TÀI LIỆU THAM KHẢO [1] Hồng Việt Minh, Luận văn tốt nghiệp Đại học: Phân tích số liệu thống kê với ngôn ngữ R [2] Mai Thị Hồng Diễm, Luận văn tốt nghiệp Đại học: Phân tích chuỗi tài mô hình chuỗi thời gian 62 [...]... -1.61 20 15 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS Chuỗi dao động quanh giá trị 0, kiểm định ADF cho giá trị thống kê tau  9.8429  1.95 (giá trị tới hạn tau 5%) Chúng ta có đủ bằng chứng để kết luận chuỗi sai phân bậc 1 là chuỗi dừng Trên ACF tại các độ trễ 5, 10 và 15 có giá trị lớn hơn 0 cho thấy chuỗi có tính mùa với chỉ số mùa là 5 Vẽ riêng ACF cho chuỗi với hết tất cả... để xem sự phù hợp của mô hình > ts.plot(tron,fitted(fit.tron),col=c("blue","red"),ylab="sales", + main="SARIMA(3,1,2)*(1,0,0),s=5\n với số liệu làm trơn") 34 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS 100 120 140 sales 160 180 200 SARIMA(3,1,2)*(1,0,0),s=5 với số liệu làm tron 10 20 30 40 Time Chuỗi nội suy khá gần chuỗi quan sát, mô hình dự báo khá tốt Thực hiện kiểm định chuỗi phần... trị nội suy và vẽ biểu đồ để xem sự phù hợp của mô hình > ts.plot(ban,fitted(fit.goc),col=c("blue","red"),ylab="sales", + main="SARIMA(0,1,1)*(0,0,1),s=5") 22 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS 150 100 sales 200 SARIMA(0,1,1)*(0,0,1),s=5 0 10 20 30 40 Time Đường màu đỏ là chuỗi nội suy, đường màu xanh là chuỗi quan sát Chuỗi nội suy khá xa chuỗi quan sát, mô hình không dự... 17.509, df = 10, p-value = 0.06383 Chuỗi phần dư dao động quanh giá trị 0, biểu đồ histogram cho thấy chuỗi phần dư có dạng phân bố chuẩn, trên ACF có 2 độ trễ lớn hơn 0 Kiểm định Ljung-Box cho giá trị p  value  0.063883  0.05 cho thấy sự lớn hơn 0 trên ACF chỉ là sai số 27 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS ngẫu nhiên Ta có đủ bằng chứng để nói chuỗi phần dư là ngẫu nhiên trắng... mùa 32 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS > acf(tron1,lag=length(tron1)) 0.0 0.2 0.4 -0.4 ACF Series tron1 0 10 20 30 40 Lag Xác định bậc của thành phần không mùa: Trên biểu đồ ACFvà PACF của chuỗi sai phân các độ trễ bằng 0 sau độ trễ thứ 3 Ta chọn p = q = 3 Lấy sai phân 1 lần nên d = 1 Xác định bậc của thành phần mùa: Trên biểu đồ ACFcủa chuỗi sai phân cho thấy các độ trễ... nội suy và vẽ biểu đồ để xem sự phù hợp của mô hình > ts.plot(ban,fitted(fit.bgia),col=c("blue","red"),ylab="sales", + main="SARIMAX(2,1,1)*(0,0,3),s=5") 150 100 sales 200 SARIMAX(2,1,1)*(0,0,3),s=5 0 10 20 30 Time 26 40 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS Chuỗi nội suy khá xa chuỗi quan sát, mô hình không dự báo không tốt lắm Thực hiện kiểm định chuỗi phần dư để xem xét mô... SARIMAX(2,1,1)x(0,0,3),s=5 48 49 50 point 28 51 52 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS 2.3.3 Mô hình Box-Jenkins với số liệu làm trơn Có 4 phương pháp làm trơn thông dụng nhất là trượt đơn, trượt kép, trượt trung tâm và trượt mũ đơn Hàm SMA( ) trong package TTR có thể tính toán trượt đơn và trượt kép Sử dụng hàm CMA( ) và SES( ) trong packageAnalyzeTSđể tính toán trượt trung tâm và... vài chục Sử dụng hàm PrintAIC( )(trong package AnalyzeTS) ta có thể tiết kiệm khá nhiều thời gian cho việc này > PrintAIC(ban,order=c(2,1,1),seas=list(order=c(0,0,4),frequency=5), + type="SARIMA") Error in stats:::arima(x = x, order = order, seasonal = seasonal, xreg = xreg, : non-stationary AR part from CSS 21 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS > PrintAIC(ban,order=c(1,1,1),seas=list(order=c(0,0,4),frequency=5),... mẫu để làm giá trị cho nó Ngày 01/04/2010 là ngày duy nhất của tháng 4 nên chúng tôi đã loại bỏ nó khỏi bộ số liệu 11 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS 2.2 Thống kê mô tả 2.2.1 Thống kê mô tả cho month và day.of.week >dat library (AnalyzeTS) #gọi package AnalyzeTS > Frequencies(dat[,-1],answer=2,plot=TRUE) [[1]] N:... 50 0.4 10 0.4 0 5 10 15 5 Lag 10 15 Lag Nhìn vào biểu đồ ACF ta có thể thấy tất cả chuỗi dừng khá tốt, tuy nhiên chúng ta phải thực hiện kiểm định ADF để có một kết luận đáng tin hơn Sử dụng hàm ur.df( ) trong package “urca” để thực hiện kiểm định ADF cho chuỗi 18 Phân tích chuỗi thời gian với sự hỗ trợ của package AnalyzeTS > library(urca) > summary(ur.df(ban,type="drift",lag=5,selectlags="BIC")) .. .Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS LỜI TỰA Chuỗi thời gian chủ đề rộng có ứng dụng nhiều thực tế, đặc biệt chuỗi thời gian mờ Trong R có không package hỗ trợ phân tích chuỗi. .. giá trị lớn cho thấy chuỗi có tính mùa với số mùa Vẽ riêng ACF cho chuỗi với tất độ trễ để xác định bậc cho thành phần mùa 32 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS > acf(tron1,lag=length(tron1))... point 49 Phân tích chuỗi thời gian với hỗ trợ package AnalyzeTS 2.5 Tổng hợp so sánh mô hình dự báo Sau phân tích qua mô hình, ta có mô hình dự báo mô hình với biến giả nhiệt độ, mô hình với số

Ngày đăng: 15/12/2015, 10:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan