Phân tích dữ liệu thu thập từ khảo sát Dự án đường Việt Bắc

# Read data from github 

VB<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Land-Relocation-Survey-Data/master/VB.csv",header=T, sep=";")

# Kiểm tra qua cơ sở dữ liệu (Look at few rows of the dataset)

head(VB) 
# Tải thư viện cần thiết cho việc sử lý, và sắp xếp dữ liệu (Import essential libraries for manipulating and visualizing  data)

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.4.3
## -- Attaching packages ---------------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
## v ggplot2 2.2.1     v purrr   0.2.4
## v tibble  1.3.4     v dplyr   0.7.4
## v tidyr   0.7.2     v stringr 1.2.0
## v readr   1.1.1     v forcats 0.2.0
## Warning: package 'tidyr' was built under R version 3.4.3
## Warning: package 'purrr' was built under R version 3.4.3
## Warning: package 'dplyr' was built under R version 3.4.3
## -- Conflicts ------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(dplyr)

library(ggplot2)

# Sắp xếp lại dữ liệu

VB1<- VB %>% dplyr::select(contains("X"),Y_mean=Y.TB)

head(VB1) # Nhìn thoáng qua về cơ sở dữ liệu đã sắp xếp lại

Giải thích kí hiệu các biến trong tài liệu dữ liệu này

XA: Là giái trị trung bình Nhóm Yếu Tố về Chíh sách Môi trường

XB: Là giái trị trung bình Nhóm Yếu Tố v

XC: Là giái trị trung bình nhóm chính sách tái định cư

XD: Là giái trị trung bình nhóm nguồn vốn đầu tư và mục tiêu dự án

XE: Là giái trị trung bình nhóm yếu tố vê môi trường khu tái đinh cư

XF: Là giái trị trung bình nhóm yếu tố quản lý

XG: Là giái trị trung bình nhóm yếu tố tâm lý

XH: Là giái trị trung bình Nhóm yếu tố khách quan

# Xây dựng mô hình đầy đủ các biến

model_VB<-lm(Y_mean~., data=VB1)

# Kết quả tóm tắt của mô hình 

summary(model_VB)
## 
## Call:
## lm(formula = Y_mean ~ ., data = VB1)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.258884 -0.072905 -0.008664  0.102558  0.194093 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.31356    0.26583   1.180   0.2450    
## XA           0.42677    0.07387   5.777 8.97e-07 ***
## XB           0.17066    0.08397   2.032   0.0486 *  
## XC           0.01902    0.05071   0.375   0.7095    
## XD          -0.16188    0.06838  -2.367   0.0227 *  
## XE           0.14886    0.05574   2.671   0.0108 *  
## XF           0.05539    0.05301   1.045   0.3022    
## XG           0.14832    0.07278   2.038   0.0480 *  
## XH           0.10868    0.05901   1.842   0.0728 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1278 on 41 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.8927, Adjusted R-squared:  0.8717 
## F-statistic: 42.63 on 8 and 41 DF,  p-value: < 2.2e-16
# Tải thư viện

library(relaimpo)
## Warning: package 'relaimpo' was built under R version 3.4.3
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## Loading required package: boot
## Loading required package: survey
## Warning: package 'survey' was built under R version 3.4.3
## Loading required package: grid
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following object is masked from 'package:tidyr':
## 
##     expand
## Loading required package: survival
## 
## Attaching package: 'survival'
## The following object is masked from 'package:boot':
## 
##     aml
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
## Loading required package: mitools
## Warning: package 'mitools' was built under R version 3.4.3
## This is the global version of package relaimpo.
## If you are a non-US user, a version with the interesting additional metric pmvd is available
## from Ulrike Groempings web site at prof.beuth-hochschule.de/groemping.
calc.relimp(model_VB, type=c("lmg"),rela=T) # Kết quả tóm tắt bên dưới, chú ý phần lmg 
## Response variable: Y_mean 
## Total response variance: 0.1273469 
## Analysis based on 50 observations 
## 
## 8 Regressors: 
## XA XB XC XD XE XF XG XH 
## Proportion of variance explained by model: 89.27%
## Metrics are normalized to sum to 100% (rela=TRUE). 
## 
## Relative importance metrics: 
## 
##           lmg
## XA 0.33660911
## XB 0.19975152
## XC 0.11130845
## XD 0.02458173
## XE 0.13292922
## XF 0.05767850
## XG 0.11683915
## XH 0.02030231
## 
## Average coefficients for different model sizes: 
## 
##           1X         2Xs         3Xs         4Xs         5Xs         6Xs
## XA 0.7568871 0.688653380  0.62617200  0.57393584  0.53001346  0.49191223
## XB 0.6959817 0.588167870  0.48750542  0.40123344  0.32788626  0.26508418
## XC 0.3948940 0.273396724  0.18105453  0.11981128  0.07928305  0.05172270
## XD 0.1306195 0.006945245 -0.06290255 -0.10149857 -0.12578121 -0.14340844
## XE 0.4412913 0.340498012  0.26762724  0.21709630  0.18383048  0.16441864
## XF 0.3419385 0.246947956  0.18419180  0.14178505  0.11254509  0.09024026
## XG 0.4308874 0.333301308  0.26379558  0.21904375  0.19108450  0.17312835
## XH 0.1467958 0.071429122  0.05826372  0.06063806  0.06990245  0.08339853
##            7Xs         8Xs
## XA  0.45789005  0.42677493
## XB  0.21233956  0.17066372
## XC  0.03273449  0.01902173
## XD -0.15589701 -0.16188172
## XE  0.15413802  0.14886400
## XF  0.07156692  0.05538799
## XG  0.16006082  0.14832103
## XH  0.09772355  0.10867981
step(model_VB, direction = "backward")
## Start:  AIC=-197.65
## Y_mean ~ XA + XB + XC + XD + XE + XF + XG + XH
## 
##        Df Sum of Sq     RSS     AIC
## - XC    1   0.00230 0.67193 -199.48
## - XF    1   0.01783 0.68745 -198.34
## <none>              0.66963 -197.65
## - XH    1   0.05540 0.72503 -195.68
## - XB    1   0.06747 0.73710 -194.85
## - XG    1   0.06783 0.73745 -194.83
## - XD    1   0.09153 0.76116 -193.25
## - XE    1   0.11649 0.78612 -191.63
## - XA    1   0.54513 1.21476 -169.87
## 
## Step:  AIC=-199.48
## Y_mean ~ XA + XB + XD + XE + XF + XG + XH
## 
##        Df Sum of Sq     RSS     AIC
## - XF    1   0.01584 0.68776 -200.32
## <none>              0.67193 -199.48
## - XH    1   0.05373 0.72566 -197.63
## - XG    1   0.06672 0.73864 -196.75
## - XD    1   0.09028 0.76220 -195.18
## - XB    1   0.09713 0.76905 -194.73
## - XE    1   0.14366 0.81558 -191.79
## - XA    1   0.62741 1.29933 -168.51
## 
## Step:  AIC=-200.32
## Y_mean ~ XA + XB + XD + XE + XG + XH
## 
##        Df Sum of Sq     RSS     AIC
## <none>              0.68776 -200.32
## - XH    1   0.05381 0.74157 -198.55
## - XG    1   0.06416 0.75192 -197.86
## - XB    1   0.09639 0.78416 -195.76
## - XD    1   0.09777 0.78554 -195.67
## - XE    1   0.22765 0.91541 -188.02
## - XA    1   0.65767 1.34544 -168.76
## 
## Call:
## lm(formula = Y_mean ~ XA + XB + XD + XE + XG + XH, data = VB1)
## 
## Coefficients:
## (Intercept)           XA           XB           XD           XE  
##      0.4278       0.4430       0.1837      -0.1609       0.1777  
##          XG           XH  
##      0.1370       0.1066
# Mô hình cuối là cái mà ta cần tìm, biến XA, XB,XC,XD, và XF nên dữ lại
# Chọn biến 

VB2<-VB1[, -c(3,6)]

head(VB2) # Have a look at first few rows of a new dataset
model_VB1<-lm(Y_mean~., data=VB2)

calc.relimp(model_VB1,type=c("lmg"),rela=T)
## Response variable: Y_mean 
## Total response variance: 0.1273469 
## Analysis based on 50 observations 
## 
## 6 Regressors: 
## XA XB XD XE XG XH 
## Proportion of variance explained by model: 88.98%
## Metrics are normalized to sum to 100% (rela=TRUE). 
## 
## Relative importance metrics: 
## 
##           lmg
## XA 0.39526822
## XB 0.24578239
## XD 0.02561442
## XE 0.18328614
## XG 0.12900054
## XH 0.02104829
## 
## Average coefficients for different model sizes: 
## 
##           1X         2Xs         3Xs         4Xs         5Xs        6Xs
## XA 0.7568871  0.68587437  0.61468992  0.55351437  0.49616036  0.4429991
## XB 0.6959817  0.58009824  0.45898351  0.35402743  0.25923486  0.1836630
## XD 0.1306195 -0.02825652 -0.10289934 -0.12726756 -0.14542982 -0.1608726
## XE 0.4412913  0.33974509  0.26590709  0.21551416  0.19070763  0.1777398
## XG 0.4308874  0.32265170  0.23180993  0.17155842  0.14527989  0.1370330
## XH 0.1467958  0.04544086  0.04821581  0.06183911  0.08460565  0.1065996

Xử lý chọn biến theo nhóm

A<- VB %>% dplyr::select(A1:A5,Y_mean=Y.TB)

head(A)

– Chạy mô hình cho nhóm A

# Xây dựng mô hình cho nhóm A

model_A<-lm(Y_mean~., data=A)

# Lựa chọn biến có ý nghĩa thống kê cho nhóm A

step(model_A,direction = "backward")
## Start:  AIC=-182.05
## Y_mean ~ A1 + A2 + A3 + A4 + A5
## 
##        Df Sum of Sq    RSS     AIC
## <none>              1.0316 -182.05
## - A2    1   0.07459 1.1062 -180.56
## - A3    1   0.11776 1.1493 -178.64
## - A1    1   0.15095 1.1825 -177.22
## - A4    1   0.41284 1.4444 -167.22
## - A5    1   0.72905 1.7606 -157.32
## 
## Call:
## lm(formula = Y_mean ~ A1 + A2 + A3 + A4 + A5, data = A)
## 
## Coefficients:
## (Intercept)           A1           A2           A3           A4  
##     1.11774      0.16811      0.09319      0.07761      0.16690  
##          A5  
##     0.21276
# Từ mô hình ta thấy tất cả các biến đều có ý nghĩa

# Tính giá trị trung bình

A_mean<-rowMeans(A)

– Nhóm B

# sắp xếp lại dữ liệu cho nhóm B

B<- VB %>% dplyr::select(B6:B10, Y_mean=Y.TB)

head(B)
# Mô hình cho nhóm B

model_B<-lm(Y_mean~., data=B)

# Lựa chọn biến có ý nghĩa thống kê

step(model_B, direction = "backward")
## Start:  AIC=-157.33
## Y_mean ~ B6 + B7 + B8 + B9 + B10
## 
##        Df Sum of Sq    RSS     AIC
## - B6    1   0.01190 1.7032 -158.97
## - B7    1   0.01666 1.7080 -158.84
## <none>              1.6913 -157.33
## - B9    1   0.27998 1.9713 -151.67
## - B10   1   0.43973 2.1310 -147.77
## - B8    1   1.70504 3.3963 -124.47
## 
## Step:  AIC=-158.98
## Y_mean ~ B7 + B8 + B9 + B10
## 
##        Df Sum of Sq    RSS     AIC
## - B7    1   0.03843 1.7416 -159.86
## <none>              1.7032 -158.97
## - B9    1   0.27067 1.9739 -153.60
## - B10   1   0.58054 2.2837 -146.31
## - B8    1   1.73027 3.4335 -125.92
## 
## Step:  AIC=-159.86
## Y_mean ~ B8 + B9 + B10
## 
##        Df Sum of Sq    RSS     AIC
## <none>              1.7416 -159.86
## - B9    1   0.67375 2.4154 -145.51
## - B10   1   0.68763 2.4293 -145.22
## - B8    1   1.79034 3.5320 -126.51
## 
## Call:
## lm(formula = Y_mean ~ B8 + B9 + B10, data = B)
## 
## Coefficients:
## (Intercept)           B8           B9          B10  
##      1.0993       0.2936       0.2022       0.2048
# Giá trị trung bình cho nhóm B

B_mean<- rowMeans(B[,c(3,4,5)])

– Nhóm C

# sắp xếp lại dữ liệu cho nhóm C

C<- VB %>% dplyr::select(C11:C14, Y_mean=Y.TB)

head(C)
# Mô hình cho nhóm C

model_C<-lm(Y_mean~., data=C)

# Lựa chọn biến có ý nghĩa thống kê

step(model_C, direction = "backward")
## Start:  AIC=-122.13
## Y_mean ~ C11 + C12 + C13 + C14
## 
##        Df Sum of Sq    RSS     AIC
## - C12   1   0.04449 3.6033 -123.51
## - C11   1   0.05290 3.6117 -123.39
## - C14   1   0.11560 3.6744 -122.53
## <none>              3.5588 -122.13
## - C13   1   0.31632 3.8751 -119.87
## 
## Step:  AIC=-123.51
## Y_mean ~ C11 + C13 + C14
## 
##        Df Sum of Sq    RSS     AIC
## - C11   1   0.12526 3.7285 -123.80
## - C14   1   0.12947 3.7328 -123.74
## <none>              3.6033 -123.51
## - C13   1   0.38545 3.9887 -120.43
## 
## Step:  AIC=-123.8
## Y_mean ~ C13 + C14
## 
##        Df Sum of Sq    RSS     AIC
## <none>              3.7285 -123.80
## - C14   1   0.19553 3.9241 -123.25
## - C13   1   1.30114 5.0297 -110.83
## 
## Call:
## lm(formula = Y_mean ~ C13 + C14, data = C)
## 
## Coefficients:
## (Intercept)          C13          C14  
##      2.1804       0.2486       0.1117
# Giá trị trung bình cho nhóm C

C_mean<- rowMeans(C[,c(3,4)])

– Nhóm D

# sắp xếp lại dữ liệu cho nhóm D

D<- VB %>% dplyr::select(D15:D16, Y_mean=Y.TB)

head(D)
# Mô hình cho nhóm D

model_D<-lm(Y_mean~., data=D)

# Lựa chọn biến có ý nghĩa thống kê

step(model_D, direction = "backward")
## Start:  AIC=-103.13
## Y_mean ~ D15 + D16
## 
##        Df Sum of Sq    RSS     AIC
## - D16   1   0.22627 5.8633 -103.17
## <none>              5.6370 -103.13
## - D15   1   0.51113 6.1481 -100.79
## 
## Step:  AIC=-103.17
## Y_mean ~ D15
## 
##        Df Sum of Sq    RSS     AIC
## <none>              5.8633 -103.17
## - D15   1   0.37674 6.2400 -102.05
## 
## Call:
## lm(formula = Y_mean ~ D15, data = D)
## 
## Coefficients:
## (Intercept)          D15  
##      2.8493       0.1427
# Giá trị trung bình cho nhóm D

D_mean<- D[,1]

– Nhóm E

# sắp xếp lại dữ liệu cho nhóm D

E<- VB %>% dplyr::select(E17:E20, Y_mean=Y.TB)

head(E)
# Mô hình cho nhóm E

model_E<-lm(Y_mean~., data=E)

# Lựa chọn biến có ý nghĩa thống kê

step(model_E, direction = "backward")
## Start:  AIC=-124.78
## Y_mean ~ E17 + E18 + E19 + E20
## 
##        Df Sum of Sq    RSS     AIC
## - E19   1   0.03020 3.4053 -126.33
## - E18   1   0.10709 3.4822 -125.22
## - E20   1   0.11362 3.4887 -125.12
## <none>              3.3751 -124.78
## - E17   1   0.55695 3.9320 -119.14
## 
## Step:  AIC=-126.33
## Y_mean ~ E17 + E18 + E20
## 
##        Df Sum of Sq    RSS     AIC
## - E18   1   0.11717 3.5225 -126.64
## <none>              3.4053 -126.33
## - E20   1   0.24115 3.6464 -124.91
## - E17   1   0.58678 3.9921 -120.39
## 
## Step:  AIC=-126.64
## Y_mean ~ E17 + E20
## 
##        Df Sum of Sq    RSS     AIC
## <none>              3.5225 -126.64
## - E20   1   0.59359 4.1160 -120.86
## - E17   1   1.42374 4.9462 -111.67
## 
## Call:
## lm(formula = Y_mean ~ E17 + E20, data = E)
## 
## Coefficients:
## (Intercept)          E17          E20  
##      1.6885       0.3340       0.1748
# Giá trị trung bình cho nhóm E

E_mean<- rowMeans(E[,c(1,4)])

– Nhóm F

# sắp xếp lại dữ liệu cho nhóm F

F<- VB %>% dplyr::select(F21:F23, Y_mean=Y.TB)

head(F)
# Mô hình cho nhóm F

model_F<-lm(Y_mean~., data=F)

# Lựa chọn biến có ý nghĩa thống kê

step(model_F, direction = "backward")
## Start:  AIC=-111.32
## Y_mean ~ F21 + F22 + F23
## 
##        Df Sum of Sq    RSS     AIC
## - F21   1   0.04075 4.6389 -112.88
## <none>              4.5981 -111.32
## - F22   1   0.24527 4.8434 -110.72
## - F23   1   1.25692 5.8550 -101.24
## 
## Step:  AIC=-112.88
## Y_mean ~ F22 + F23
## 
##        Df Sum of Sq    RSS     AIC
## <none>              4.6389 -112.88
## - F22   1   0.46095 5.0998 -110.14
## - F23   1   1.22948 5.8683 -103.12
## 
## Call:
## lm(formula = Y_mean ~ F22 + F23, data = F)
## 
## Coefficients:
## (Intercept)          F22          F23  
##      2.1651       0.1300       0.2568
# Giá trị trung bình cho nhóm F

F_mean<- rowMeans(F[,c(2,3)])

– Nhóm G

# sắp xếp lại dữ liệu cho nhóm G

G<- VB %>% dplyr::select(G24:G25, Y_mean=Y.TB)

head(G)
# Mô hình cho nhóm G

model_G<-lm(Y_mean~., data=G)

# Lựa chọn biến có ý nghĩa thống kê

step(model_G, direction = "backward")
## Start:  AIC=-126.14
## Y_mean ~ G24 + G25
## 
##        Df Sum of Sq    RSS     AIC
## - G24   1   0.12662 3.6848 -126.39
## <none>              3.5582 -126.14
## - G25   1   2.30506 5.8633 -103.17
## 
## Step:  AIC=-126.39
## Y_mean ~ G25
## 
##        Df Sum of Sq    RSS     AIC
## <none>              3.6848 -126.39
## - G25   1    2.5552 6.2400 -102.05
## 
## Call:
## lm(formula = Y_mean ~ G25, data = G)
## 
## Coefficients:
## (Intercept)          G25  
##      2.6226       0.3425
# Giá trị trung bình cho nhóm G

G_mean<-G[,2]

– Nhóm H

# sắp xếp lại dữ liệu cho nhóm F

H<- VB %>% dplyr::select(H26:H27, Y_mean=Y.TB)

head(H)
# Mô hình cho nhóm H

model_H<-lm(Y_mean~., data=H)

# Lựa chọn biến có ý nghĩa thống kê

step(model_H, direction = "backward")
## Start:  AIC=-101.02
## Y_mean ~ H26 + H27
## 
##        Df Sum of Sq    RSS     AIC
## - H26   1  0.001014 5.8812 -103.01
## <none>              5.8802 -101.02
## - H27   1  0.267906 6.1481 -100.79
## 
## Step:  AIC=-103.01
## Y_mean ~ H27
## 
##        Df Sum of Sq    RSS     AIC
## <none>              5.8812 -103.01
## - H27   1   0.35877 6.2400 -102.05
## 
## Call:
## lm(formula = Y_mean ~ H27, data = H)
## 
## Coefficients:
## (Intercept)          H27  
##      3.0085       0.1241
# Giá trị trung bình cho nhóm H

H_mean<- H[,c(2)]

Xây dựng cơ sở dữ liệu mới

df <- data.frame(A_mean, B_mean, C_mean, D_mean, E_mean, F_mean, G_mean, H_mean, Y_mean=VB$Y.TB)

head(df)
# Mô hình mới

model1<-lm(Y_mean~., data=df)

# đóng góp vào mô hình 

calc.relimp(model1,type=c("lmg"),rela=T)
## Response variable: Y_mean 
## Total response variance: 0.1273469 
## Analysis based on 50 observations 
## 
## 8 Regressors: 
## A_mean B_mean C_mean D_mean E_mean F_mean G_mean H_mean 
## Proportion of variance explained by model: 91.11%
## Metrics are normalized to sum to 100% (rela=TRUE). 
## 
## Relative importance metrics: 
## 
##               lmg
## A_mean 0.32796983
## B_mean 0.21722689
## C_mean 0.11360199
## D_mean 0.01506423
## E_mean 0.11887984
## F_mean 0.07048971
## G_mean 0.11581242
## H_mean 0.02095510
## 
## Average coefficients for different model sizes: 
## 
##               1X        2Xs        3Xs        4Xs        5Xs         6Xs
## A_mean 0.8124260 0.74665233 0.68529402 0.63018413 0.58255321 0.542911778
## B_mean 0.6937135 0.57867126 0.47389228 0.38243153 0.30577132 0.244001775
## C_mean 0.3741238 0.25818396 0.18308701 0.13489752 0.10230324 0.077980013
## D_mean 0.1427027 0.08044085 0.04485725 0.02457142 0.01268340 0.005096962
## E_mean 0.4827273 0.34955602 0.25743255 0.19759738 0.16086977 0.139547376
## F_mean 0.3614068 0.25317455 0.18815794 0.14731485 0.11997145 0.099192879
## G_mean 0.3425161 0.23396542 0.16237618 0.11662235 0.08680531 0.066072395
## H_mean 0.1241409 0.08500811 0.06318386 0.05073078 0.04377950 0.040042957
##                  7Xs          8Xs
## A_mean  0.5112139865  0.486941224
## B_mean  0.1967171170  0.163954556
## C_mean  0.0576177534  0.038433702
## D_mean -0.0005615275 -0.005253272
## E_mean  0.1278825077  0.121921355
## F_mean  0.0804951289  0.061636304
## G_mean  0.0501190153  0.036072603
## H_mean  0.0378150401  0.035641983