Hướng dẫn cài đặt phần mềm r năm 2024

Tên package Ch c năngứ 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 Foreign Dùng để nhập dữ liệu từ các phần mềm khác như SPSS, Stata, SAS, v... Rmeta Dùng cho phân tích tổng hợp [meta-analysis] 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 Lme4 Phân tích hồi quy Formula Ggplot

Các package này có thể cài đặt trực tuyến bằng cách chọn Install packages trong phần packages của R. Ngoài ra, nếu package đã được tải xuống máy tính cá nhân, việc cài đặt có thể nhanh hơn bằng cách chọn Install package[s] from local zip file cũng trong phần packages.

  1. “Văn phạm” R: 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 theo đúng “văn phạm”, R sẽ “đáp” lại bằng một kết quả. Và, sự tương tác tiếp tục cho đến khi chúng ta đạt được yêu cầu. “Văn phạm” chung của R là một lệnh [command] hay function [tôi sẽ thỉnh thoảng đề cập đến là “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 là như sau: đối tượng reg setwd["c:/works/stats"]

    thì setwd là một hàm, còn "c:/works/stats" 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, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular = 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 cũng có vài ả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 x myobject my object my setwd["d:/Econometrics/hqtt"] > save[thca1, file="thca1"] Lệnh đầu tiên [setwd – chữ wd có nghĩa là working directory] cho R biết rằng chúng ta muốn lưu các số liệu trong directory có tên là “d:\Econometrics\hqtt”. Lưu ý rằng thông thường Windows dùng dấu backward slash “\”, nhưng trong R chúng ta phải dùng dấu forward slash “/”. Lệnh thứ hai [save] cho R biết rằng các số liệu trong đối tượng thca1 sẽ lưu trong file có tên là "thca1". Sau khi gõ xong hai lệnh trên, một file có tên thca1 sẽ có mặt trong directory đó [dir phải được tạo trước].

    4 Nhập dữ liệu trực tiếp: edit[data[]] Ví dụ 1 [tiếp tục]: Chúng ta có thể nhập số liệu về thu nhập và chi tiêu của 10 hộ GĐ bằng một function rất có ích, đó là: edit[data[]]. Với function này, R sẽ cung cấp cho chúng ta một window mới với một dãy cột và dòng giống như Excel, và chúng ta có thể nhập số liệu trong bảng đó. Ví dụ: > ins setwd['d:/Econometrics'] > mets setwd["d:/Econometrics"]

    ps save[ps, file="ps"]

    Ví dụ 3: [tiếp theo] Sử dụng file thca trong thư mục d:\Econometrics\hqtt. Trước hết save as thca dưới dạng CSV [Comma delimited] Sau đó vào R và viết những lệnh sau đây: > setwd["d:/Econometrics/hqtt"] > thca sex # Ghép sex vào thca > thca thca chi thu so khu tai sex 1 12 16 3 noi 400 Nam 2 15 20 4 noi 600 Nu 3 18 24 5 ngoai 750 Nam 4 22 28 6 noi 870 Nam 5 23 32 5 ngoai 1070 Nam 6 25 36 5 ngoai 1250 Nu 7 30 40 7 noi 1430 Nam 8 31 44 6 ngoai 1650 Nu 9 36 48 8 noi 1800 Nam 10 38 52 8 ngoai 2000 Nu > # Lưu data frame thca vào file thca > save[thca, file='thca']

    4 Nhập dữ liệu từ file stata bằng lệnh: read Giả sử ta có dữ liệu từ file stata là HHEXP98N ở thư mục “d:\Econometrics” cần nhập vào R, với tên gọi như cũ, ta sử dụng câu lệnh read[] và thực hiện trong R như sau: > library[foreign] > HHEXP98N save[HHEXP98N, file="HHEXP98N"]

    4 Nhập dữ liệu từ file Eviews bằng lệnh: readEViews

    Giả sử chúng ta cần đọc dữ liệu có tên gasoline ở thư mục “d:\Econometrics”. Chúng ta thực hiện như sau: > library[hexView]

    [1] "househol" "sex" "age" "educyr98" "farm" "urban98" "province" "hhsize" "ricexpd" "pcexp2"

    Ý nghĩa các biến trong ps: 1. househol: Household code; 2. sex: Gender of HH. Head [1:M; 2:F]; 3. age: Age of household head; 4. educyr98: Schooling year of HH. Head; 5. farm: Type of HH [1:farm; 0:nonfarm]; 6. urban98: 1:urban 98; 0: rural 98; 7. province: Province code; 8. hhsize: Household size; 9. ricexpd: Value rice expenditures; 10. pcexp2: B for 98 nominal pc exp.

    4 Tạo dãy số bằng hàm seq, rep và gl R còn có công dụng tạo ra những dãy số rất tiện cho việc mô phỏng và thiết kế thí nghiệm. Những hàm thông thường cho dãy số là seq [sequence], rep [repetition] và gl [generating levels]:

    Áp dụng seq

    • Tạo ra một vector số x từ 1 đến 12: > x x [1] 1 2 3 4 5 6 7 8 9 10 11 12 > seq[12] [1] 1 2 3 4 5 6 7 8 9 10 11 12 > y y [1] 1 2 3 4 5 6 7 8 9 10 11 12
    • Tạo ra một vector số từ 12 đến 5: > x x [1] 12 11 10 9 8 7 6 5 > seq[12,7] [1] 12 11 10 9 8 7 Công thức chung của hàm seq là seq[from, to, by= ] hay seq[from, to, length= ]. Cách sử dụng sẽ được minh hoạ bằng vài ví dụ sau đây:
    • Tạo ra một vector số từ 4 đến 6 với khoảng cách bằng 0: > seq[4, 6, 0] [1] 4 4 4 4 5 5 5 5 6.
    • Tạo ra một vector 10 số, với số nhỏ nhất là 2 và số lớn nhất là 15 > seq[length=10, from=2, to=15]
    [1] 2 3 4 6 7 9. 222222 10 12 13 15.

    Áp dụng rep Công thức của hàm rep là rep[x, times, ...], trong đó, x là một biến số và times là số lần lặp lại. Ví dụ:

    • Tạo ra số 10, 3 lần: > rep[10, 3] [1] 10 10 10
    • Tạo ra số 1 đến 4, 3 lần: > rep[c[1:4], 3] hay > rep[seq[1:4], 3] [1] 1 2 3 4 1 2 3 4 1 2 3 4
    • Tạo ra số 1, 2, 4, 5 lần: > rep[c[1, 2, 4], 5] [1] 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4.

    Áp dụng gl gl được áp dụng để tạo ra một biến thứ bậc [categorical variable], tức biến không để tính toán, mà là đếm. Công thức chung của hàm gl là gl[n, k, length = n*k, labels = 1:n, ordered = FALSE] và cách sử dụng sẽ được minh hoạ bằng vài ví dụ sau đây:

    • Tạo ra biến gồm bậc 1 và 2; mỗi bậc được lặp lại 8 lần: > gl[2, 8] [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 Levels: 1 2 Hay một biến gồm bậc 1, 2 và 3; mỗi bậc được lặp lại 5 lần: > gl[3, 5] [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3
    • Tạo ra biến gồm bậc 1 và 2; mỗi bậc được lặp lại 10 lần [do đó length=20]: > gl[2, 10, length=20] [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2

    Hay: > gl[2, 2, length=20] [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2

    • Cho thêm kí hiệu: > gl[2, 5, label=c["C", "T"]] [1] C C C C C T T T T T Levels: C T
    • Tạo một biến gồm 4 bậc 1, 2, 3, 4. Mỗi bậc lặp lại 2 lần. > rep[1:4, c[2,2,2,2]] [1] 1 1 2 2 3 3 4 4 Cũng tương đương với: > rep[1:4, each = 2]

    5 Chiết dữ liệu từ một data .frame Trong ps có 10 biến số. > names[ps] [1] "househol" "sex" "age" "educyr98" "farm" "urban98" [7] "province" "hhsize" "ricexpd" "pcexp2" Chúng ta có thể chiết dữ liệu ps và chỉ giữ lại những biến số cần thiết như giới tính [sex], độ tuổi [age], lượng gạo tiêu thụ [ricexpd] và giá gạo [pcexp2]. Để ý từ lệnh names[ps] rằng biến số sex là cột số 2, age là cột số 3, ricexpd là cột số 9 và biến số pcexp2 là cột số 10. Chúng ta có thể dùng lệnh sau đây: > data2 dim[data2] [1] 5999 4 > names[data2] [1] "sex" "age" "ricexpd" "pcexp2" Ở đây, chúng ta lệnh cho R biết rằng chúng ta muốn chọn cột số 2, 3, 9 và 10, và đưa tất cả số liệu của hai cột này vào data mới có tên là data2. Chú ý chúng ta sử dụng ngoặc kép vuông [] chứ không phải ngoặc kép vòng [], vì ps không phải làm một function. Dấu phẩy phía trước c[], có nghĩa là chúng ta chọn tất cả các dòng số liệu trong data ps.

    Nhưng nếu chúng ta chỉ muốn chọn 10 dòng số liệu đầu tiên, thì lệnh sẽ là: > data3 print[data3] sex age ricexpd pcexp 1 2 68 2408 4207. 2 2 57 1416 4856. 3 1 42 1610 10521. 4 2 72 1097 5426. 5 2 73 5355 4982. 6 2 66 2012 5501. 7 2 73 2748 3080. 8 1 46 1152 3429. 9 1 50 1215 7297. 10 1 45 1188 6009.

    Chú ý lệnh print[arg] đơn giản liệt kê tất cả số liệu trong data arg. Thật ra, chúng ta chỉ cần đơn giản gõ data3, kết quả cũng giống y như print[data3].

    5 Nhập hai data thành một: merge Giả sử chúng ta có dữ liệu chứa trong hai data. Dữ liệu thứ nhất tên là d1 gồm 3 cột: id, sex, tc như sau: > d id sex tc 1 1 Nam 4. 2 2 Nu 3. 3 3 Nu 4. 4 4 Nam 7. 5 5 Nam 5. 6 6 Nu 4. 7 7 Nam 5. 8 8 Nam 6. 9 9 Nam 5. 10 10 Nu 4. Dữ liệu thứ hai tên là d2 gồm 3 cột: id, sex, tg như sau: > d id sex tg 1 1 Nam 1. 2 2 Nu 2. 3 3 Nu 0. 4 4 Nam 1. 5 5 Nam 2. 6 6 Nu 1. 7 7 Nam 2. 8 8 Nam 1. 9 9 Nam 5. 10 10 Nu 1. 11 11 Nu 1. Hai dữ liệu này có chung hai biến số id và sex. Nhưng dữ liệu d1 có 10 dòng, còn dữ liệu d2 có 11 dòng. Chúng ta có thể nhập hai dữ liệu thành một data bằng cách dùng lệnh merge như sau: > d d id sex tc sex tg 1 1 Nam 4 Nam 1. 2 2 Nu 3 Nu 2. 3 3 Nu 4 Nu 0. 4 4 Nam 7 Nam 1. 5 5 Nam 5 Nam 2. 6 6 Nu 4 Nu 1. 7 7 Nam 5 Nam 2. 8 8 Nam 6 Nam 1. 9 9 Nam 5 Nam 5.

    5 Biến đổi số liệu bằng cách dùng replace Một cách biến đổi số liệu khác là dùng replace, dù cách này có vẻ rườm rà chút ít. Tiếp tục ví dụ trên, chúng ta biến đổi từ thu sang loai như sau: > loai loai loai = 20 & thu < 50, 2] > loai = 50, 3]

    5 Biến đổi thành yếu tố [factor] Trong phân tích thống kê, chúng ta phân biệt một biến số mang tính yếu tố [factor] và biến số liên tục bình thường. Biến số yếu tố không thể dùng để tính toán như cộng trừ nhân chia, nhưng biến số số học có thể sử dụng để tính toán. Chẳng hạn như trong ví dụ thu và loai trên, loai là yếu tố vì giá trị trung bình giữa 1 và 2 chẳng có ý nghĩa thực tế gì cả; còn thu là biến số số học. Nhưng hiện tại, loai được xem là một biến số số học. Để biến thành biến số yếu tố, chúng ta cần sử dụng function factor như sau: > loai loai [1] 1 2 2 2 2 2 2 2 2 3 Levels: 1 2 3

    Chú ý R bây giờ thông báo cho chúng ta biết loai có 3 bậc: 1,2,3. Nếu chúng ta yêu cầu R tính số trung bình của loai, R sẽ không làm theo yêu cầu này, vì đó không phải là một biến số số học: > mean[loai] [1] NA Warning message: In mean[loai] : argument is not numeric or logical: returning NA

    Dĩ nhiên, chúng ta có thể tính giá trị trung bình của loai: > mean[loai] [1] 2 nhưng kết quả 2 này không có ý nghĩa gì trong thực tế cả. 5 Phân nhóm số liệu bằng cut2 [Hmisc] Trong phân tích thống kê, có khi chúng ta cần phải phân chia một biến số liên tục thành nhiều nhóm dựa vào phân phối của biến số. Chẳng hạn như đối với biến số thu chúng ta có thể “cắt” dãy số thành 3 nhóm tương đương nhau bằng cách dùng function cut2 [trong thư viện Hmisc] như sau: > # nhập thư viện Hmisc để có thể dùng function cut > library[Hmisc] > # chia biến số thu thành 2 nhóm và để trong đối tượng group > group table[group] group [16,36] [36,52] 5 5

    6. Sử dụng R cho tính toán đơn giản

    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 trình. Trong chương này tôi 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.

    6 Tính toán đơn giản Cộng hai số hay nhiều số với nhau: > 15+ [1] 3012

    Cộng và trừ: > 15+2997- [1] - Nhân và chia > -27*12/ [1] -15.

    Số lũy thừa: [25 – 5] 3 > [25 - 5]^ [1] 8000 Căn số bậc hai: 10 > sqrt[10] [1] 3.

    Số pi [π] > pi [1] 3. > 2+3*pi [1] 11. Logarit Nepe: ln > log[10] [1] 2.

    Logarit thập phân: lg > log10[2+3*pi] [1] 1. Số mũ: e > exp[1] [1] 2.

    Hàm số lượng giác > cos[pi] [1] - Vector [Mảng 1 chiều] > x x [1] 2 3 1 5 4 6 7 6 8

    sum[x] [1] 42 > x*

    [1] 4 6 2 10 8 12 14 12 16

    exp[x/10] [1] 1 1 1. 1 1 1 2. 1. [9] 2. > exp[cos[x/10]] [1] 2 2 2. 2 2 2 2. 2. [9] 2.

    Tính tổng bình phương [sum of squares]: 12 + 2 2 + 3 2 + 4 2 + 5 2 =? > x sum[x^2] [1] 55

    Tính tổng bình phương điều chỉnh

    [adjusted sum of squares]:

    n 2 i i 1

    [x x]? 

      

    sum[[x-mean[x]]^2] [1] 10 Trong công thức trên mean[x]là số trung bình của vector x. Tính TB sai số bình phương [mean square error]: n 2 i i 1
    1

    [x x]? n 

      

    sum[[x-mean[x]]^2]/length[x] [1] 2

    Tính phương sai [variance] và độ lệch chuẩn [standard deviation]:

    Phương sai:

    n 2 2 i i 1

    1

    s [x x] n 1

     

     

    var[x]

    Ma trận vô hướng/đơn vị [scalar matrix] là một ma trận vuông [tức số dòng bằng số cột], và tất cả các phần tử nằm ngoài đường chéo [off-diagonal elements] là 0, và các phần tử trên đường chéo là 1. Chúng ta có thể tạo một ma trận như thế bằng R như sau: > # tạo ra một ma trận 3 x 3 với tất cả phần tử là 0. > A # cho các phần tử đường chéo bằng 1 > diag[A] diag[A] [1] 1 1 1

    bây giờ ma trận A sẽ là: > A [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1

    6.2 Chiết phần tử từ ma trận > y A A [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12

    cột 1 của ma trận A > A[,1] [1] 1 2 3

    dòng 3 của ma trận A > A[3,] [1] 3 6 9 12

    dòng 2, cột 3 của ma trận A > A[2,3] [1] 8

    tất cả các dòng của ma trận A, ngoại trừ dòng 2

    > A[-2,] [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 3 6 9 12

    tất cả các cột của ma trận A, ngoại trừ cột 1 > A[,-1] [,1] [,2] [,3] [1,] 4 7 10 [2,] 5 8 11 [3,] 6 9 12

    xem phần tử nào lớn hơn 5. > A > 5 [,1] [,2] [,3] [,4] [1,] FALSE FALSE TRUE TRUE [2,] FALSE FALSE TRUE TRUE [3,] FALSE TRUE TRUE TRUE

    6.2 Tính toán với ma trận Cộng và trừ hai ma trận. Cho hai ma trận A và B như sau: > A A [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > B B [,1] [,2] [,3] [,4] [1,] -1 -4 -7 - [2,] -2 -5 -8 - [3,] -3 -6 -9 -

    Chúng ta có thể cộng A+B: > C C [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0

    Hay A-B: > D D [,1] [,2] [,3] [,4]

    B B [,1] [,2] [1,] 0 -0. [2,] -0 0. > X X [,1] [1,] 1. [2,] 0.

    Chúng ta có thể kiểm tra: > 3X[1,1]+4X[2,1] [1] 4

    Trị số và vectơ eigen [riêng/đặc trưng] của A cũng có thể tính toán bằng function eigen như sau: > eigen[A] $values [1] 7 2

    $vectors [,1] [,2] [1,] -0 -0. [2,] -0 0.

    Định thức [determinant]. Làm sao chúng ta xác định một ma trận có thể đảo nghịch hay không? Ma trận mà định thức bằng 0 là ma trận suy biến [singular matrix] và không thể đảo nghịch. Để tính định thức, R dùng lệnh det[]. Ví dụ: > E E [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > det[E] [1] 0 Nhưng ma trận F sau đây thì có thể đảo nghịch: > F F [,1] [,2] [,3] [1,] 1 16 49 [2,] 4 25 64 [3,] 9 36 81 > det[F] [1] -

    Và nghịch đảo của ma trận F [F-1] có thể tính bằng function solve[F] như sau: > solve[F] [,1] [,2] [,3] [1,] 1 -2 0. [2,] -1 1 -0. [3,] 0 -0 0.

    Ngoài những phép tính đơn giản này, R còn có thể sử dụng cho các phép tính phức tạp khác. Một lợi thế đáng kể của R là phần mềm cung cấp cho người sử dụng tự do tạo ra những phép tính phù hợp cho từng vấn đề cụ thể. R có một package Matrix chuyên thiết kế cho tính toán ma trận. Bạn đọc có thể tải package xuống, cài vào máy, và sử dụng, nếu cần. Địa chỉ để tải là: cran.au.r-project/bin/windows/contrib/ rrelease/Matrix_0.995-8 cùng với tài liệu chỉ dẫn cách sử dụng [dài khoảng 80 trang]: cran.au- project.org/doc/packages/Matrix.

Chủ Đề