Tuesday, 24 January 2017

T
rong phạm vi bài viết, mình tập tành chút trong việc xây dựng mô hình tuyến tính bằng Bayesian Model Average (BMA). Bài viết được áp dụng trên cơ sở giáo trình “Phân tích dữ liệu với R - Nguyễn Văn Tuấn” (trang 186-188). Theo đó, phép tính BMA tìm tất cả các mô hình khả dĩ và trình bày kết quả của các mô hình được xem là “tối ưu” nhất về lâu dài. Tiêu chuẩn tối ưu cũng dựa vào giá trị Akaike Information Criterion (AIC).
Trước tiên, để sử dụng phép tính BMA, chúng ta cần tải và cài package BMA.
> library(BMA)
Về dữ liệu:
> sk_kll
     d    h   dt scanh   re than canh   la
1 2.16 0.90 0.93     5 0.35 0.12 0.17 0.35
2 5.25 2.10 2.15    14 3.34 1.34 1.10 2.20
3 4.17 1.84 2.01    15 2.25 0.75 0.67 0.95
..........................................
..........................................

Trước tiên, chúng ta cần tạo ra một ma trận chỉ gồm các biến độc lập. Trong data (sk_kll) chúng ta có các biến d (đường kính gốc), h (chiều cao cây), dt (đường kính tán) và scanh (số cành dài trên 50cm)... của cây Keo lá liềm trồng trên đất cát vùng ven biển các tỉnh Bắc Trung bộ. Biến y (biến tiên đoán), có thể là (sinh khối rễ, sinh khối thân, sinh khối cành và sinh khối lá). Mục đích của phép tính này, là tiên đoán sinh khối bộ phận thân cây Keo lá liềm theo một số chỉ tiêu sinh trưởng (d, h, dt, scanh...).
Bước tiếp theo, chúng ta tạo ra một data frame mới gồm các biến độc lập (d, h, dt và scanh).
> biendoclap=sk_kll[,c(1:4)]
Lệnh trên có nghĩa, tạo ra data frame mới gồm 4 biến (d, d, dt và scanh) với tất cả các dòng dữ liệu.
Đối với biến tiên lượng (áp dụng cho từng biến tiên lượng). Cụ thể:
> re=sk_kll[,c(5)]
> than=sk_kll[,c(6)]
> canh=sk_kll[,c(7)]
> la=sk_kll[,c(8)]
Bây giờ chúng ta đã sẵn sàng phân tích bằng phép tính BMA. Để phân tích hồi qui tuyến tính, chúng ta sử dụng hàm bicreg trong package BMA.
> re1=bicreg(biendoclap,re, strict=FALSE, OR=20)
> summary(re1)
Call:
bicreg(x = xvars, y = re, strict = FALSE, OR = 20)
  7  models were selected
 Best  5  models (cumulative posterior probability =  0.7413 ):
           p!=0    EV       SD   model 1    model 2    model 3 
Intercept  100.0  -1.91834  NaN   -1.74414   -1.72798   -1.72285
d           61.2   0.61783  NaN    0.96480    1.02960    1.07714
h           38.8   1.22103  NaN      .          .       -0.28197
dt          38.8   0.18728  NaN      .       -0.15695      .   
scanh       38.8  -0.06831  NaN      .          .          .                     
nVar                                 1          2          2   
r2                                 0.999      0.999      0.999 
BIC                              -19.62465  -18.52604  -18.52604
post prob                          0.224      0.129      0.129 
           model 4    model 5 
Intercept   -1.75410   -2.61290
d            0.99922      .   
h              .          .   
dt             .        5.16129
scanh       -0.01084   -0.36742                         
nVar           2          2   
r2           0.999      0.999 
BIC        -18.52604  -18.52604
post prob    0.129      0.129
Kết quả bên trên đưa ra 05 mô hình được đánh giá là tối ưu nhất cho mô hình tiên đoán sinh khối rễ thân cây Keo lá liềm.
Chúng ta có thể thể hiện kết quả trên qua biểu đồ dưới đây:
> imageplot.bma(re1)
Tương tự, cho việc tiên đoán cho các biên tiên lượng (sinh khối thân, cành và lá).
Tiên lượng cho sinh khối thân cây
> than1=bicreg(biendoclap,than, strict=FALSE, OR=20)
> summary(than1)
Call:
bicreg(x = xvars, y = than, strict = FALSE, OR = 20)
  8  models were selected
 Best  5  models (cumulative posterior probability =  0.625 ): 
           p!=0    EV      SD   model 1    model 2    model 3  
Intercept  100.0  -0.8168  NaN   -0.68873   -0.67005   -0.67005
d           50.0   0.3396  NaN    0.62034    0.79334    0.79334
h           62.5   0.8939  NaN      .       -1.02619   -1.02619
dt          50.0  -0.3971  NaN   -0.57119      .          .    
scanh       37.5  -0.0464  NaN      .          .          .                                                                 
nVar                                2          2          2    
r2                                0.999      0.999      0.999  
BIC                             -18.52604  -18.52604  -18.52604
post prob                         0.125      0.125      0.125  
           model 4    model 5  
Intercept   -0.78377   -1.22190
d            0.50976      .    
h              .          .    
dt             .        2.63306
scanh       -0.03946   -0.22137                           
nVar           2          2    
r2           0.999      0.999  
BIC        -18.52604  -18.52604
post prob    0.125      0.125 
> imageplot.bma(than1)

Tiên lượng sinh khối cành
> canh1=bicreg(biendoclap,canh, strict=FALSE, OR=20)
> summary(canh1)
Call:
bicreg(x = xvars, y = canh, strict = FALSE, OR = 20)
  7  models were selected
 Best  5  models (cumulative posterior probability =  0.7143 ): 
           p!=0    EV       SD   model 1    model 2    model 3  
Intercept  100.0  -0.54887  NaN   -0.45181   -0.43983   -0.43983
d           57.1   0.27623  NaN    0.44565    0.55664    0.55664
h           57.1   0.38324  NaN      .       -0.65834   -0.65834
dt          42.9  -0.03839  NaN   -0.36644      .          .    
scanh       42.9  -0.03740  NaN      .          .          .                                                                
nVar                                 2          2          2    
r2                                 0.999      0.999      0.999  
BIC                              -18.52604  -18.52604  -18.52604
post prob                          0.143      0.143      0.143  
           model 4    model 5  
Intercept   -0.51279   -0.83484
d            0.37471      .    
h              .          .    
dt             .        1.93548
scanh       -0.02532   -0.15903                            
nVar           2          2    
r2           0.999      0.999  
BIC        -18.52604  -18.52604
post prob    0.143      0.143 

> imageplot.bma(canh1)

Tiên lượng cho biến sinh khối lá
> summary(la1)
Call:
bicreg(x = xvars, y = la, strict = FALSE, OR = 20)
  7  models were selected
 Best  5  models (cumulative posterior probability =  0.7143 ): 
           p!=0    EV      SD   model 1   model 2   model 3   model 4 
Intercept  100.0  -1.1493  NaN   -0.7806   -0.7117   -1.1311   -2.0101
d           42.9   0.6460  NaN    1.4305    2.0686    1.0226      .   
h           57.1   2.4123  NaN      .      -3.7850      .         .   
dt          57.1  -1.4977  NaN   -2.1068      .         .       5.2823
scanh       42.9  -0.1348  NaN      .         .      -0.1456   -0.5105                                                              
nVar                                2         2         2         2   
r2                                0.999     0.999     0.999     0.999 
BIC                             -18.5260  -18.5260  -18.5260  -18.5260
post prob                         0.143     0.143     0.143     0.143 
           model 5 
Intercept   -0.9351
d              .   
h            8.4853
dt          -6.8298
scanh          .                   
nVar           2   
r2           0.999 
BIC        -18.5260
post prob    0.143
> imageplot.bma(la1)

Trên đây mình có tập tành chút về áp dụng R hoặc tương tác với RStudio để xây dựng mô hình tuyến tính bằng Bayesian Model Average (BMA). Có thể tóm tắt các bước để tìm mô hình “tối ưu” bằng tiêu chuẩn BMA như sau:
> library(BMA)
> biendoclap=sk_kll[,c(1:4)]
> re=sk_kll[,c(5)]
> than=sk_kll[,c(6)]
> canh=sk_kll[,c(7)]
> la=sk_kll[,c(8)]
> re1=bicreg(biendoclap,re, strict=FALSE, OR=20)
> summary(re1)
> imageplot.bma(re1)

Wednesday, 18 January 2017

Trong cái note này mình tập tành chút về vẽ biểu đồ đường (line) cũng có thể vẽ nhiều đường (line) chồng lên nhau. Thực ra, trong quá trình viết báo cáo mình có vẽ mấy hình như dưới đây, nhưng cũng chưa viết cụ thể. Nhận tiện có một bạn trên group về Trao đổi kiến thức trong lâm nghiệp có hỏi cách vẽ biểu đồ đường cho 2 nhóm trên cùng một biểu đồ. Hôm nay, mình post những gì mình áp dụng trong R cũng như tương tác trong Rstudio lên group cũng như trang: http://ungdungrtronglamnghiep.blogspot.com/ hoặc fanpage: 
https://www.facebook.com/ungdungRtronglamnghiep/

Dưới đây là dữ liệu và mã codes trong R (RStudio) bạn nào quan tâm có thể copy và thực hành luôn. Thực ra, kết quả hình dưới đây vẫn chưa ưng ý cho lắm, bởi vẫn còn cách thể hiện đẹp hơn, logic hơn. Tuy nhiên, ở note mình chỉ đề cập qua. Hy vọng dịp khác mình sẽ vẽ đẹp hơn có thể.

1. data=tem

> tem
   Month   te  Location
1      1 21.1   Dac_Lac
2      2 22.9   Dac_Lac
3      3 24.9   Dac_Lac
4      4 26.0   Dac_Lac
5      5 26.0   Dac_Lac
6      6 25.1   Dac_Lac
7      7 24.3   Dac_Lac
8      8 24.7   Dac_Lac
9      9 24.1   Dac_Lac
10    10 23.9   Dac_Lac
11    11 23.9   Dac_Lac
12    12 21.8   Dac_Lac
13     1 17.3   Nghe_An
14     2 18.0   Nghe_An
15     3 20.3   Nghe_An
16     4 25.6   Nghe_An
17     5 30.1   Nghe_An
18     6 31.0   Nghe_An
19     7 30.4   Nghe_An
20     8 29.7   Nghe_An
21     9 28.4   Nghe_An
22    10 25.6   Nghe_An
23    11 23.7   Nghe_An
24    12 17.9   Nghe_An
25     1 16.7 Thanh_Hoa
26     2 18.6 Thanh_Hoa
27     3 21.2 Thanh_Hoa
28     4 24.6 Thanh_Hoa
29     5 28.5 Thanh_Hoa
30     6 29.5 Thanh_Hoa
31     7 28.6 Thanh_Hoa
32     8 28.3 Thanh_Hoa
33     9 27.4 Thanh_Hoa
34    10 25.4 Thanh_Hoa
35    11 22.6 Thanh_Hoa
36    12 16.8 Thanh_Hoa
37     1 14.6    Son_La
38     2 17.8    Son_La
39     3 21.3    Son_La
40     4 24.3    Son_La
41     5 26.0    Son_La
42     6 25.9    Son_La
43     7 25.4    Son_La
44     8 25.2    Son_La
45     9 24.3    Son_La
46    10 22.2    Son_La
47    11 20.2    Son_La
48    12 15.1    Son_La

# Mã codes trong R hoc Rstudio như sau:
> temp=ggplot(data=tem, aes(x=Month, y=te, group=as.factor(Location), color=Location))+ geom_line()+ geom_point()+ scale_x_continuous(breaks=1:12)+ scale_y_continuous(breaks = extended_range_breaks(tem$te))+ theme_bw()+ xlab("Months")+ ylab("Temperature, oC")
# Kết qu hình dưới đây:

2. data=rainfall
> rainfall
   Month    ra  Location
1      1   3.5   Dac_Lac
2      2   0.7   Dac_Lac
3      3  51.6   Dac_Lac
4      4 173.9   Dac_Lac
5      5 207.8   Dac_Lac
6      6 314.6   Dac_Lac
7      7 300.8   Dac_Lac
8      8 190.1   Dac_Lac
9      9 412.5   Dac_Lac
10    10 105.2   Dac_Lac
11    11  28.0   Dac_Lac
12    12   6.2   Dac_Lac
13     1   5.5   Nghe_An
14     2  46.9   Nghe_An
15     3  30.9   Nghe_An
16     4  15.9   Nghe_An
17     5  19.2   Nghe_An
18     6 272.7   Nghe_An
19     7 110.7   Nghe_An
20     8 168.5   Nghe_An
21     9 194.6   Nghe_An
22    10 472.9   Nghe_An
23    11  63.6   Nghe_An
24    12  65.1   Nghe_An
25     1   3.9 Thanh_Hoa
26     2  12.8 Thanh_Hoa
27     3  36.5 Thanh_Hoa
28     4  79.5 Thanh_Hoa
29     5 151.0 Thanh_Hoa
30     6 222.9 Thanh_Hoa
31     7 313.5 Thanh_Hoa
32     8 358.5 Thanh_Hoa
33     9 283.0 Thanh_Hoa
34    10 164.6 Thanh_Hoa
35    11  38.5 Thanh_Hoa
36    12  13.5 Thanh_Hoa
37     1  41.1    Son_La
38     2   6.2    Son_La
39     3  29.8    Son_La
40     4  80.8    Son_La
41     5 170.9    Son_La
42     6 192.6    Son_La
43     7 328.3    Son_La
44     8 274.7    Son_La
45     9 126.6    Son_La
46    10  24.3    Son_La
47    11  47.2    Son_La
48    12  52.3    Son_La 
# Mã codes trong R hoc Rstudio như sau:
> rain=ggplot(data=rainfall, aes(x=Month, y=ra,color=Location))+ geom_point(lwd=3)+ geom_line()+ xlab("Months")+ ylab("Rainfall in months, mm")+ scale_x_continuous(breaks=1:12)
# Kết qu hình dưới đây:

3. data=rain_btb
> rain_btb
   Months       Location luongmua
1       1      Thanh_Hoa     28.3
2       2      Thanh_Hoa     16.7
3       3      Thanh_Hoa     47.5
4       4      Thanh_Hoa     51.4
5       5      Thanh_Hoa    136.3
6       6      Thanh_Hoa    188.7
7       7      Thanh_Hoa    253.1
8       8      Thanh_Hoa    119.8
9       9      Thanh_Hoa    432.7
10     10      Thanh_Hoa    128.3
11     11      Thanh_Hoa    158.7
12     12      Thanh_Hoa     42.3
13      1        Nghe_An     60.9
14      2        Nghe_An     49.2
15      3        Nghe_An     73.5
16      4        Nghe_An     60.0
17      5        Nghe_An    119.7
18      6        Nghe_An    121.0
19      7        Nghe_An     90.1
20      8        Nghe_An     50.0
21      9        Nghe_An    368.1
22     10        Nghe_An    159.6
23     11        Nghe_An    219.0
24     12        Nghe_An     93.1
25      1        Ha_Tinh     61.6
26      2        Ha_Tinh     82.7
27      3        Ha_Tinh    183.7
28      4        Ha_Tinh    103.0
29      5        Ha_Tinh     44.0
30      6        Ha_Tinh    108.6
31      7        Ha_Tinh    139.0
32      8        Ha_Tinh    258.1
33      9        Ha_Tinh    638.8
34     10        Ha_Tinh    582.0
35     11        Ha_Tinh    389.1
36     12        Ha_Tinh     78.5
37      1     Quang_Binh     83.5
38      2     Quang_Binh     39.9
39      3     Quang_Binh     32.0
40      4     Quang_Binh    206.0
41      5     Quang_Binh      9.2
42      6     Quang_Binh     73.2
43      7     Quang_Binh     88.3
44      8     Quang_Binh     36.2
45      9     Quang_Binh    567.4
46     10     Quang_Binh     75.5
47     11     Quang_Binh    323.1
48     12     Quang_Binh     79.0
49      1      Quang_Tri     46.2
50      2      Quang_Tri     39.9
51      3      Quang_Tri     19.5
52      4      Quang_Tri    158.9
53      5      Quang_Tri      5.0
54      6      Quang_Tri     97.2
55      7      Quang_Tri    114.5
56      8      Quang_Tri     99.4
57      9      Quang_Tri    300.3
58     10      Quang_Tri    427.3
59     11      Quang_Tri    482.1
60     12      Quang_Tri    156.7
61      1 Thua_Thien_Hue     71.1
62      2 Thua_Thien_Hue     64.2
63      3 Thua_Thien_Hue    180.5
64      4 Thua_Thien_Hue    151.7
65      5 Thua_Thien_Hue     40.5
66      6 Thua_Thien_Hue     33.8
67      7 Thua_Thien_Hue     69.0
68      8 Thua_Thien_Hue     51.7
69      9 Thua_Thien_Hue    246.6
70     10 Thua_Thien_Hue    457.6
71     11 Thua_Thien_Hue    528.6
72     12 Thua_Thien_Hue    313.0
> mua=ggplot(data=rain_btb, aes(x=Months, y=luongmua, color=Location))+ geom_point(lwd=2)+geom_line()+ xlab("Months")+ ylab("Lượng mưa bình quân tháng, mm")+scale_x_continuous(breaks = 1:12)+ theme(legend.position="top")
# Kết quả hình dưới đây:

Powered by Blogger.

Contact Form

Name

Email *

Message *

Pages - Menu

Popular

Total Pageviews

Popular Posts

Recent Posts

Text Widget