Hôm nay, Tôi chia sẻ với các bạn về ứng dụng bộ công cụ SSV của Tôi trong việc phân tích Hồi Quy Tuyến Tính theo kiểu Machine Learning.
Công cụ SSV lấy ở đây
Dữ liệu:
Sử dụng dữ liệu dân số Việt Nam cho trên trang Web của Tổng Cục Thống kê "https://www.gso.gov.vn/default.aspx?tabid=714" tải về như sau:
Năm | Tổng số | Nam | Nữ | Thành thị | Nông thôn |
1990 | 66.016,70 | 32.202,80 | 33.813,90 | 12.880,30 | 53.136,40 |
1991 | 67.242,40 | 32.814,30 | 34.428,10 | 13.227,50 | 54.014,90 |
1992 | 68.450,10 | 33.424,20 | 35.025,90 | 13.587,60 | 54.862,50 |
1993 | 69.644,50 | 34.028,30 | 35.616,20 | 13.961,20 | 55.683,30 |
1994 | 70.824,50 | 34.633,20 | 36.191,30 | 14.425,60 | 56.398,90 |
1995 | 71.995,50 | 35.237,40 | 36.758,10 | 14.938,10 | 57.057,40 |
1996 | 73.156,70 | 35.857,30 | 37.299,40 | 15.419,90 | 57.736,80 |
1997 | 74.306,90 | 36.473,10 | 37.833,80 | 16.835,40 | 57.471,50 |
1998 | 75.456,30 | 37.089,70 | 38.366,60 | 17.464,60 | 57.991,70 |
1999 | 76.596,70 | 37.662,10 | 38.934,60 | 18.081,60 | 58.515,10 |
2000 | 77.630,90 | 38.165,30 | 39.465,60 | 18.725,40 | 58.905,50 |
2001 | 78.620,50 | 38.656,40 | 39.964,10 | 19.299,10 | 59.321,40 |
2002 | 79.537,70 | 39.112,20 | 40.425,50 | 19.873,20 | 59.664,50 |
2003 | 80.467,40 | 39.535,00 | 40.932,40 | 20.725,00 | 59.742,40 |
2004 | 81.436,40 | 40.042,00 | 41.394,40 | 21.601,20 | 59.835,20 |
2005 | 82.392,10 | 40.521,50 | 41.870,60 | 22.332,00 | 60.060,10 |
2006 | 83.311,20 | 40.999,00 | 42.312,20 | 23.045,80 | 60.265,40 |
2007 | 84.218,50 | 41.447,30 | 42.771,20 | 23.746,30 | 60.472,20 |
2008 | 85.118,70 | 41.956,10 | 43.162,60 | 24.673,10 | 60.445,60 |
2009 | 86.025,00 | 42.523,40 | 43.501,60 | 25.584,70 | 60.440,30 |
2010 | 86.947,40 | 42.993,50 | 43.953,90 | 26.515,90 | 60.431,50 |
2011 | 87.860,40 | 43.446,80 | 44.413,60 | 27.719,30 | 60.141,10 |
2012 | 88.809,30 | 43.908,20 | 44.901,10 | 28.269,20 | 60.540,10 |
2013 | 89.759,50 | 44.364,90 | 45.394,60 | 28.874,90 | 60.884,60 |
2014 | 90.728,90 | 44.758,10 | 45.970,80 | 30.035,40 | 60.693,50 |
2015 | 91.709,80 | 45.224,00 | 46.485,80 | 31.067,50 | 60.642,30 |
2016 | 92.692,20 | 45.753,40 | 46.938,80 | 31.926,30 | 60.765,90 |
Sơ bộ 2017 | 93.671,60 | 46.253,00 | 47.418,60 | 32.813,40 | 60.858,20 |
Yêu cầu:
Phân tích và xây dựng mô hình hồi quy cho Dân Số Việt Nam và ước tính Dân Số Việt Nam đến năm 2022.
Phương pháp
1. Nghiên cứu dữ liệu : Cột năm có đơn vị tăng dần theo chu kỳ 1 năm , Cột Tổng số là số lượng dân số (nghìn), Nếu theo yêu cầu bài thì chỉ cần quan tâm đến 2 biến "Năm và Tổng Số" và Y = Tổng số, X = Năm.
2. Tách dữ liệu ra làm 2 phần
a. Phần "training" từ năm 1990 đến 2013 => phần này dùng để phân tích và xây dựng mô hình. (Huấn luyện Máy )
b. Phần "testing" từ năm 2014 đến 2017 => phần này dùng để đánh giá mô hình tiên lượng hồi quy. (Đánh giá sau Huấn Luyện)
<training>
Total | Year |
66016.00 | 1990 |
67242.40 | 1991 |
68450.10 | 1992 |
69644.50 | 1993 |
70824.50 | 1994 |
71995.50 | 1995 |
73156.70 | 1996 |
74306.90 | 1997 |
75456.30 | 1998 |
76596.70 | 1999 |
77630.90 | 2000 |
78620.50 | 2001 |
79537.70 | 2002 |
80467.40 | 2003 |
81436.40 | 2004 |
82392.10 | 2005 |
83311.20 | 2006 |
84218.50 | 2007 |
85118.70 | 2008 |
86025.00 | 2009 |
86947.40 | 2010 |
87860.40 | 2011 |
88809.30 | 2012 |
89759.50 | 2013 |
<testing> thêm các năm 2018 đến 2022 vào dữ liệu này.
Total | Year |
90728.90 | 2014 |
91709.80 | 2015 |
92692.20 | 2016 |
93671.60 | 2017 |
2018 | |
2019 | |
2020 | |
2021 | |
2022 |
2. Phân tích Hồi Quy tuyến tính đơn biến với SSV
- Đọc dữ liệu "training" vào R thông qua việc Copy (control + C) và chạy hàm sau (để đọc dữ liệu từ Clipboard (sau khi Control + C thì dữ liệu được máy tính lưu trong "Clipboard") ta chỉ cần yêu cầu R đọc dữ liệu từ Clipboard ra cho nhanh.
training <- read.delim("clipboard")
attach(training)
Note: Dữ liệu đã được đọc vào đối tượng tên "training "
- Khởi động bộ công cụ SSV
require(SSV)
- Chạy hàm hồi quy Đơn Biến của SSV
slreg(response = training $Total, predictor = training $Year)
- Kết quả:
---------------------------------------------------------------------------------------------------
Call:
stats::lm(formula = dframe)
Residuals:
Min 1Q Median 3Q Max
-832.76 -323.30 40.86 330.29 584.52
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.962e+06 2.519e+04 -77.91 <2e-16 ***
`training$Year` 1.020e+03 1.259e+01 81.03 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 426.8 on 22 degrees of freedom
Multiple R-squared: 0.9967, Adjusted R-squared: 0.9965
F-statistic: 6565 on 1 and 22 DF, p-value: < 2.2e-16
the Regression model (MÔ HÌNH CHO Yhat)
training$Total = -1962478.662261 + 1019.762522 * training$Year
Các biểu đồ của slreg
------------------------------------------------------------------------------------------------------
- Phân tích kết quả
training$Year` 1.020e+03 1.259e+01 81.03 <2e-16 ***
là có ý nghĩa thống kễ khi Pvalue < 0.05 => vậy biến Year là có ảnh hưởng đến Y
Multiple R-squared: 0.9967, Adjusted R-squared: 0.9965
Biến Year giải thích tới 99.67% sự thay đổi ở Y (Total) => Rất cao.
F-statistic: 6565 on 1 and 22 DF, p-value: < 2.2e-16
Pvalue của ANOVA cũng < 0.05 => Hàm hồi quy là có ý nghĩa thống kê (có thể dùng để tiên lượng)
Đây là Mô Hình (hàm) Hồi Quy dùng trong ước tính Dân Số
training$Total = -1962478.662261 + 1019.762522 * training$Year
- Phân tích biểu đồ:
Biểu đồ "Simple Linear Regression" là X và Y tương quan rất tuyến tính (cùng tăng).
Biểu đồ "Scatter Plot of Residuals " thì Residual tính từ công thức Y - Yhat, thì những năm đầu của bộ dữ liệu, Mô hình ước tính (Yhat) hơi cao chút so với thực tế (Y), những năm giữa giữa thì lại ước tính (Yhat) hơi thấp chút so với thực tế (Y) và đến những năm 2010 thì lại ước tính hơi thấp chút so với thực tế. Sự sai lệch đó gọi là phần dư (Residual).
Biểu đồ Histogram và Boxplot là vẽ sự phân bố của Residuals, nhìn thì hơi rải rác về phía âm.
3. Dùng Mô Hình Hồi Quy (bên trên) để ước tính Dân Số Việt Nam từ năm 2014 đến 2022.
- Lý luận: Dùng dữ liệu "testing" để thẩm tra xem hàm có ước lượng đúng dân số VN cho các năm 2014, 2015, 2016, 2017 (đã biết) và đồng thời ước lượng DSVN năm 2018 ~ 2022 xem sao.
<testing>
Total | Year |
90728.90 | 2014 |
91709.80 | 2015 |
92692.20 | 2016 |
93671.60 | 2017 |
2018 | |
2019 | |
2020 | |
2021 | |
2022 |
- Copy bộ dữ liệu "testing" bằng Control + C
- Chạy hàm để đọc dữ liệu từ Clipboard và gán vào "testing"
testing <- read.delim("clipboard")
Dữ liệu trong đối tượng "testing" có 2 Cột Total và Year (tên phải giống tên của Hàm Hồi Quy)
testing
Total Year
1 90728.9 2014
2 91709.8 2015
3 92692.2 2016
4 93671.6 2017
5 NA 2018
6 NA 2019
7 NA 2020
8 NA 2021
9 NA 2022
- Chạy hàm ước tính Dân Số thông qua lệnh sau với 95% độ tin cậy.
uoctinhDS <- predict_ci(Total ~ Year, data=training, p.points = testing, p.level = 0.95)
uoctinhDS
Kết quả ước tính:
> uoctinhDS
Total Year fit lwr upr
1 90728.9 2014 91323.06 90950.10 91696.01
2 91709.8 2015 92342.82 91946.83 92738.81
3 92692.2 2016 93362.58 92943.20 93781.96
4 93671.6 2017 94382.34 93939.26 94825.42
5 NA 2018 95402.11 94935.07 95869.14
6 NA 2019 96421.87 95930.66 96913.08
7 NA 2020 97441.63 96926.06 97957.20
8 NA 2021 98461.39 97921.30 99001.49
9 NA 2022 99481.16 98916.40 100045.91
Đọc kết quả ước tính:
1: 2014 : Dân số thực là 90728.9 / ước tính là trong khoảng từ 90950 ~ 91696
2: 2015: 91709.8 / 91946.83 ~ 92738.81
3: 2016: 92692.2 / 92943.20 93781.96
4: 2017: 93671.6 / 93939.26 94825.42
Theo công bố gần đây của Chính phủ về DSVN thì ta có...
Ngày 11/7/2019 vừa qua, báo cáo sơ bộ cuộc Tổng điều tra dân số và nhà ở đã được Tổng cục thống kê công bố, theo đó dân số Việt Nam hiện hơn 96,2 triệu người."
Như vậy Hàm hồi quy cũng chấp nhận được.
Note: Cái này chỉ để tham khảo nhé, Anh Chị Em có trao đổi xây dựng thì đóng góp nhé.
<Viet Nguyen - ngvietlg@gmail.com>
Không có nhận xét nào:
Đăng nhận xét