Exercise: Root Mean Square Error

Nếu bạn có các giá trị “thực tế” \(t = (t_1, \dots, t_n)\) và các giá trị “dự đoán” \(y = (y_1, \dots, y_n)\), thì Root Mean Square Error được định nghĩa là:

\[ \text{RMSE}_{t,y} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (t_i - y_i)^2 } \]


Yêu cầu bài tập

Viết một pipeline trong R để tính RMSE từ một data frame chứa các cột ty.

Gợi ý:
1. Trước hết, tính bình phương sai số trong một biểu thức.
2. Sau đó, tính trung bình của các giá trị bình phương này.
3. Cuối cùng, tính căn bậc hai của kết quả.

Hàm R để tính căn bậc hai là sqrt().


Bài làm

1. Tạo Data Frame

set.seed(69)
df <- data.frame(
  t = rnorm(100, 5, 2),
  y = rnorm(100, 5, 2)
)

df # In Data Frame
##             t          y
## 1   5.1543307  9.4316850
## 2   5.7486311  8.1506500
## 3   4.3303722  6.7116217
## 4   3.1002221  6.6055648
## 5   3.1195798  2.7025512
## 6   7.3792462  5.2028672
## 7   7.8881870  3.3522285
## 8   3.1921065  4.6893325
## 9   2.6662892  3.7404332
## 10  1.8578534  4.0767246
## 11  4.6616471  5.3286113
## 12  5.7035067  3.6561879
## 13  2.8898998  7.3880902
## 14  5.8299880  6.5315805
## 15  2.3772512  5.0202694
## 16  5.8999533  6.4788308
## 17  3.8001261  6.3582398
## 18  4.2064732  6.5712044
## 19  5.9630731  5.1949471
## 20  4.4835311  3.9776663
## 21  9.9878011  3.8556391
## 22  4.9072463  4.7719281
## 23  3.4441616  1.8331074
## 24  2.4042922  3.8122642
## 25  4.5311624  6.3710097
## 26  5.0487200  4.1025036
## 27  6.3765583  3.1718253
## 28  8.0947442  3.3563079
## 29  2.8888628  5.4096423
## 30  6.4910107  5.6409070
## 31  5.2135796  3.4953941
## 32  1.0881620  4.3749334
## 33  0.6297090  5.7716492
## 34  4.5448006  6.1184417
## 35  7.4321698  6.4297469
## 36  4.7015516  5.3517176
## 37  7.8874035  3.6224779
## 38  2.6156090  3.8925536
## 39  4.1253260  2.8301208
## 40  4.6516392  3.9428194
## 41  5.9523483  5.5733761
## 42  5.5217035  3.9277704
## 43  9.2197258  5.8951939
## 44  6.1874668  6.1767612
## 45  5.5638921  0.4355894
## 46  6.1558088  6.7159419
## 47  5.2821107  2.8580591
## 48  2.6460845  6.4591383
## 49  4.7222522  4.5596822
## 50  4.2489271  7.0107779
## 51  6.5827638  0.9449419
## 52  5.8779277  5.3064565
## 53  5.6914884  5.9218207
## 54  4.5912989  5.4631389
## 55  1.0463363  8.8378432
## 56  3.8587135  5.0595549
## 57  3.7732974  4.9804206
## 58  6.8407553  6.4884515
## 59  3.3441183  5.3467731
## 60  6.2571605  3.9316532
## 61  5.2319460  8.4961769
## 62  2.1097943  7.6470576
## 63  8.1926114  5.7564895
## 64  5.4733589  6.5364344
## 65  6.3668866 10.3549084
## 66  6.7875537  7.6139125
## 67  5.5191594  3.3747233
## 68  4.8748254  5.9433680
## 69  7.3113686  3.6195173
## 70  6.0490698  6.3669813
## 71  3.7680992  4.9327733
## 72  3.9094596  3.3008361
## 73  4.3589092  5.6465923
## 74  4.5039181  1.9479628
## 75  4.0049301  5.7637856
## 76  2.9831671  4.2730384
## 77  4.6437321  5.3913780
## 78  3.2016722  6.6556787
## 79  4.3375155  1.1245390
## 80  6.4646925  5.7522588
## 81  4.6474633  9.1765142
## 82  0.3614482  7.5993275
## 83  5.5152047  7.3636836
## 84  3.9428680  3.4438964
## 85  4.8336821  5.6729457
## 86  3.3260546  8.0868168
## 87  3.4502002  5.1451678
## 88  4.2218518  3.8863739
## 89  7.3453951  4.9945459
## 90  4.0189632  7.1828730
## 91  3.2700171  2.0395568
## 92  3.9770775  4.9169150
## 93  8.3583847  6.4996018
## 94  4.1472762  4.6874351
## 95  6.8542145  5.8379940
## 96  6.9856706  4.7349555
## 97  3.5616564  9.3319436
## 98  3.3223184  5.8785857
## 99  2.0939917  4.9386953
## 100 4.6101658  8.4506621

2. Tính RMSE bằng Pipeline

rmse <- df |> (\(sus_func)(sus_func$t - sus_func$y)^2)() |> mean() |> sqrt()

rmse # In kết quả
## [1] 2.764365