library(readxl)
library(dplyr)
library(plm)
library(lmtest)
library(car)
library(sandwich)
library(psych)
library(flextable)
library(officer)
library(modelsummary)
library(gt)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
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
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. | ||||