R có được các ưu điểm lớn của hệ thống phát triển trên nền tảng mã nguồn mở với nhiều gói thư viện có sẵn cung cấp nhiều hàm xử lý hữu ích cho các mục đích khai thác khác nhau. Người dùng có thể kế thừa từ các thư viện này để phát triển các hàm chức năng đáp ứng yêu cầu của bài toán cụ thể cần giải quyết. Để sử dụng thư viện đã cài đặt, người dùng chỉ cần dùng lệnh library với tham số là tên thư viện cần dùng. Ví dụ để sử dụng thư viện foreign, lệnh yêu cầu là:
> library(foreign)
Bảng 3.1 dưới đây là danh sách một số thư viện cơ bản và ứng dụng của chúng trong R:
Bảng 3.1: Một số thư viện và ứng dụng của chúng trong R
Thư viện Chức năng
Trellis Dùng để vẽđồ thị
Hmisc Một số phương pháp mô hình dữ liệu của F.Harrell
Design Một số mô hình thiết kế nghiên cứu của F.Harrell
Epi Dùng cho các phân tích dịch tễ học
Foreign Dùng để nhập dữ liệu từ các phần mềm khác như SPSS, Stata,
SAS, …
Rmeta Dùng cho phân tích tổng hợp (meta-analysis)
Zelig Package dùng cho các phân tích thống kê trong lĩnh vực xã hội
học
Genetics Package dùng cho phân tích số liệu di truyền học
Với các tính toán phức tạp như nhân ma trận có thể thực hiện chỉ bằng một lệnh. Đoạn chương trình sau minh họa cho việc khởi tạo dữ liệu và thực hiện nhân ma trận: > y <- c(1,2,3,4,5,6,7,8,9) #Tạo biến y có 9 giá trị > A <- matrix(y, nrow=3) #Tạo ma trận A có 3 hàng với dữ liệu # lấy từ y > B <- t(A) # Tạo ma trận B là chuyển vị của ma trận A # (hàm t(A) lấy chuyển vị của A)
> AB <- A%*%B #Thực hiện nhân ma trận A với ma trận B dùng toán # tử (%*%) kết quả chứa trong ma trận AB > AB #Hiển thị nội dung ma trận AB [,1] [,2] [,3] [1,] 66 78 90 [2,] 78 93 108 [3,] 90 108 126
Để tìm nghịch đảo ma trận, người dùng có thể sử dụng hàm solve().
R cũng cấp nhiều hàm đã được thiết kế sẵn ứng dụng tính toán xác suất. Ví dụ, để tính phân phối nhị phân (Binomial distribution), hàm dbinom() cho phép thực hiện một cách nhanh chóng với cú pháp sử dụng đơn giản. Đoạn chương trình sau minh họa việc sử dụng hàm dbinom():
> dbinom(2, 3, 0.60) [1] 0.432
Lời gọi hàm trên thực hiện tính toán theo công thức:
( | , ) = (1− ) trong đó k=0,1,2,..,n (3.1)
Trong trường hợp cụ thể này k=2, n=3, p=0.60. Kết quả trả về là 0.432. Ngoài ra có thể kể đến các hàm tiêu biểu khác như:
Hàm dpois(k,λ) tính mật độ Poisson theo công thức:
( = | ) = ! (3.2)
Hàm dnorm(x, mean, sd) tính mật độ phân phối chuẩn (Normal Density Probability Function) theo công thức:
( = | , ) = ( ) = √ −( ) (3.3)
Ví dụ, với x=160, µ=156, σ2=4.6, hàm được gọi tương ứng là
dnorm(160, 156, 4.6), kết quả trả về là 0.05942343.
Vẽ biểu đồ cũng là một trong các điểm mạnh của R. Có nhiều cách để thực hiện vẽ biểu đồ trong R. Phần lớn các hàm vẽ biểu đồ đã có sẵn trong R. Một số biểu đồ phức tạp có thể được thực hiện bằng các hàm cung cấp thông qua các thư viện như lattice hay trellis.
Ví dụ, để vẽ biểu đồ xác suất phân phối mật độ cho biến age (độ tuổi) ta có thể sử dụng hàm plot(density) như đoạn chương trình minh họa dưới đây:
> #Nhập dữ liệu độ tuổi vào biến age
> age <- c(57, 64, 60, 65, 47, 65, 76, 61, 59, 57, 63, 51, 60, 42, 64, 49, 44, 45, 80, 48,
61, 45, 70, 51, 63, 54, 57, 70, 47, 60, 60, 50, 60, 55, 74, 48, 46, 49, 69, 72, 51, 58, 60, 45, 63, 52, 64, 45, 64, 62) > plot(density(age),add=TRUE) #Thực hiện vẽ biểu đồ
Kết quả thực hiện các lệnh trên được thể hiện như tại Hình 3-2:
Hình 3-2: Xác xuất phân phối mật độ theo độ tuổi bằng hàm plot
Ngoài ra, hàm pie() cho phép vẽ biểu đồ hình tròn, hàm barplot() vẽ biểu đồ cột, hàm stripchart() vẽ biểu đồ strip, hàm boxplot() vẽ biểu đồ hộp,... Hình 3-3, Hình 3-4, Hình 3-5 dưới đây minh họa một số loại biểu đồ được vẽ bởi các hàm trong R.
Hình 3-4: Biểu đồ hộp
Hình 3-5: Biểu đồ cột
Với những ưu điểm và sự phù hợp của ngôn ngữ R cho bài toán khai phá dữ liệu, dự đoán chứng khoán, chúng tôi sử dụng ngôn ngữ R để cài đặt, thử nghiệm cho kết quả của nghiên cứu này.
Chương 4. XÂY DỰNG CHƯƠNG TRÌNH VÀ ĐÁNH GIÁ 4.1. Chuẩn bị dữ liệu
Yêu cầu đầu tiên cần phải thực hiện được ở bất cứ công cụ xử lý dữ liệu nào đó là nạp dữ liệu vào hệ thống. Các xử lý, phân tích, đánh giá chỉ có thể thực hiện được khi có dữ liệu. Với ngôn ngữ R, việc nạp dữ liệu vào có thể được thực hiện một cách dễ dàng bởi các hàm có sẵn. R hỗ trợ lấy dữ liệu từ nhiều nguồn khác nhau như từ file văn bản, file dữ liệu chuẩn của R, file theo định dạng của Microsoft Excel, cơ sở dữ liệu SQL và thậm chí là trực tiếp trên Internet.
Ví dụ dưới đây là các lệnh của R dùng để nạp dữ liệu chuỗi thời gian trực tiếp từ Interrnet. Có thể sử dụng hàm getSymbols() từ thư viện quantmod (do Ryan phát triển năm 2009) để tải dữ liệu chứng khoán từ internet:
> library(DMwR) > library(xts) > data(GSPC)
> getSymbols('^GSPC',src='yahoo',from='1970-01-02') > colnames(GSPC) <- c("Open", "High", "Low", "Close", + "Volume", "Adjusted")
Trong đoạn mã lệnh trên, chúng ta tải dữ liệu chứng khoáng S&P500 trực tiếp trên yahoo từ ngày 02-01-1970.
Dữ liệu tải về có thể lưu và sử dụng lại bằng hàm write.zoo():
> write.zoo(GSPC, file = "GSPC-2013.csv")
Với cách thức lấy và ghi dữ liệu ở trên, lần sau ta có thể đọc lại tệp dữ liệu
GSPC-2013.csv đó bằng lệnh:
> GSPC <- as.xts(read.zoo('GSPC-2013.CSV',header=T))
S&P500 (Standard & Poor's 500 Stock Index) là một chỉ số chứng khoán bao gồm 500 loại chứng khoán được lựa chọn từ 500 công ty có mức vốn lớn nhất của Mỹ. S&P 500 được thiết kế để trở thành một công cụ hàng đầu của thị trường chứng khoán Mỹ và có ý nghĩa phản ánh những đặc điểm rủi ro/lợi nhuận của các công ty hàng đầu. Chỉ số S&P 500 là một trong những chuẩn đánh giá thông thường nhất dành cho thị trường chứng khoán Mỹ. Chỉ số trung bình công nghiệp Dow Jones đã từng là chỉ số nổi tiếng nhất cho các cổ phiếu ở Mỹ, nhưng vì nó chỉ chứa 30 công
ty, vì vậy hầu hết mọi người tin rằng S&P 500 sẽ phản ánh thị trường tốt hơn và đầy đủ hơn. Trong nghiên cứu này chúng ta sẽ sử dụng dữ liệu chứng khoán S&P500 (^GSPC) được tải trực tiếp trên Yahoo Finance từ năm 1970 để phân tích thử nghiệm và dự đoán xu thế (tham khảo thêm về chứng khoán S&P500 tại địa chỉ: http://finance.yahoo.com/q?s=^GSPC ).
4.2. Xây dựng hàm và thực hiện tính toán
Trong phần này, chúng ta sẽ trình bày một số xử lý cần thiết phục vụ cho việc xây dựng mô hình dự báo biến động giá của S&P500 trong tương lai ở một thời điểm cụ thể dựa trên dữ liệu giao dịch đã có trong quá khứ. Qua đó giúp nhà đầu tư có được các tín hiệu trợ giúp ra quyết định mua vào, bán ra, hay giữ lại phù hợp.
Trước hết ta thực hiện tính toán tỷ lệ biến đổi giá p% (mức cáo hơn hay thấp