Một trong những lợi thế của R là có thể sử dụng như một máy tính cầm tay. Thật ra, hơn thế nữa, R có thể sử dụng cho các phép tính ma trận và lập chương. Chương này chỉ trình bày một số phép tính đơn giản mà học sinh hay sinh viên có thể sử dụng lập tức trong khi đọc những dòng chữ này.
Hướng dẫn phân tích số liệu vẽ biểu đồ R Dùng R cho phép tính đơn giản ma trận Một lợi R sử dụng máy tính cầm tay Thật ra, nữa, R sử dụng cho phép tính ma trận lập chương Chương trình bày số phép tính đơn giản mà học sinh hay sinh viên sử dụng đọc dòng chữ 5.1 Tính tốn đơn giản Cộng hai số hay nhiều số với nhau: Cộng trừ: > 15+2997 > 15+2997-9768 [1] 3012 [1] -6756 Nhân chia Số lũy thừa: (25 – 5)3 > -27*12/21 > (25 - 5)^3 [1] -15.42857 [1] 8000 Căn số bậc hai: Số pi (p) > sqrt(10) > pi [1] 3.162278 [1] 3.141593 > 2+3*pi [1] 11.42478 Logarit: loge Logarit: log10 > log(10) > log10(100) [1] 2.302585 [1] Số mũ: e2.7689 Hàm số lượng giác > exp(2.7689) > cos(pi) [1] 15.94109 [1] -1 > log10(2+3*pi) [1] 1.057848 Vector > exp(x/10) > x x 1.822119 2.013753 1.822119 [1] [9] 2.225541 > sum(x) > exp(cos(x/10)) [1] 42 [1] 2.664634 2.599545 2.704736 2.405079 2.511954 2.282647 2.148655 2.282647 > x*2 [1] 10 12 14 12 16 [9] 2.007132 Tính tổng bình phương (sum of Tính tổng bình phương điều squares): 12 + 22 + 32 + 42 + 52 = ? (adjusted chỉnh sum of squares): = ? > x x sum(x^2) > sum((x-mean(x))^2) [1] 55 [1] 10 Trong công thức mean(x) số trung bình vector x Tính sai số bình phương (mean Tính phương sai (variance) square): = ? độ lệch chuẩn deviation): > x sum((x-mean(x))^2)/length(x) > x var(x) (standard Trong công thức trên, length(x) có [1] 2.5 nghĩa tổng số phần tử (elements) Độ lệch chuẩn: : vector x > sd(x) [1] 1.581139 5.2 Số liệu ngày tháng Trong phân tích thống kê, số liệu ngày tháng có vấn đề nan giải, có nhiều cách để mô tả liệu Chẳng hạn 01/02/2003, có người ta viết 1/2/2003, 01/02/03, 01FEB2003, 2003-02-01, v.v… Thật ra, có qui luật chuẩn để viết số liệu ngày tháng tiêu chuẩn ISO 8601 (nhưng tuân theo!) Theo qui luật này, viết: 2003-02-01 Lí đằng sau cách viết viết số với đơn vị lớn trước, đến đơn vị nhỏ Chẳng hạn với số “123” biết “một trăm hai mươi ba”: bắt đầu hàng trăm, đến hàng chục, v.v… Và cách viết ngày tháng chuẩn R > date1 date2 days days Time difference of 28 days Chúng ta tạo dãy số liệu ngày tháng sau: > seq(as.Date(“2005-01-01”), as.Date(“2005-12-31”), by=”month”) [1] "2005-01-01" "2005-02-01" "2005-03-01" "2005-04-01" "2005-05-01" [6] "2005-06-01" "2005-07-01" "2005-08-01" "2005-09-01" "2005-10-01" [11] "2005-11-01" "2005-12-01" > seq(as.Date(“2005-01-01”), as.Date(“2005-12-31”), by=”2 weeks”) [1] "2005-01-01" "2005-01-15" "2005-01-29" "2005-02-12" "2005-02-26" [6] "2005-03-12" "2005-03-26" "2005-04-09" "2005-04-23" "2005-05-07" [11] "2005-05-21" "2005-06-04" "2005-06-18" "2005-07-02" "2005-07-16" [16] "2005-07-30" "2005-08-13" "2005-08-27" "2005-09-10" "2005-09-24" [21] "2005-10-08" "2005-10-22" "2005-11-05" "2005-11-19" "2005-12-03" [26] "2005-12-17" "2005-12-31" 5.3 Tạo dãy số hàm seq, rep gl R cịn có cơng dụng tạo dãy số tiện cho việc mơ thiết kế thí nghiệm Những hàm thơng thường cho dãy số seq (sequence), rep (repetition) gl (generating levels): Áp dụng seq Tạo vector số từ đến 12: > x x [1] 10 11 12 > seq(12) [1] 10 11 12 Tạo vector số từ 12 đến 5: > x x [1] 12 11 10 > seq(12,7) [1] 12 11 10 Công thức chung hàm seq seq(from, to, by= )hay seq(from,to,length.out= ).Cách sử dụng minh hoạ ví dụ sau đây: Tạo vector số từ đến với khoảng cách 0.25: > seq(4, 6, 0.25) [1] 4.00 4.25 4.50 4.75 5.00 5.25 5.50 5.75 6.00 Tạo vector 10 số, với số nhỏ số lớn 15 > seq(length=10, from=2, to=15) [1] 2.000000 3.444444 4.888889 6.333333 7.777778 9.222222 10.666667 12.111111 13.555556 15.000000 Áp dụng rep Công thức hàm rep rep(x, times, ), đó, x biến số times số lần lặp lại Ví dụ: Tạo số 10, lần: > rep(10, 3) > y A A [,1] [,2] [,3] [1,] [2,] [3,] B = A' diễn tả R sau: > B B [,1] [,2] [,3] [1,] [2,] [3,] Ma trận vô hướng (scalar matrix) ma trận vng (tức số dịng số cột), tất phần tử đường chéo (off-diagonal elements) 0, phần tử đường chéo Chúng ta tạo ma trận R sau: > # tạo mộ ma trận x với tất phần tử > A # cho phần tử đường chéo > diag(A) diag(A) [1] 1 > # ma trận A là: >A [,1] [,2] [,3] [1,] 0 [2,] [3,] 0 5.4.1 Chiết phần tử từ ma trận > y A A [,1] [,2] [,3] [1,] [2,] [3,] > # cột ma trận A > A[,1] [1] > # cột ma trận A > A[3,] [1] > # dòng ma trận A > A[1,] [1] > # dòng 2, cột ma trận A > A[2,3] [1] > # tất dòng ma trận A, ngoại trừ dòng > A[-2,] [,1] [,2] [,3] [1,] [2,] > # tất cột ma trận A, ngoại trừ cột > A[,-1] [,1] [,2] [1,] [2,] [3,] > # xem phần tử cao > A>3 [,1] [,2] [,3] [1,] FALSE TRUE TRUE [2,] FALSE TRUE TRUE [3,] FALSE TRUE TRUE 5.4.2 Tính tốn với ma trận Cộng trừ hai ma trận Cho hai ma trận A B sau: > A A [,1] [,2] [,3] [,4] [1,] 10 [2,] 11 [3,] 12 > B B [,1] [,2] [,3] [,4] [1,] -1 -4 -7 -10 [2,] -2 -5 -8 -11 [3,] -3 -6 -9 -12 Chúng ta cộng A+B: > C C [,1] [,2] [,3] [,4] [1,] 0 0 [2,] 0 0 [3,] 0 0 Hay A-B: > D D [,1] [,2] [,3] [,4] [1,] 14 20 [2,] 10 16 22 [3,] 12 18 24 Nhân hai ma trận Cho hai ma trận: Chúng ta muốn tính AB, triển khai R cách sử dụng %*% sau: > y A B AB AB [,1] [,2] [,3] [1,] 66 78 90 [2,] 78 93 108 [3,] 90 108 126 Hay tính BA, triển khai R cách sử dụng %*% sau: > BA BA [,1] [,2] [,3] [1,] 14 32 50 [2,] 32 77 122 [3,] 50 122 194 Nghịch đảo ma trận giải hệ phương trình Ví dụ có hệ phương trình sau đây: Hệ phương trình viết kí hiệu ma trận: AX = Y, đó: , , Nghiệm hệ phương trình là: X = A-1Y, hay R: > A Y X X [,1] [1,] 1.1428571 [2,] 0.1428571 Chúng ta kiểm tra: > 3*X[1,1]+4*X[2,1] [1] Trị số eigen tính toán function eigen sau: > eigen(A) $values [1] $vectors [,1] [,2] [1,] -0.7071068 -0.9701425 [2,] -0.7071068 0.2425356 Định thức (determinant) Làm xác định ma trận đảo nghịch hay khơng? Ma trận mà định thức ma trận suy biến (singular matrix) đảo nghịch Để kiểm tra định thức, R dùng lệnh det(): > E E [,1] [,2] [,3] [1,] [2,] [3,] > det(E) [1] Nhưng ma trận F sau đảo nghịch: > F F [,1] [,2] [,3] [1,] 16 49 [2,] 25 64 [3,] 36 81 > det(F) [1] -216 Và nghịch đảo ma trận F (F-1) tính function solve() sau: > solve(F) [,1] [,2] [,3] [1,] 1.291667 -2.166667 0.9305556 [2,] -1.166667 1.666667 -0.6111111 [3,] 0.375000 -0.500000 0.1805556 Ngồi phép tính đơn giản này, R cịn sử dụng cho phép tính phức tạp khác Một lợi đáng kể R phần mềm cung cấp cho người sử dụng tự tạo phép tính phù hợp cho vấn đề cụ thể Trong vài chương sau, quay lại vấn đề chi tiết ... "200 5- 0 6-1 8" "200 5- 0 7-0 2" "200 5- 0 7-1 6" [16] "200 5- 0 7-3 0" "200 5- 0 8-1 3" "200 5- 0 8-2 7" "200 5- 0 9-1 0" "200 5- 0 9-2 4" [21] "200 5- 1 0-0 8" "200 5- 1 0-2 2" "200 5- 1 1-0 5" "200 5- 1 1-1 9" "200 5- 1 2-0 3" [26] "200 5- 1 2-1 7"... as.Date(“200 5- 1 2-3 1”), by=”2 weeks”) [1] "200 5- 0 1-0 1" "200 5- 0 1-1 5" "200 5- 0 1-2 9" "200 5- 0 2-1 2" "200 5- 0 2-2 6" [6] "200 5- 0 3-1 2" "200 5- 0 3-2 6" "200 5- 0 4-0 9" "200 5- 0 4-2 3" "200 5- 0 5- 0 7" [11] "200 5- 0 5- 2 1" "200 5- 0 6-0 4"... "200 5- 0 1-0 1" "200 5- 0 2-0 1" "200 5- 0 3-0 1" "200 5- 0 4-0 1" "200 5- 0 5- 0 1" [6] "200 5- 0 6-0 1" "200 5- 0 7-0 1" "200 5- 0 8-0 1" "200 5- 0 9-0 1" "200 5- 1 0-0 1" [11] "200 5- 1 1-0 1" "200 5- 1 2-0 1" > seq(as.Date(“200 5- 0 1-0 1”),