Các yếu tố quản trị ảnh hưởng đến mức độ công bố thông tin ESG ở các doanh nghiệp niêm yết tại Việt Nam: So sánh hai nghành bất động sản và sản xuất

Author

Nhóm NCKH4

1. Đọc dữ liệu và chuẩn hóa dữ liệu

1.1 Nhập các thư viện cần dùng

library(readxl)
library(dplyr)
library(plm)
library(lmtest)
library(car)
library(sandwich)
library(psych)
library(flextable)
library(officer)
library(modelsummary)
library(gt)

1.2 Nhập data từ file`

data <- read_excel("C:/Học kỳ 3/Dữ liệu Excel NCKH4/Data_NCKH_2.xlsx")
head(data)
# A tibble: 6 × 15
  `Mã CK`        Năm Key    ESGS    ES    SS    GS    BS    BI    BD    SC   IND
  <chr>        <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 CTCP Vinami…  2022 VNM   0.667     1     1     0    10  30      30     0     0
2 CTCP Vinami…  2023 VNM   1         1     1     1    10  30      30     0     0
3 CTCP Vinami…  2024 VNM   0.333     0     1     0    10  30      30     0     0
4 CTCP Vinami…  2025 VNM   1         1     1     1    10  30      40     0     0
5 CTCP Masan …  2022 MCH   0.333     0     1     0     6  16.7    50     0     0
6 CTCP Masan …  2023 MCH   0.333     1     0     0     6  16.7    50     1     0
# ℹ 3 more variables: SIZE <chr>, LEV <dbl>, ROA <dbl>
data_clean <- data %>%
  mutate(
    ESGS = as.numeric(gsub("%","",ESGS)),
    ES = as.numeric(gsub("%","",ES)),
    SS = as.numeric(gsub("%","",SS)),
    GS = as.numeric(gsub("%","",GS)),
    BS = as.numeric(BS)/100,
    BI = as.numeric(BI)/100,
    BD = as.numeric(BD),
    SC = as.numeric(SC),
    IND = as.factor(IND),
    SIZE = as.numeric(SIZE),
    LEV = as.numeric(LEV),
    ROA = as.numeric(ROA)
  )
summary(data_clean)
       Mã CK         Năm              Key          ESGS              ES        
 Length   :68   Min.   :2022   Length   :68   Min.   :0.0000   Min.   :0.0000  
 N.unique :16   1st Qu.:2023   N.unique :17   1st Qu.:0.3333   1st Qu.:0.0000  
 N.blank  : 0   Median :2024   N.blank  : 0   Median :0.5000   Median :1.0000  
 Min.nchar:13   Mean   :2024   Min.nchar: 3   Mean   :0.4755   Mean   :0.5588  
 Max.nchar:32   3rd Qu.:2024   Max.nchar: 3   3rd Qu.:0.6667   3rd Qu.:1.0000  
                Max.   :2025                  Max.   :1.0000   Max.   :1.0000  
       SS               GS               BS                BI        
 Min.   :0.0000   Min.   :0.0000   Min.   :0.04000   Min.   :0.0000  
 1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.05000   1st Qu.:0.2000  
 Median :0.0000   Median :0.0000   Median :0.07000   Median :0.2860  
 Mean   :0.4706   Mean   :0.3971   Mean   :0.06912   Mean   :0.2676  
 3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:0.08250   3rd Qu.:0.3333  
 Max.   :1.0000   Max.   :1.0000   Max.   :0.11000   Max.   :0.6670  
       BD              SC          IND         SIZE             LEV        
 Min.   : 0.00   Min.   :0.00000   0:28   Min.   : 8.100   Min.   :0.2520  
 1st Qu.: 0.00   1st Qu.:0.00000   1:40   1st Qu.: 8.178   1st Qu.:0.4492  
 Median :15.48   Median :0.00000          Median : 8.607   Median :0.5785  
 Mean   :16.48   Mean   :0.04412          Mean   : 9.142   Mean   :0.5067  
 3rd Qu.:28.60   3rd Qu.:0.00000          3rd Qu.: 9.598   3rd Qu.:0.5785  
 Max.   :50.00   Max.   :1.00000          Max.   :12.460   Max.   :0.6420  
      ROA        
 Min.   :0.0004  
 1st Qu.:0.0950  
 Median :0.0950  
 Mean   :0.1089  
 3rd Qu.:0.1025  
 Max.   :0.5350  

1.3 Bảng thống kê mô tả

N

mean

sd

P25

median

P75

min

max

Năm

68

2023.500

1.126

2022.750

2023.500

2024.250

2022.000

2025.000

ESGS

68

0.475

0.312

0.333

0.500

0.667

0.000

1.000

ES

68

0.559

0.500

0.000

1.000

1.000

0.000

1.000

SS

68

0.471

0.503

0.000

0.000

1.000

0.000

1.000

GS

68

0.397

0.493

0.000

0.000

1.000

0.000

1.000

BS

68

0.069

0.017

0.050

0.070

0.082

0.040

0.110

BI

68

0.268

0.124

0.200

0.286

0.333

0.000

0.667

BD

68

16.475

15.060

0.000

15.480

28.600

0.000

50.000

SC

68

0.044

0.207

0.000

0.000

0.000

0.000

1.000

SIZE

68

9.142

1.197

8.178

8.607

9.598

8.100

12.460

LEV

68

0.507

0.114

0.449

0.579

0.579

0.252

0.642

ROA

68

0.109

0.071

0.095

0.095

0.103

0.000

0.535

Dữ liệu xử lý của nhóm

2. Chuyển dữ liệu sang dạng paneldata

Sử dụng câu lệnh trong R để chuyển dữ liệu bảng về dạng panel data

paneldf <- pdata.frame(data_clean,index = c("Key","Năm"))

#Kiểm tra lại bảng panel data
head(paneldf)
                                   Mã.CK  Năm Key      ESGS ES SS GS   BS
AGG-2022    CTCP Đầu tư và PT BĐS An Gia 2022 AGG 0.6666667  1  1  0 0.05
AGG-2023    CTCP Đầu tư và PT BĐS An Gia 2023 AGG 0.0000000  0  0  0 0.05
AGG-2024    CTCP Đầu tư và PT BĐS An Gia 2024 AGG 0.0000000  0  0  0 0.04
AGG-2025    CTCP Đầu tư và PT BĐS An Gia 2025 AGG 0.3333333  0  0  1 0.05
CKG-2022 CTCP TĐ Tư vấn ĐT XD Kiên Giang 2022 CKG 0.6666667  0  1  1 0.09
CKG-2023 CTCP TĐ Tư vấn ĐT XD Kiên Giang 2023 CKG 0.3333333  1  0  0 0.09
             BI   BD SC IND     SIZE    LEV   ROA
AGG-2022 0.4000  0.0  0   1 8.112344 0.5785 0.095
AGG-2023 0.4000  0.0  0   1 8.118420 0.5785 0.095
AGG-2024 0.5000  0.0  0   1 8.124495 0.5785 0.095
AGG-2025 0.6670  0.0  0   1 8.130571 0.5785 0.095
CKG-2022 0.3333 22.2  0   1 8.171334 0.5785 0.095
CKG-2023 0.3333 22.2  0   1 8.165259 0.5785 0.095

3. Bảng Ma trận tương quan

ESGS

ES

SS

GS

BS

BI

BD

ESGS

1.0000

ES

0.6313

1

SS

0.6458

0.1257

1

GS

0.5983

0.0552

0.0779

1

BS

0.1827

0.1809

0.1533

0.0068

1

BI

0.0146

-0.0356

-0.0716

0.1367

0.112

1

BD

0.0568

-0.0152

0.1739

-0.054

0.2642

-0.1203

1

Ghi chú: Ma trận tam giác dưới tính toán trên dữ liệu nghiên cứu.

4. Kiểm Tra Đa cộng tuyến tính VIF

Chạy mô hình OLS để sử dụng kiểm định VIF

ols_vif <- lm(ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf)
vif(ols_vif)
      BS       BI       BD       SC     SIZE      LEV      ROA 
1.716105 1.244938 1.473755 1.598960 2.768137 1.873600 1.339462 

BS

BI

BD

SC

SIZE

LEV

ROA

1.716

1.245

1.474

1.599

2.768

1.874

1.339

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

5. Uowsc Lượng mô hình Pooled OLS, fixed effect , random effect

5.1 mô hình Pooled OLS

Sử dụng hàm plm để chạy mô hình OLS

pool_ols <- plm(ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf)
summary(pool_ols)
Oneway (individual) effect Within Model

Call:
plm(formula = ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf)

Balanced Panel: n = 17, T = 4, N = 68

Residuals:
   Min. 1st Qu.  Median 3rd Qu.    Max. 
-0.5139 -0.1804  0.0128  0.1651  0.6182 

Coefficients:
        Estimate  Std. Error t-value Pr(>|t|)
BS   -3.09671586 13.33478541 -0.2322   0.8174
BI    0.36668075  0.65271214  0.5618   0.5771
BD    0.00080853  0.00625571  0.1292   0.8978
SC    0.40018134  0.44444050  0.9004   0.3728
SIZE -0.05343807  0.38225318 -0.1398   0.8895
LEV  -1.78210388  1.50916128 -1.1809   0.2440
ROA  -1.16714730  0.87210800 -1.3383   0.1877

Total Sum of Squares:    5.6944
Residual Sum of Squares: 5.1489
R-Squared:      0.095805
Adj. R-Squared: -0.37684
F-statistic: 0.666009 on 7 and 44 DF, p-value: 0.69933
#|echo: false
#|warning: false
#|message: false

modelsummary(pool_ols, 
             output = "flextable", 
             stars = c('*' = 0.1, '**' = 0.05, '***' = 0.01),
             gof_omit = "AIC|BIC|Log.Lik.|F|RMSE",
             title = "Bảng: Kết quả ước lượng mô hình Pooled OLS") %>%
  theme_booktabs() %>%
  font(fontname = "Times New Roman", part = "all") %>%
  fontsize(size = 11, part = "all") %>%
  add_footer_lines("Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.")

(1)

BS

-3.097

(13.335)

BI

0.367

(0.653)

BD

0.001

(0.006)

SC

0.400

(0.444)

SIZE

-0.053

(0.382)

LEV

-1.782

(1.509)

ROA

-1.167

(0.872)

Num.Obs.

68

R2

0.096

R2 Adj.

-0.377

* p < 0.1, ** p < 0.05, *** p < 0.01

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

5.2 Mô hình fixed effect

fem <- plm(ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf , model = "within")
summary(fem)
Oneway (individual) effect Within Model

Call:
plm(formula = ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf, 
    model = "within")

Balanced Panel: n = 17, T = 4, N = 68

Residuals:
   Min. 1st Qu.  Median 3rd Qu.    Max. 
-0.5139 -0.1804  0.0128  0.1651  0.6182 

Coefficients:
        Estimate  Std. Error t-value Pr(>|t|)
BS   -3.09671586 13.33478541 -0.2322   0.8174
BI    0.36668075  0.65271214  0.5618   0.5771
BD    0.00080853  0.00625571  0.1292   0.8978
SC    0.40018134  0.44444050  0.9004   0.3728
SIZE -0.05343807  0.38225318 -0.1398   0.8895
LEV  -1.78210388  1.50916128 -1.1809   0.2440
ROA  -1.16714730  0.87210800 -1.3383   0.1877

Total Sum of Squares:    5.6944
Residual Sum of Squares: 5.1489
R-Squared:      0.095805
Adj. R-Squared: -0.37684
F-statistic: 0.666009 on 7 and 44 DF, p-value: 0.69933

(1)

BS

-3.097

(13.335)

BI

0.367

(0.653)

BD

0.001

(0.006)

SC

0.400

(0.444)

SIZE

-0.053

(0.382)

LEV

-1.782

(1.509)

ROA

-1.167

(0.872)

Num.Obs.

68

R2

0.096

R2 Adj.

-0.377

* p < 0.1, ** p < 0.05, *** p < 0.01

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

5.3 Mô hình random effect

rem <- plm(ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf, model = "random")
summary(rem)
Oneway (individual) effect Random Effect Model 
   (Swamy-Arora's transformation)

Call:
plm(formula = ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA, data = paneldf, 
    model = "random")

Balanced Panel: n = 17, T = 4, N = 68

Effects:
                 var std.dev share
idiosyncratic 0.1170  0.3421     1
individual    0.0000  0.0000     0
theta: 0

Residuals:
    Min.  1st Qu.   Median  3rd Qu.     Max. 
-0.57176 -0.22270 -0.00233  0.22266  0.60416 

Coefficients:
               Estimate  Std. Error z-value Pr(>|z|)
(Intercept)  0.42796975  0.61451239  0.6964   0.4862
BS           2.42957618  2.96389031  0.8197   0.4124
BI           0.09849146  0.34718032  0.2837   0.7766
BD          -0.00069829  0.00311527 -0.2242   0.8226
SC           0.07699922  0.23620379  0.3260   0.7444
SIZE         0.01879048  0.05371254  0.3498   0.7265
LEV         -0.41871248  0.46605170 -0.8984   0.3690
ROA         -0.90193921  0.63090908 -1.4296   0.1528

Total Sum of Squares:    6.5147
Residual Sum of Squares: 6.0036
R-Squared:      0.078451
Adj. R-Squared: -0.029063
Chisq: 5.10778 on 7 DF, p-value: 0.64681

(1)

BS

-3.097

(13.335)

BI

0.367

(0.653)

BD

0.001

(0.006)

SC

0.400

(0.444)

SIZE

-0.053

(0.382)

LEV

-1.782

(1.509)

ROA

-1.167

(0.872)

Num.Obs.

68

R2

0.096

R2 Adj.

-0.377

* p < 0.1, ** p < 0.05, *** p < 0.01

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

6. Kiểm định lựa chọn sử dụng mô hình phù hợp nhất

Sử dụng cả 3 mô hình kiểm định bao gồm :F,LM, Hausman Uư tiên sử dụng Hausman test để lựa chọn giữa fem và rem ## 6.1 Kiểm định Hausman

phtest(fem,rem)

    Hausman Test

data:  ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA
chisq = 2.8682, df = 7, p-value = 0.8969
alternative hypothesis: one model is inconsistent

Kiểm định

Chi-squared

Bậc tự do (df)

P.value

Ý nghĩa

Hausman Test

2.8682

7

0.8969

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

6.2 Kiểm định F-test giữa P-OLS và Fem

pFtest(fem,pool_ols)

    F test for individual effects

data:  ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA
F = NaN, df1 = 0, df2 = 44, p-value = NA
alternative hypothesis: significant effects

Kiểm định

F-statistic

Bậc tự do (df)

P.value

Ý nghĩa

Redundant Fixed Effects (F-test)

0, 44

NA

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

6.3 Kiểm định giữa Ols và rem

plmtest(pool_ols, type ="bp")

    Lagrange Multiplier Test - (Breusch-Pagan)

data:  ESGS ~ BS + BI + BD + SC + SIZE + LEV + ROA
chisq = 3.4152, df = 1, p-value = 0.0646
alternative hypothesis: significant effects

Kiểm định

Chi-squared

Bậc tự do (df)

P.value

Ý nghĩa

Lagrange Multiplier Test (BP)

3.4152

1

0.0646

*

Ghi chú: Sai số chuẩn hiển thị trong ngoặc. * p<0.1, ** p<0.05, *** p<0.01.

8. Kiểm định khuyết tật mô hình

8.1 Kiểm định phương sai sai số

8.2 Kiểm định nội sinh

8.3. Kiểm định tự tương quan