Open YENNGUYEN1993 opened 6 years ago
PHẦN 1: GIỚI THIỆU NGÔN NGỮ R
Tổng quan về ngôn ngữ R Năm 1996, trong một bài báo về tính toán thống kê, hai nhà thống kê học Ross Ihaka và Robert Gentleman thuộc Trường đại học Auckland, New Zealand phác hoạ một ngôn ngữ mới cho phân tích thống kê mà họ đặt tên là R. Sáng kiến này được rất nhiều nhà thống kê học trên thế giới tán thành và tham gia vào việc phát triển R. Cho đến nay càng ngày càng có nhiều nhà thống kê học, toán học, nghiên cứu trong mọi lĩnh vực đã chuyển sang sử dụng R để phân tích dữ liệu khoa học.Trên toàn cầu đã có một mạng lưới hàng triệu người sử dụng R. R là một phần mềm sử dụng cho phân tích thống kê và vẽ biểu đồ. Thật ra, về bản chất, R là ngôn ngữ máy tính đa năng, có thể sử dụng cho nhiều mục tiêu khác nhau, từ tính toán đơn giản, toán học giải trí, tính toán ma trận (matrix), đến các phân tích thống kê phức tạp. Vì là một ngôn ngữ, cho nên người ta có thể sử dụng R để phát triển thành các gói phần mềm chuyên môn (package) cho một vấn đề tính toán cá biệt. R rất dễ học và có thể phát triển nhanh các ứng dụng khai mỏ dữ liệu trong thời gian ngắn nhờ nhiều công cụ tích hợp sẵn dùng như khả năng lập trình, kiểu dữ liệu phong phú, các hàm thống kê, giải thuật học tự động và các giao diện truy vấn dữ liệu, hiển thị dữ liệu. 2.Văn phạm R là một ngôn ngữ tương tác (interactive language), có nghĩa là khi chúng ta ra lệnh, và nếu lệnh đúng “văn phạm”, R sẽ “đáp” lại bằng một kết quả. Và tương tác đó tiếp tục cho đến khi đạt được yêu cầu. “Văn phạm” chung của R là một lệnh (command) hay function (“hàm”). Mà đã là hàm thì phải có thông số; cho nên theo sau hàm là những thông số mà chúng ta phải cung cấp. Cú pháp chung của R như sau: đối tượng <- hàm(thông số 1, thông số 2, …, thông số n) Thí dụ > reg <- lm(y ~ x) thì reg là một đối tượng (object), còn lm là một hàm, và y ~ x là thông số của hàm. Hay: > setwd(“d:/nnR/thongke”) thì setwd là một hàm, còn “d:/nnR/thongke” là thông số của hàm Để biết một hàm cần có những thông số nào, chúng ta dùng lệnh args(x), (args viết tắt chữ arguments) mà trong đó x là một hàm chúng ta cần biết:
args(lm) function (formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...) NULL R là một ngôn ngữ “đối tượng” (object oriented language). Điều này có nghĩa là các dữ liệu trong R được chứa trong object. Định hướng này ảnh hưởng đến cách viết của R. Chẳng hạn như thay vì viết x = 5 như thông thường chúng ta vẫn viết, thì R yêu cầu viết là x == 5. Đối với R, x = 5 tương đương với x <- 5. Cách viết sau (dùng kí hiệu <-) được khuyến khích hơn là cách viết trước (=). Chẳng hạn như: > x <- rnorm(10) có nghĩa là mô phỏng 10 số liệu và chứa trong object x. Chúng ta cũng có thể viết x = rnorm(10). Một số kí hiệu hay dùng trong R là: x == 5 x bằng 5 x != 5 x không bằng 5 y < x y nhỏ hơn x x > y x lớn hơn y z <= 7 z nhỏ hơn hoặc bằng 7 p >= 1 p lớn hơn hoặc bằng 1 is.na(x) Có phải x là biến số trống không (missing value) A & B A và B (AND) A | B A hoặc B (OR) ! Không là (NOT) Với R, tất cả các câu chữ hay lệnh sau kí hiệu # đều không có hiệu ứng, vì # là kí hiệu dành cho người sử dụng thêm vào các ghi chú, ví dụ: > # lệnh sau đây sẽ mô phỏng 10 giá trị normal > x <- rnorm(10)
Hỗ trợ trong ngôn ngữ R R là ngôn ngữ lập trình hàm cấp cao. Tất cả các công việc được làm thông qua hàm. Ta có thể truyền các thông số cho hàm. Giá trị trả về của hàm có thể được lưu vào một đối tượng biến nhờ vào phép gán = hoặc <-, ví dụ như ta ghi giá trị trung bình của vectơ x vào biến mx, sử dụng lệnh: mx = mean(x) hoặc mx <- mean(x). Giá trị trả về của hàm được lưu vào biến mặc định tên .Last.value, lệnh print() hay cat() dùng để hiển thị đối tượng. R cung cấp trợ giúp trực tuyến thông qua hàm help() hay ?tên_hàm. Lệnh help.start() cũng cung cấp trợ giúp với giao diện Web. R hỗ trợ nhiều kiểu dữ liệu như: luận lý (true, false), số nguyên, số thực, số phức, ký tự, chuỗi ký tự, vectơ, danh sách, ma trận, khung dữ liệu (data frame) và các phép toán như: +, -, , /, %% (chia lấy phần dư), %/% (chia lấy phần nguyên), ! (nghịch đảo), ^ (luỹ thừa), %% (nhân ma trận), <, >, ==, >=, <=, & (và), &&, | (hoặc), ||, <- (gán), ->. Một đối tượng khi tạo ra sẽ được lưu trong bộ nhớ cho đến khi ta thoát khỏi môi trường R bằng hàm q(), lúc này đối tượng có thể được lưu lại cho lần làm việc sau hoặc biến mất đi trong trường hợp người sử dụng không cần đến. Nhóm các hàm được bắt đầu bởi { và kết thúc bởi }. Hàm library() sẽ liệt kê tất cả các thư viện sẵn dùng trong môi trường R, nếu muốn sử dụng thư việc nào chỉ cần gọi hàm library(tên_thư_viện), ngoài ra library(help=tên_thư_viện) sẽ liệt kê các hàm sẵn có trong thư viện.
3.1. Các hàm cơ bản trong R. Để bắt đầu làm việc với R, từ dấu nhắc hệ thống ta gõ R chương trình sẽ vào môi trường làm việc ở chế độ gõ giao tiếp với dấu nhắc >. Nếu muốn nạp tập tin chương trình, ta có thể dùng hàm source(“tập_tin_chương_trình”). Hàm q() dùng để thoát khỏi môi trường R. Hàm c() có thể được dùng để tạo ra vectơ và gán trực tiếp đến đối tượng trong R, chẳng hạn như lệnh cho phép tạo vectơ x chứa 5 phần tử như sau: Hàm seq() cho phép tạo ra dãy số trong R, ví dụ như lệnh sau cho phép tạo dãy số từ 6 đến 20 với khoảng cách là 0.5: Hàm rep() cho phép tạo ra véctơ trong R bằng cách lặp lại giá trị của phần tử, ví dụ như lệnh sau cho phép tạo dãy 10 số 1: Các phép toán có thể được áp dụng trực tiếp lên kiểu véctơ. Ví dụ sau cho phép tính tổng bình phương của dãy số 1, 2, 3, 4, 5: Nếu muốn đọc dữ liệu vectơ từ tập tin, ta có thể sử dụng hàm scan, ví dụ lệnh đọc dữ liệu từ tập tin data_file (giá trị các phần tử cách nhau bởi khoảng trắng) vào biến x như sau: Hàm scan() không tham số cho phép nhập dữ liệu từ bàn phím kết thúc bằng dòng trống. Ngoài ra, hàm matrix còn cho phép chuyển dữ liệu vectơ thành ma trận, ví dụ lệnh đọc dữ liệu từ tập tin mat_file (ma trận có 5 cột và giá trị các phần tử được lưu theo dòng) vào biến mat như sau: Để đọc một khung dữ liệu từ tập tin, ta có thể sử dụng hàm read.table(). R cũng hỗ trợ các hàm cho phép ghi lại các biến vào tập tin dữ liệu như save(), write(), write.table(). Việc truy cập nội dung các phần tử của vectơ, ma trận, khung dữ liệu được thực hiện thông qua chỉ số được đặt trong cặp dấu []. Để truy xuất đến toàn bộ cột hay dòng của một ma trận ta có thể đặc tả chỉ số của cột hay dòng đó, ví dụ như x[,3] để truy xuất đến cột thứ 3 của ma trận x. Nếu muốn gán tên cho cột hay dòng của ma trận ta có thể sử dụng hàm dimnames(), ví dụ như lệnh sau cho phép gán tên X cho cột một, tên Y cho cột hai và tên Z cho cột ba của ma trận mat, vậy mat[,2] và mat[,"Y"] là như nhau. Đối với khung dữ liệu, ta có thể dùng tên của biến để truy cập đến nội dung, chẳng hạn ta có khung dữ liệu tên soil có các biến Ca, K và pH, ta có thể truy cập nội dung biến pH với biểu thức soil$pH. Chú ý rằng các định danh trong R đều phân biệt ký tự thường hoa. Ngoài ra, ta cũng có thể truy cập nội dung các biến của khung dữ liệu trực tiếp bằng tên biến nhờ vào hàm attach, ví dụ attach(soil). R cũng hỗ trợ các cho các tính toán thống kê như: summary(), sample(), dnorm(), pnorm(), qnorm(), rnorm(), dunif(), punif(), qunif(), runif(), mean(), var(), sd(), cov(), cor(), lm(), ... Ví dụ sau đây minh họa cách sử dụng hàm sample() để lấy mẫu ngẫu nhiên có hoàn lại 10 số nguyên có giá trị từ 0 đến 9. Sau đó tính giá trị trung bình và độ lệch chuẩn của dãy số. Nếu muốn sử dụng hàm mô phỏng phân phối chuẩn rnorm() để sinh dãy số ngẫu nhiên gồm 10 số với các tham số giá trị trung bình là 5 và độ lệch chuẩn bằng 1.5, ta có thể làm như sau: Ví dụ minh họa cách sử dụng hàm tính mật độ phân phối chuẩn dnorm() để ước tính xác suất của học sinh có điểm là 16.5, biết rằng điểm của học sinh tuân theo phân phối chuẩn với giá trị trung bình là 15, độ lệch chuẩn là 2.5, ta có thể sử dụng lệnh sau: Tiếp theo ví dụ trên để ước tính xác suất học sinh có điểm tối thiểu là 16.5, ta có thể sử dụng hàm tính xác suất chuẩn tích lũy pnorm() như sau: Đối với các tính toán trên ma trận, ngoài phép toán nhân ma trận, R cung cấp các hàm như: t(), det(), diag(), solve(), svd(), lower.tri(), upper.tri(), eigen(). Đầu tiên ta tạo ma trận A[3x2], và ma trận B là ma trận chuyển vị của A có dạng như trên, trong R thực hiện công việc đó như sau: Tạo ma trận đường chéo I[3x3] có giá trị 1: Để nhân ma trận A và B lưu vào ma trận C, tiếp theo ta lấy định thức của C bằng hàm det() và giá trị riêng ma trận bằng hàm eigen(). Ta thực hiện lệnh sau: Giả sử ta có hệ phương trình tuyến tính sau đây: Để giải hệ phương ta có thể viết dạng ma trận A.X = Y như sau: Nghiệm phương trình X = A-1Y, trong R ta thực hiện như sau: R cho phép đọc dữ liệu từ tập tin vào trong bộ nhớ để xử lý. Ngoài ra, R cũng cung cấp các gói thư viện tiện ích cho phép người sử dụng dễ dàng truy cập vào các cơ sở dữ liệu quan hệ khác như mySQL (RMySQL), PostgreSQL (RPgSQL), các cơ sở dữ liệu có thể truy cập qua trình điều khiển ODBC (RODBC). Nếu chúng ta muốn truy cập vào dữ liệu chứa trong hệ quản trị cơ sở dữ liệu MySQL. Trước tiên ta cần:
3.2. Cách đặt tên trong R. Việc đặt tên một đối tượng (object) hay một biến số (variable) trong R khá linh hoạt, vì R không có nhiều giới hạn như các phần mềm khác. Tên một object phải được viết liền nhau (tức không được cách rời bằng một khoảng trống). Chẳng hạn như R chấp nhận myobject nhưng không chấp nhận my object.
myobject <- rnorm(10) my object <- rnorm(10)
4.1 Nhập số liệu trực tiếp: c() Chúng ta có thể sử dụng function có tên c (concatenation– có nghĩa là “ghép”)như sau:
4.2 Nhập số liệu trực tiếp: edit(data.frame()) : ins <- edit(data.frame())
4.3 Nhập số liệu từ một text file: read.table
5.2. Nhập sô trực tiep edit(data.frame()) : ins <- edit(data.frame())
5.3. Nhập dữ liệu từ một text file: . read.table
5.4. Nhập dữ liệu từ Excel: . read.csv:
6.1. Phương pháp scatterplot 2 chiều trong R 6.2. Phương pháp trục tọa độ song song trong R 6.3. Phương pháp hiển thị khác trong R
. .
PHẦN 2: CÀI ĐẶT Trước hết, chúng ta có thể tải về một phiên bản của R và các gói thư viện từ địa chỉ của trang web http://cran.r-project.org. Tiến hành cài đặt, và gọi thực thi môi trường R như hình 12.1. Để thêm các gói thư viện vào môi trường lập trình R, chúng ta sử dụng các chức năng được cung cấp từ menu Packages.
Tên package Chức năng
xlsx Đọc data đuôi .xlsx (file Excel) gdata Đọc data đuôi .xls (file Excel) foreign Đọc data đuôi .sav (file SPSS), .dta (file Stata) hexView Đọc data đuôi .wf1 và .WF1(file Eviews) AER Gói thực hiện nhiều phân tích kinh tế lượng cơ bản ggplot2 Vẽ Graph với chất lượng hình ảnh cao. trellis Dùng để vẽ đồ thị và làm cho đồ thị đẹp hơn lattice Dùng để vẽ đồ thị và làm cho đồ thị đẹp hơn 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 epitools Một package khác chuyên cho các phân tích dịch tễ học Rmeta Dùng cho phân tích tổng hợp (meta-analysis) meta Một package khác cho phân tích tổng hợp survival Chuyên dùng cho phân tích theo mô hình Cox (Cox’s proportional hazard model) 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 BMA Bayesian Model Average
Cách thức cài đặt một gói như trên chỉ áp dụng cho những gói có trên CRAN – tạm hiểu là một “kho chứa” các gói của R và được lưu ở một máy chủ nào đó. Có một số gói đang được phát triển hoặc đã viết xong rồi nhưng tác giả chưa “công bố” chính thức trên CRAN mà lại lưu tại tài khoản của cá nhân họ trên github (một loại tài khoản lưu trữ tài liệu và chương trình) thì cách cài đặt sẽ khác bằng lệnh install_github("kassambara/factoextra")