Bài 1.

Hãy thực hiện các câu lệnh sau để có các véc tơ số xVec và yVec; hàm sample cho phép lấy ra một số ngẫu nhiên trong khoảng từ 0:999 và thực hiện lấy 250 số, tham số replce = T có nghĩa là có thể lấy lặp lại số đã có:

set.seed(50)
xVec <- sample(0:999, 250, replace=T) 
yVec <- sample(0:999, 250, replace=T)

Giả sử rằng \(x = (x_1, x_1,..., x_n)\)\(y = (y_1, y_2, ..., y_n)\)

  1. Tạo ra véc tơ số có dạng sau: \((x_1 + 2x_2 - x_3; x_2 + 2x_3 - x_4,...,x_{n-2} + 2x_{n-1} - x_n)\)

  2. Thực hiện tính phép tính sau: \[ \sum_{i=1}^{n-1} \frac{e^{-x_{i+1}}}{x_i+10} \]

Giải Bài 1

# a)
n = length(xVec)
ketqua <- xVec[-c(n-1, n)] + 2*xVec[-c(1, n)] - xVec[-c(1, 2)]
head(ketqua)
## [1] -432 1554  145  937 1811 2133
# b)
s = sum(exp(-xVec[-1])/(xVec[-n]+10))
s
## [1] 5.029496e-05

Bài 2.

Sử dụng các véc tơ xVec và yVec tạo ra từ Bài tập số 1 và các hàm thống kê có sẵn trong R như mean, sqrt, sum and abs. Thực hiện các công việc sau:

  1. Tìm và in ra tất cả các giá trị trong véc tơ yVec mà các giá trị đó > 600.

  2. Tại các vị trí nào trong véc tơ yVec mà các giá trị lớn hơn 600.

  3. Các giá trị nào trong véc tơ xVec có giá trị giống như trong yVec > 600 (các giá trị trong xVec và yVec cùng lớn hơn 600 tại cùng vị trí).

  4. Có bao nhiêu giá trị trong véc tơ xVec chia hết cho 2 (số chẵn, sử dụng module 2 bằng phép tính %%)

  5. Lấy ra các giá trị trong véc tơ yVec tại các vị trí 1,4,7,10,13,….

Giải Bài 2

# a)
print(xVec[xVec > 600])
##   [1] 819 862 881 813 706 903 986 764 761 830 966 795 624 988 777 957 609 814
##  [19] 926 905 852 835 678 773 996 935 975 793 656 749 997 640 958 755 722 778
##  [37] 915 805 810 755 868 662 853 669 979 811 765 665 799 610 646 640 865 988
##  [55] 855 752 887 705 611 778 769 667 692 605 949 895 777 786 607 778 919 651
##  [73] 765 963 961 777 635 746 770 885 648 650 725 924 799 665 996 708 960 762
##  [91] 873 618 892 839 978 962 926 757 711 601 921 814 827 983 703 840 680 954
## [109] 927 687 800 795
# b)
print(which(yVec > 600))
##  [1]   3   9  10  18  20  22  25  26  27  29  37  41  42  43  45  48  49  51  65
## [20]  67  71  74  79  81  84  85  88  95  98  99 103 106 108 109 110 113 114 119
## [39] 120 129 130 131 138 139 143 147 148 152 154 159 161 166 167 168 172 173 174
## [58] 176 177 183 187 188 189 190 191 194 196 197 201 202 204 206 207 211 212 219
## [77] 223 224 225 227 229 230 233 235 238 239 240 243 246 248 249
# c)
print(xVec[yVec > 600])
##  [1] 819 706 903 761 439 481 624 988 473 568 926 518 852 593  86 455 773 935 398
## [20] 755 335 500 810 755 233 125 332 440 811 385 591 345 610 221 646 261 640 206
## [39] 388 161 705 319 667 286 605  87 895 561 777 576 778 963 961 212 201 324 387
## [58] 770 258 232 438  25 376 218 665 708  78 762 227 873 390 113 839 757 397 601
## [77] 814 827  79 566 983   3 317 523 402 680 512 687 398 211 139
# d)
length(xVec[xVec %% 2 == 0])
## [1] 117
# e)
print(yVec[seq(1, n, by = 3)])
##  [1] 537  95 162 617 161  56 269 723 941  88 200  47 721 159 653  39 869 261  91
## [20] 528 397 273 845 559 453 263 696 566 642 902 253 158  71 519 842 970 792 284
## [39] 262  92 171 424 436 665 216 550 796 291 134 974 196 954 473  66 556 658 514
## [58] 623  86 208   0 386 870 641 242 647 496 624 116  48 965 189 360 328 783 214
## [77] 700 179 667 790 560  64 460 426

Bài 3.

Hàm cumprod cho phép tính tích lũy của một dãy số. Sử dụng tính chất của hàm cumprod, hãy tính giá trị của biểu thức sau: \[ S = 1 + \frac{2}{3} + (\frac{2}{3}\frac{4}{5}) + (\frac{2}{3}\frac{4}{5}\frac{6}{7}) + ... + (\frac{2}{3}\frac{4}{5}...\frac{38}{39}) \]

Giải Bài 3

s = 1 + sum(cumprod(seq(2, 38, by = 2)/seq(3, 39, by = 2)))
s
## [1] 6.976346

Bài 4.

Hãy đọc bài toán sau bằng tiếng Anh và giải quyết bài toán:

Assume that we have registered the height and weight for four people: Heights in cm are 180, 165, 160, 193; weights in kg are 87, 58, 65, 100. Make two vectors, height and weight, with the data. The bodymass index (BMI) is defined as: \[ \frac{weight\,\,in\,\,kg}{(height\,\,in\,\,m)^2} \]

  1. Make a vector with the BMI values for the four people.

  2. Make a vector with the weights for those people who have a BMI larger than 25.

Giải Bài 4

hVec <- c(180, 165, 160, 193)
wVec <- c(87, 58, 65, 100)
data <- data.frame(hVec, wVec)
# a)
a4Vec <- data$wVec/((data$hVec/100) ^ 2)
a4Vec
## [1] 26.85185 21.30395 25.39062 26.84636
# b)
print(data$wVec[a4Vec > 25])
## [1]  87  65 100

Bài 5.

Tập dữ liệu painters có trong thư viện MASS, để lấy tập dữ liệu này, thực hiện các lệnh sau:

library(MASS)
data("painters")

Sau khi đã tải được dữ liệu, áp dụng phân tích dữ liệu thống kê cho biến định tính (biến school - trường phái hội họa cho từng họa sỹ), hãy thực hiện các nội dung sau:

  1. Tính tần số xuất hiện các trường phái hội họa?

  2. Tính tần suất xuất hiện các trường phái hội họa (làm tròn đến 2 chữ số sau phần thập phân)?

  3. Trực quan biến định tính school bằng biểu đồ thanh (thể hiện qua các cột với màu khác nhau), giải thích kết quả nhận được bằng biểu đồ?

Giải Bài 5

# a)
school <- painters$School
freg.school <- table(school)
cbind(freg.school)
##   freg.school
## A          10
## B           6
## C           6
## D          10
## E           7
## F           4
## G           7
## H           4
# b)
prob.school <- freg.school/nrow(painters)
cbind(round(prob.school, 2))
##   [,1]
## A 0.19
## B 0.11
## C 0.11
## D 0.19
## E 0.13
## F 0.07
## G 0.13
## H 0.07
# c)
par(mar = c(1, 1, 1, 1))
color <- c('red', 'blue', 'orange', 'green', 'red', 'blue', 'orange', 'green')
barplot(freg.school, col = color)