cat("\014") # Lệnh này gửi mã để clear console
rm(list = ls()) # xoá all các biến
library(readxl)
data_100 <- read_excel("/Users/trieukimlanh/Library/CloudStorage/GoogleDrive-lanhtk@hub.edu.vn/My Drive/8. Huong dan Sinh Vien/NCKH/HD lấy data Fiinpro/data_100.xlsx")
View(data_100)
#install.packages("plm")
library(plm)
pdata = pdata.frame(data_100, index = c("BANK","YEAR"))
#str(pdata)
summary(pdata)
BANK YEAR ROA Tobin.s.Q
ABB : 9 2014 :25 Min. :0.008291 Min. :0.0000
ACB : 9 2015 :25 1st Qu.:0.453259 1st Qu.:0.0000
AGB : 9 2016 :25 Median :0.697881 Median :0.8800
BID : 9 2017 :25 Mean :0.912096 Mean :0.8591
BVB : 9 2018 :25 3rd Qu.:1.248441 3rd Qu.:1.3600
CTG : 9 2019 :25 Max. :3.237989 Max. :4.1400
(Other):171 (Other):75
Lern CR SIZE CAP
Min. :0.1194 Min. :0.4667 Min. :16.58 Min. : 4.062
1st Qu.:0.4127 1st Qu.:1.3082 1st Qu.:18.25 1st Qu.: 6.200
Median :0.5172 Median :1.8000 Median :18.99 Median : 7.713
Mean :0.5129 Mean :1.9278 Mean :19.03 Mean : 8.558
3rd Qu.:0.6193 3rd Qu.:2.3644 3rd Qu.:19.84 3rd Qu.:10.121
Max. :0.9617 Max. :6.9121 Max. :21.48 Max. :22.030
LGR CIR GDP GDPG
Min. :-14.23 Min. : 3.827 Min. :-0.0061064 Min. :2.554
1st Qu.: 12.42 1st Qu.:38.069 1st Qu.:-0.0004253 1st Qu.:6.422
Median : 17.40 Median :48.281 Median : 0.0003740 Median :6.940
Mean : 19.12 Mean :48.712 Mean : 0.0019054 Mean :6.202
3rd Qu.: 24.22 3rd Qu.:58.730 3rd Qu.: 0.0008796 3rd Qu.:7.359
Max. : 66.35 Max. :88.059 Max. : 0.0213082 Max. :8.538
GDP_hh lnGDP_hh INF_0 INF
Min. :4937032 Min. :15.41 Min. :-8.455e-03 Min. :0.6312
1st Qu.:5639401 1st Qu.:15.55 1st Qu.:-3.804e-03 1st Qu.:2.6682
Median :7009042 Median :15.76 Median : 5.503e-05 Median :3.1565
Mean :6992348 Mean :15.74 Mean : 2.842e-03 Mean :2.8280
3rd Qu.:8044386 3rd Qu.:15.90 3rd Qu.: 3.193e-03 3rd Qu.:3.5203
Max. :9621372 Max. :16.08 Max. : 3.227e-02 Max. :4.0846
...17
Min. :0.006312
1st Qu.:0.026682
Median :0.031565
Mean :0.028280
3rd Qu.:0.035203
Max. :0.040846
#install.packages("psych")
library(psych)
describe(pdata)
vars n mean sd median trimmed mad
BANK* 1 225 13.00 7.23 13.00 13.00 8.90
YEAR* 2 225 5.00 2.59 5.00 5.00 2.97
ROA 3 225 0.91 0.69 0.70 0.83 0.50
Tobin.s.Q 4 225 0.86 0.90 0.88 0.74 1.30
Lern 5 225 0.51 0.15 0.52 0.52 0.15
CR 6 225 1.93 0.95 1.80 1.83 0.79
SIZE 7 225 19.03 1.18 18.99 19.02 1.17
CAP 8 225 8.56 3.22 7.71 8.13 2.72
LGR 9 225 19.12 11.76 17.40 18.10 8.70
CIR 10 225 48.71 14.55 48.28 48.43 15.49
GDP 11 225 0.00 0.01 0.00 0.00 0.00
GDPG 12 225 6.20 1.96 6.94 6.36 0.77
GDP_hh 13 225 6992348.50 1514496.58 7009042.13 6922616.22 2030629.94
lnGDP_hh 14 225 15.74 0.22 15.76 15.73 0.28
INF_0 15 225 0.00 0.01 0.00 0.00 0.01
INF 16 225 2.83 0.98 3.16 2.94 0.57
...17 17 225 0.03 0.01 0.03 0.03 0.01
min max range skew kurtosis se
BANK* 1.00 25.00 24.00 0.00 -1.22 0.48
YEAR* 1.00 9.00 8.00 0.00 -1.25 0.17
ROA 0.01 3.24 3.23 1.09 0.48 0.05
Tobin.s.Q 0.00 4.14 4.14 0.93 0.63 0.06
Lern 0.12 0.96 0.84 -0.11 0.19 0.01
CR 0.47 6.91 6.45 1.77 5.45 0.06
SIZE 16.58 21.48 4.90 0.06 -0.71 0.08
CAP 4.06 22.03 17.97 1.25 1.57 0.21
LGR -14.23 66.35 80.58 0.96 2.12 0.78
CIR 3.83 88.06 84.23 0.11 0.19 0.97
GDP -0.01 0.02 0.03 2.01 3.05 0.00
GDPG 2.55 8.54 5.98 -1.02 -0.45 0.13
GDP_hh 4937031.68 9621371.82 4684340.14 0.18 -1.18 100966.44
lnGDP_hh 15.41 16.08 0.67 -0.06 -1.31 0.01
INF_0 -0.01 0.03 0.04 1.80 2.28 0.00
INF 0.63 4.08 3.45 -1.03 0.24 0.07
...17 0.01 0.04 0.03 -1.03 0.24 0.00
#install.packages("pastecs")
library(pastecs)
stat.desc(pdata)
BANK YEAR ROA Tobin.s.Q Lern CR
nbr.val NA NA 2.250000e+02 225.00000000 2.250000e+02 225.00000000
nbr.null NA NA 0.000000e+00 93.00000000 0.000000e+00 0.00000000
nbr.na NA NA 0.000000e+00 0.00000000 0.000000e+00 0.00000000
min NA NA 8.290915e-03 0.00000000 1.194070e-01 0.46669446
max NA NA 3.237989e+00 4.14000000 9.617302e-01 6.91208245
range NA NA 3.229698e+00 4.14000000 8.423232e-01 6.44538799
sum NA NA 2.052216e+02 193.30000000 1.153983e+02 433.74923581
median NA NA 6.978805e-01 0.88000000 5.171916e-01 1.80000000
mean NA NA 9.120960e-01 0.85911111 5.128813e-01 1.92777438
SE.mean NA NA 4.571522e-02 0.06007093 9.702705e-03 0.06327586
CI.mean NA NA 9.008692e-02 0.11837643 1.912026e-02 0.12469211
var NA NA 4.702233e-01 0.81191617 2.118206e-02 0.90086281
std.dev NA NA 6.857283e-01 0.90106391 1.455406e-01 0.94913793
coef.var NA NA 7.518160e-01 1.04883280 2.837705e-01 0.49234907
SIZE CAP LGR CIR GDP
nbr.val 2.250000e+02 225.0000000 225.0000000 2.250000e+02 2.250000e+02
nbr.null 0.000000e+00 0.0000000 0.0000000 0.000000e+00 0.000000e+00
nbr.na 0.000000e+00 0.0000000 0.0000000 0.000000e+00 0.000000e+00
min 1.657700e+01 4.0617705 -14.2284069 3.826981e+00 -6.106385e-03
max 2.147500e+01 22.0296782 66.3508780 8.805930e+01 2.130819e-02
range 4.898005e+00 17.9679077 80.5792849 8.423232e+01 2.741457e-02
sum 4.281840e+03 1925.4792751 4301.3069475 1.096017e+04 4.287136e-01
median 1.899492e+01 7.7132613 17.3951095 4.828084e+01 3.739628e-04
mean 1.903040e+01 8.5576857 19.1169198 4.871187e+01 1.905394e-03
SE.mean 7.853829e-02 0.2149925 0.7841980 9.702705e-01 4.797020e-04
CI.mean 1.547684e-01 0.4236666 1.5453492 1.912026e+00 9.453060e-04
var 1.387859e+00 10.3999015 138.3674676 2.118206e+02 5.177565e-05
std.dev 1.178074e+00 3.2248878 11.7629702 1.455406e+01 7.195530e-03
coef.var 6.190487e-02 0.3768411 0.6153172 2.987785e-01 3.776401e+00
GDPG GDP_hh lnGDP_hh INF_0 INF
nbr.val 225.0000000 2.250000e+02 2.250000e+02 2.250000e+02 225.0000000
nbr.null 0.0000000 0.000000e+00 0.000000e+00 0.000000e+00 0.0000000
nbr.na 0.0000000 0.000000e+00 0.000000e+00 0.000000e+00 0.0000000
min 2.5540000 4.937032e+06 1.541227e+01 -8.454664e-03 0.6312009
max 8.5380000 9.621372e+06 1.607950e+01 3.227257e-02 4.0845545
range 5.9840000 4.684340e+06 6.672226e-01 4.072723e-02 3.4533536
sum 1395.5000000 1.573278e+09 3.540740e+03 6.395346e-01 636.2967394
median 6.9400000 7.009042e+06 1.576271e+01 5.502772e-05 3.1565075
mean 6.2022222 6.992349e+06 1.573662e+01 2.842376e-03 2.8279855
SE.mean 0.1304023 1.009664e+05 1.461552e-02 7.526782e-04 0.0655637
CI.mean 0.2569722 1.989656e+05 2.880150e-02 1.483236e-03 0.1292005
var 3.8260714 2.293700e+12 4.806300e-02 1.274680e-04 0.9671846
std.dev 1.9560346 1.514497e+06 2.192327e-01 1.129017e-02 0.9834554
coef.var 0.3153764 2.165934e-01 1.393137e-02 3.972090e+00 0.3477583
...17
nbr.val 2.250000e+02
nbr.null 0.000000e+00
nbr.na 0.000000e+00
min 6.312009e-03
max 4.084554e-02
range 3.453354e-02
sum 6.362967e+00
median 3.156507e-02
mean 2.827986e-02
SE.mean 6.556370e-04
CI.mean 1.292005e-03
var 9.671846e-05
std.dev 9.834554e-03
coef.var 3.477583e-01
plot(pdata$ROA)
library(gplots)
plotmeans(ROA ~ BANK, main="Heterogenerity across BANK", data = pdata)
plotmeans(ROA ~ YEAR, main="Heterogenerity across YEAR", data = pdata)
plotmeans(GDP ~ YEAR, main="Heterogenerity across YEAR", data = pdata)
plotmeans(GDPG ~ YEAR, main="Heterogenerity across YEAR", data = pdata)
plotmeans(GDP_hh ~ YEAR, main="Heterogenerity across YEAR", data = pdata)
# install.packages("Hmisc") # Để tính toán ma trận tương quan kèm p-value
# install.packages("psych") # Để tính toán ma trận tương quan
# install.packages("dplyr") # Để thao tác với dữ liệu
library(Hmisc)
library(psych)
library(dplyr)
cor_results <- rcorr(as.matrix(data_100[, c("ROA", "Tobin's Q", "Lern", "CR", "SIZE","CAP", "LGR", "CIR", "GDPG", "INF")]))
# Ma trận tương quan
cor_matrix <- cor_results$r
p_matrix <- cor_results$P
# Khởi tạo ma trận kết quả
cor_with_stars <- matrix("", nrow = nrow(cor_matrix), ncol = ncol(cor_matrix))
# Duyệt qua từng phần tử của ma trận tương quan
for (i in 1:nrow(cor_matrix)) {
for (j in 1:ncol(cor_matrix)) {
cor_value <- cor_matrix[i, j]
p_value <- p_matrix[i, j]
if (is.na(p_value)) {
cor_with_stars[i, j] <- round(cor_value, 4)
} else if (p_value < 0.01) {
cor_with_stars[i, j] <- paste0(round(cor_value, 4), "***")
} else if (p_value < 0.05) {
cor_with_stars[i, j] <- paste0(round(cor_value, 4), "**")
} else if (p_value < 0.1) {
cor_with_stars[i, j] <- paste0(round(cor_value, 4), "*")
} else {
cor_with_stars[i, j] <- round(cor_value, 4)
}
}
}
# Chuyển ma trận kết quả thành dạng data.frame để dễ đọc
cor_with_stars_df <- as.data.frame(cor_with_stars)
# Đặt tên các cột và dòng cho ma trận kết quả
colnames(cor_with_stars_df) <- colnames(cor_matrix)
rownames(cor_with_stars_df) <- rownames(cor_matrix)
# Hiển thị kết quả
print(cor_with_stars_df)
ROA Tobin's Q Lern CR SIZE CAP
ROA 1 0.4253*** 0.5847*** -0.1988*** 0.3818*** 0.3062***
Tobin's Q 0.4253*** 1 0.3917*** -0.2095*** 0.5137*** -0.0847
Lern 0.5847*** 0.3917*** 1 -0.1752*** 0.5098*** 0.0099
CR -0.1988*** -0.2095*** -0.1752*** 1 -0.2032*** 0.1604**
SIZE 0.3818*** 0.5137*** 0.5098*** -0.2032*** 1 -0.4581***
CAP 0.3062*** -0.0847 0.0099 0.1604** -0.4581*** 1
LGR 0.0845 -0.1748*** -0.0512 -0.2059*** -0.0548 -0.1853***
CIR -0.5847*** -0.3917*** -1*** 0.1752*** -0.5098*** -0.0099
GDPG -0.1009 -0.3419*** -0.1274* 0.0405 -0.087 0.0114
INF 0.0598 -0.0402 -0.005 0.0488 0.0099 -0.0367
LGR CIR GDPG INF
ROA 0.0845 -0.5847*** -0.1009 0.0598
Tobin's Q -0.1748*** -0.3917*** -0.3419*** -0.0402
Lern -0.0512 -1*** -0.1274* -0.005
CR -0.2059*** 0.1752*** 0.0405 0.0488
SIZE -0.0548 -0.5098*** -0.087 0.0099
CAP -0.1853*** -0.0099 0.0114 -0.0367
LGR 1 0.0512 0.1125* -0.1522**
CIR 0.0512 1 0.1274* 0.005
GDPG 0.1125* 0.1274* 1 0.1698**
INF -0.1522** 0.005 0.1698** 1
# tạo vector biến
vars <- c("ROA", "Tobin.s.Q", "Lern", "CR", "SIZE","CAP", "LGR", "CIR", "GDPG", "INF")
#install.packages("ggcorrplot")
library(ggcorrplot)
# Tính ma trận
corr <- round(cor(pdata[, vars], use = "complete.obs"), 3)
corr
ROA Tobin.s.Q Lern CR SIZE CAP LGR CIR GDPG
ROA 1.000 0.425 0.585 -0.199 0.382 0.306 0.084 -0.585 -0.101
Tobin.s.Q 0.425 1.000 0.392 -0.209 0.514 -0.085 -0.175 -0.392 -0.342
Lern 0.585 0.392 1.000 -0.175 0.510 0.010 -0.051 -1.000 -0.127
CR -0.199 -0.209 -0.175 1.000 -0.203 0.160 -0.206 0.175 0.041
SIZE 0.382 0.514 0.510 -0.203 1.000 -0.458 -0.055 -0.510 -0.087
CAP 0.306 -0.085 0.010 0.160 -0.458 1.000 -0.185 -0.010 0.011
LGR 0.084 -0.175 -0.051 -0.206 -0.055 -0.185 1.000 0.051 0.113
CIR -0.585 -0.392 -1.000 0.175 -0.510 -0.010 0.051 1.000 0.127
GDPG -0.101 -0.342 -0.127 0.041 -0.087 0.011 0.113 0.127 1.000
INF 0.060 -0.040 -0.005 0.049 0.010 -0.037 -0.152 0.005 0.170
INF
ROA 0.060
Tobin.s.Q -0.040
Lern -0.005
CR 0.049
SIZE 0.010
CAP -0.037
LGR -0.152
CIR 0.005
GDPG 0.170
INF 1.000
# Vẽ biểu đồ nhiệt
ggcorrplot(corr,
hc.order = TRUE,
type = "lower", # Chỉ hiện một nửa dưới của ma trận cho gọn
lab = TRUE, # Hiển thị số ngay trên biểu đồ
outline.col = "white",
title = "Ma trận tương quan Pearson",
colors = c("#6D9EC1", "white", "#E46726"))
library(ggplot2)
# Chuyển pdata thành data.frame thông thường
ggplot(as.data.frame(pdata), aes(x = Lern, y = ROA)) +
geom_point(aes(color = factor(YEAR))) +
geom_smooth(method = "lm", span = 0.75, color = "black", se = TRUE) +
theme_minimal()
ggplot(as.data.frame(pdata), aes(x = Lern, y = ROA)) +
geom_point(aes(color = factor(YEAR))) +
geom_smooth(method = "loess", span = 0.75, color = "black", se = TRUE) +
theme_minimal()
ggplot(as.data.frame(pdata), aes(x = Lern, y = ROA)) +
geom_point() +
geom_smooth(method = "lm", formula = y ~ x, color = "blue", se = FALSE) + # Đường thẳng
geom_smooth(method = "lm", formula = y ~ poly(x, 2), color = "blue", se = FALSE) + # Đường thẳng
geom_smooth(method = "loess", color = "red", se = FALSE) + # Đường cong
theme_minimal()
Loại bỏ CIR vì nó tương quan -1 với Lern
#install.packages("plm")
library(plm)
pooledmethod=plm(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,model = "pooling")
summary(pooledmethod)
Pooling Model
Call:
plm(formula = ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF,
data = pdata, model = "pooling")
Balanced Panel: n = 25, T = 9, N = 225
Residuals:
Min. 1st Qu. Median 3rd Qu. Max.
-1.344045 -0.297374 -0.032088 0.313267 1.166687
Coefficients:
Estimate Std. Error t-value Pr(>|t|)
(Intercept) -6.3872700 0.6946648 -9.1948 < 2.2e-16 ***
Lern 1.5430401 0.2498929 6.1748 3.220e-09 ***
CR -0.0672159 0.0325731 -2.0635 0.040251 *
SIZE 0.2731303 0.0349238 7.8207 2.262e-13 ***
CAP 0.1241319 0.0111724 11.1106 < 2.2e-16 ***
LGR 0.0142265 0.0026904 5.2878 3.014e-07 ***
GDPG -0.0249453 0.0155039 -1.6090 0.109076
INF 0.0920217 0.0308226 2.9855 0.003156 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Total Sum of Squares: 105.33
Residual Sum of Squares: 41.757
R-Squared: 0.60356
Adj. R-Squared: 0.59078
F-statistic: 47.1966 on 7 and 217 DF, p-value: < 2.22e-16
# Chuyển đổi mô hình plm sang lm
lm_model <- lm(formula(pooledmethod), data = model.frame(pooledmethod))
# Tính VIF
library(car)
vif_values <- round(vif(lm_model),4)
# Chuyển sang data.frame
vif_df <- data.frame(
Variable = names(vif_values),
VIF = as.numeric(vif_values)
)
# Thêm 1/VIF
vif_df$Tolerance <- round(1 / vif_df$VIF,4)
# Tính VIF trung bình
mean_vif <- mean(vif_df$VIF)
# Thêm dòng Mean VIF
vif_df <- rbind(
vif_df,
data.frame(
Variable = "Mean VIF",
VIF = mean_vif,
`Tolerance` = " "
)
)
print("Kiểm định đa cộng tuyến, kết quả hệ số VIF")
[1] "Kiểm định đa cộng tuyến, kết quả hệ số VIF"
print(vif_df)
Variable VIF Tolerance
1 Lern 1.539800 0.6494
2 CR 1.112600 0.8988
3 SIZE 1.970500 0.5075
4 CAP 1.511100 0.6618
5 LGR 1.165900 0.8577
6 GDPG 1.070600 0.9341
7 INF 1.069600 0.9349
8 Mean VIF 1.348586
# Chọn biến phụ thuộc và các biến độc lập
dep_var <- pdata$ROA
ind_vars <- pdata[, c("Lern", "CR", "SIZE", "CAP", "LGR", "GDPG", "INF")]
# Xử lý dữ liệu để đảm bảo không có giá trị thiếu đồng nhất
complete_cases <- complete.cases(dep_var, ind_vars)
dep_var <- dep_var[complete_cases]
ind_vars <- ind_vars[complete_cases, ]
# Khởi tạo các vector để lưu hệ số tương quan và p-value
correlations <- numeric(ncol(ind_vars))
p_values <- numeric(ncol(ind_vars))
# Tính toán hệ số tương quan và p-value cho từng biến độc lập
for (i in seq_along(correlations)) {
test <- cor.test(dep_var, ind_vars[, i], method = "pearson")
correlations[i] <- test$estimate
p_values[i] <- test$p.value
}
# Tạo data frame để hiển thị kết quả
cor_results_df <- data.frame(
Variable = colnames(ind_vars),
Correlation = correlations,
P_Value = p_values
)
# Hiển thị kết quả
print("Hệ số tương quan và P-Value giữa biến phụ thuộc và các biến độc lập:")
[1] "Hệ số tương quan và P-Value giữa biến phụ thuộc và các biến độc lập:"
cor_results_df$Correlation <- round(cor_results_df$Correlation, 4)
cor_results_df$P_Value <- round(cor_results_df$P_Value, 4)
print(cor_results_df)
Variable Correlation P_Value
1 Lern 0.5847 0.0000
2 CR -0.1988 0.0027
3 SIZE 0.3818 0.0000
4 CAP 0.3062 0.0000
5 LGR 0.0845 0.2069
6 GDPG -0.1009 0.1312
7 INF 0.0598 0.3721
femmethod=plm(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,model = "within")
summary(femmethod)
Oneway (individual) effect Within Model
Call:
plm(formula = ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF,
data = pdata, model = "within")
Balanced Panel: n = 25, T = 9, N = 225
Residuals:
Min. 1st Qu. Median 3rd Qu. Max.
-0.7968566 -0.1397072 -0.0078042 0.1560232 0.7006910
Coefficients:
Estimate Std. Error t-value Pr(>|t|)
Lern 1.3564870 0.2460345 5.5134 1.119e-07 ***
CR -0.0868840 0.0255356 -3.4025 0.0008119 ***
SIZE 0.6626068 0.0570234 11.6199 < 2.2e-16 ***
CAP 0.0939526 0.0103363 9.0896 < 2.2e-16 ***
LGR 0.0040720 0.0019849 2.0515 0.0415686 *
GDPG 0.0045750 0.0091409 0.5005 0.6172926
INF 0.0561183 0.0178690 3.1405 0.0019516 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Total Sum of Squares: 48.871
Residual Sum of Squares: 12.227
R-Squared: 0.74982
Adj. R-Squared: 0.70964
F-statistic: 82.6352 on 7 and 193 DF, p-value: < 2.22e-16
remmethod=plm(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,model = "random")
summary(remmethod)
Oneway (individual) effect Random Effect Model
(Swamy-Arora's transformation)
Call:
plm(formula = ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF,
data = pdata, model = "random")
Balanced Panel: n = 25, T = 9, N = 225
Effects:
var std.dev share
idiosyncratic 0.06335 0.25170 0.501
individual 0.06306 0.25112 0.499
theta: 0.6831
Residuals:
Min. 1st Qu. Median 3rd Qu. Max.
-0.979693 -0.172607 -0.028308 0.183901 0.725912
Coefficients:
Estimate Std. Error z-value Pr(>|z|)
(Intercept) -8.8538770 0.8968398 -9.8723 < 2.2e-16 ***
Lern 1.6571107 0.2530055 6.5497 5.765e-11 ***
CR -0.0900505 0.0279245 -3.2248 0.001261 **
SIZE 0.4191628 0.0471186 8.8959 < 2.2e-16 ***
CAP 0.1049769 0.0108845 9.6446 < 2.2e-16 ***
LGR 0.0037174 0.0021651 1.7170 0.085983 .
GDPG -0.0058674 0.0103216 -0.5685 0.569725
INF 0.0635789 0.0203715 3.1210 0.001802 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Total Sum of Squares: 54.541
Residual Sum of Squares: 17.933
R-Squared: 0.67119
Adj. R-Squared: 0.66058
Chisq: 442.958 on 7 DF, p-value: < 2.22e-16
# install.packages("stargazer")
library(stargazer)
stargazer(pooledmethod, femmethod, remmethod,
type = "text", # hoặc "html", "latex"
title = "So sánh 3 mô hình",
column.labels = c("Pooled OLS", "FEM", "REM"),
digits = 4)
So sánh 3 mô hình
==========================================================================
Dependent variable:
-------------------------------------------------------------
ROA
Pooled OLS FEM REM
(1) (2) (3)
--------------------------------------------------------------------------
Lern 1.5430*** 1.3565*** 1.6571***
(0.2499) (0.2460) (0.2530)
CR -0.0672** -0.0869*** -0.0901***
(0.0326) (0.0255) (0.0279)
SIZE 0.2731*** 0.6626*** 0.4192***
(0.0349) (0.0570) (0.0471)
CAP 0.1241*** 0.0940*** 0.1050***
(0.0112) (0.0103) (0.0109)
LGR 0.0142*** 0.0041** 0.0037*
(0.0027) (0.0020) (0.0022)
GDPG -0.0249 0.0046 -0.0059
(0.0155) (0.0091) (0.0103)
INF 0.0920*** 0.0561*** 0.0636***
(0.0308) (0.0179) (0.0204)
Constant -6.3873*** -8.8539***
(0.6947) (0.8968)
--------------------------------------------------------------------------
Observations 225 225 225
R2 0.6036 0.7498 0.6712
Adjusted R2 0.5908 0.7096 0.6606
F Statistic 47.1966*** (df = 7; 217) 82.6352*** (df = 7; 193) 442.9578***
==========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
Poolability test
Test for individual and time effect for panel data
plmtest(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,effect = "twoways",type = "ghm")
Lagrange Multiplier Test - two-ways effects (Gourieroux, Holly and
Monfort)
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chibarsq = 226.32, df0 = 0.00, df1 = 1.00, df2 = 2.00, w0 = 0.25, w1 =
0.50, w2 = 0.25, p-value < 2.2e-16
alternative hypothesis: significant effects
plmtest(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,effect = "twoways",type = "bp")
Lagrange Multiplier Test - two-ways effects (Breusch-Pagan)
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chisq = 226.32, df = 2, p-value < 2.2e-16
alternative hypothesis: significant effects
Giả thuyết H0: Pooled OLS là nhất quán; H1: FEM là nhất quán => nếu MH nhất quán, khi kích thước mẫu càng lớn thì MH càng chính xác => nên chọn MH nào “consistent”
Đọc kết quả Kiểm định F: p-value < 0.05 => bác bỏ H0, chọn H1 => chọn FEM
pFtest(femmethod,pooledmethod)
F test for individual effects
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
F = 19.422, df1 = 24, df2 = 193, p-value < 2.2e-16
alternative hypothesis: significant effects
plmtest(remmethod, type = "bp")
Lagrange Multiplier Test - (Breusch-Pagan)
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chisq = 179.6, df = 1, p-value < 2.2e-16
alternative hypothesis: significant effects
Giả thuyết H0: REM is consistent; H1: chọn FEM
Đọc kết quả Kiểm định Hausman: p-value < 0.05 => bác bỏ H0, chọn H1 => chọn FEM
phtest(femmethod,remmethod)
Hausman Test
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chisq = 52.469, df = 7, p-value = 4.719e-09
alternative hypothesis: one model is inconsistent
# 1. Ước lượng mô hình FEM 2 chiều (Two-ways effects)
fem2 <- plm(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF, data = pdata, model = "within", effect = "twoways")
# 2. Sử dụng hàm pFtest để so sánh
pFtest(fem2, femmethod)
F test for twoways effects
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
F = 1.7322, df1 = 6, df2 = 187, p-value = 0.1156
alternative hypothesis: significant effects
# đọc p-value < 0.05 => FEM 2 chiều phù hợp
Đọc KQ: p-value<0.05 => bác bỏ H0 => kết luận: có sự phụ thuộc chéo.
# test phụ thuộc chéo mô hình pooledOLS bỏ tùy chọn model
pcdtest(
ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,
data = pdata, model = "within", effect = "individual",
test = "lm"
)
Breusch-Pagan LM test for cross-sectional dependence in panels
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chisq = 439.71, df = 300, p-value = 2.486e-07
alternative hypothesis: cross-sectional dependence
# test phụ thuộc chéo mô hình fem
pcdtest(femmethod, test = "lm")
Breusch-Pagan LM test for cross-sectional dependence in panels
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chisq = 439.71, df = 300, p-value = 2.486e-07
alternative hypothesis: cross-sectional dependence
pcdtest(femmethod, test = ("cd"))
Pesaran CD test for cross-sectional dependence in panels
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
z = 0.54546, p-value = 0.5854
alternative hypothesis: cross-sectional dependence
kiểm tra tính ổn định của dữ liệu bảng (kiểm tra tính dừng của data); H0: có nghiệm đơn vị trong biến (biến không dừng); H1: biến dừng
Ram = data.frame((split(data_100$ROA,data_100$BANK)))
purtest(Ram, pmax = 2,exo = "intercept", test = "levinlin")
Levin-Lin-Chu Unit-Root Test (ex. var.: Individual Intercepts)
data: Ram
z = 2.0029, p-value = 0.9774
alternative hypothesis: stationarity
đọc kết quả p-value < 0.05 => chọn H1: chuỗi dừng ; kết quả của Kiểm định Levin-Lin-Chu hiện tại chuỗi không dừng. Kiểm định tiếp bằng Kiểm định Maddala-Wu
purtest(Ram, pmax = 2,exo = "intercept", test = "madwu")
Maddala-Wu Unit-Root Test (ex. var.: Individual Intercepts)
data: Ram
chisq = 172.4, df = 50, p-value = 2.3e-15
alternative hypothesis: stationarity
kết quả kiểm định Maddala-Wu, p-value < 0.05 => chuỗi dừng.
21.1. Panel Durbin Watson test for Autocorrelation
Kiểm định hiện tượng tự tương quan của REM. Ho: không có tự tương quan trong sai số
đọc kết quả p-value < 0.05 => chọn H1 => MH có hiện tượng tự tương quan sai số.
#pdwtest(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,model = "random")
21.2. Wooldridge Test for Autocorrelation of FEM
H0: không có tự tương quan, đọc kết quả, p-value < 0.05, chọn H1, nghĩa là có tự tương quan
pbgtest(femmethod) # Kiểm định Breusch-Godfrey
Breusch-Godfrey/Wooldridge test for serial correlation in panel models
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
chisq = 47.904, df = 9, p-value = 2.662e-07
alternative hypothesis: serial correlation in idiosyncratic errors
# hoặc
pwartest(femmethod) # Kiểm định Wooldridge cho dữ liệu bảng
Wooldridge's test for serial correlation in FE panels
data: femmethod
F = 51.534, df1 = 1, df2 = 198, p-value = 1.386e-11
alternative hypothesis: serial correlation
22.1. Testing of Homoscedasticity in Panel Data
Kiểm định hiện tượng PSSS thay đổi FEM; H0: phương sai sai số không đổi
#install.packages("lmtest")
# FEM 1 chiều
library(lmtest)
bptest(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF,data = pdata,studentize = F)
Breusch-Pagan test
data: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
BP = 29.773, df = 7, p-value = 0.0001045
# FEM 2 chiều
#bptest(ROA~Lern+CR+SIZE+CAP+LGR+GDPG+INF + factor(BANK) + factor(YEAR),
# data = pdata, studentize = TRUE)
đọc kết quả Kiểm định Breusch-Pagan, p-value < 0.05 => chọn H1 => PSSS có thay đổi.
Như vậy, MH hiện tại có hiện tượng tự tương quan và PSSS thay đổi.
22.2. Kiểm định hiện tượng PSSS thay đổi REM; H0: PSSS không đổi; H1: PSSS thay đổi.
library(lmtest)
library(sandwich)
library(plm)
#bptest(remmethod, studentize = FALSE)
đọc kết quả: p-value < 0.05 => bác bỏ H0, chọn H1 => PSSS thay đổi.
Với panel MH nếu các cùng trong 1 quốc gia, biến GDPG, INF giống nhau giữa các NH theo từng năm nên khi chạy FEM 2 chiều sẽ bị triệt tiêu trong MH
Vẫn nên dùng FEM 1 chiều nếu muốn biến GDPG, INF xuất hiện (và bản thân các biến này thể hiện sự khác biệt về thời gian giữa các NH nếu nó có ý nghĩa thống kê)
#install.packages("lmtest")
#install.packages("sandwich")
library(lmtest)
library(sandwich)
library(plm)
coeftest(femmethod,vcovHC(femmethod,method = "arellano")) # Clustered Robust Standard Errors) PSSS+TTQ
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
Lern 1.3564870 0.3634783 3.7320 0.0002498 ***
CR -0.0868840 0.0331481 -2.6211 0.0094632 **
SIZE 0.6626068 0.0759782 8.7210 1.270e-15 ***
CAP 0.0939526 0.0144772 6.4897 7.077e-10 ***
LGR 0.0040720 0.0017262 2.3590 0.0193237 *
GDPG 0.0045750 0.0070406 0.6498 0.5165908
INF 0.0561183 0.0092002 6.0997 5.694e-09 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(femmethod, vcov = vcovSCC(femmethod, type = "HC1")) # SCC (Driscoll-Kraay) combo PSSS+TTQ+phụ thuộc chéo
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
Lern 1.3564870 0.1880461 7.2136 1.210e-11 ***
CR -0.0868840 0.0213779 -4.0642 7.011e-05 ***
SIZE 0.6626068 0.0478169 13.8572 < 2.2e-16 ***
CAP 0.0939526 0.0142266 6.6040 3.785e-10 ***
LGR 0.0040720 0.0023806 1.7105 0.08877 .
GDPG 0.0045750 0.0066979 0.6831 0.49539
INF 0.0561183 0.0113186 4.9581 1.555e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#coeftest(femmethod,vcovHC) ## If there is heteroscedasticity
nếu là REM, khắc phục: coeftest(remmethod,vcovHC(remmethod,type = “HC1”))
=> có thể dùng kết quả sau khi khắc phục PSSS thay đổi và tự tương quan. Không cần chạy GLS.
library(nlme)
gls_model <- gls(ROA ~ Lern+CR+SIZE+CAP+LGR+GDPG+INF, data = pdata, correlation = corAR1()) # kiểm soát hiện tượng tự tương quan bậc 1 (AR(1))
summary(gls_model)
Generalized least squares fit by REML
Model: ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF
Data: pdata
AIC BIC logLik
128.0807 161.8797 -54.04037
Correlation Structure: AR(1)
Formula: ~1
Parameter estimate(s):
Phi
0.8129392
Coefficients:
Value Std.Error t-value p-value
(Intercept) -6.316691 0.7893935 -8.001954 0.0000
Lern 1.549274 0.2538544 6.103004 0.0000
CR -0.081000 0.0257935 -3.140316 0.0019
SIZE 0.291259 0.0414646 7.024277 0.0000
CAP 0.099619 0.0120227 8.285954 0.0000
LGR -0.000228 0.0016790 -0.135747 0.8921
GDPG 0.021529 0.0080511 2.674090 0.0081
INF 0.025684 0.0136154 1.886399 0.0606
Correlation:
(Intr) Lern CR SIZE CAP LGR GDPG
Lern 0.465
CR -0.238 0.096
SIZE -0.968 -0.596 0.146
CAP -0.527 -0.330 0.048 0.442
LGR -0.203 -0.014 0.216 0.122 0.195
GDPG 0.100 0.026 0.020 -0.147 -0.119 -0.061
INF -0.122 0.030 -0.112 0.066 0.075 0.138 -0.097
Standardized residuals:
Min Q1 Med Q3 Max
-2.33896846 -0.67242032 -0.01786849 0.64068978 2.20960857
Residual standard error: 0.4831327
Degrees of freedom: 225 total; 217 residual
# Chạy PGLS với cấu trúc hiệu ứng cá nhân
fgls_model <- pggls(ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF,
data = pdata,
model = "within",
effect = "individual")
summary(fgls_model)
Oneway (individual) effect Within FGLS model
Call:
pggls(formula = ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF,
data = pdata, effect = "individual", model = "within")
Balanced Panel: n = 25, T = 9, N = 225
Residuals:
Min. 1st Qu. Median 3rd Qu. Max.
-0.79741201 -0.16073420 0.00293314 0.15982636 0.77250433
Coefficients:
Estimate Std. Error z-value Pr(>|z|)
Lern 1.40414354 0.20929707 6.7089 1.962e-11 ***
CR -0.07766684 0.01922601 -4.0397 5.353e-05 ***
SIZE 0.56395314 0.06623492 8.5144 < 2.2e-16 ***
CAP 0.08787694 0.01198686 7.3311 2.283e-13 ***
LGR 0.00042327 0.00126436 0.3348 0.7378
GDPG 0.00890537 0.00669216 1.3307 0.1833
INF 0.04364214 0.00820647 5.3180 1.049e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Total Sum of Squares: 105.33
Residual Sum of Squares: 12.682
Multiple R-squared: 0.8796
In kết quả mô hình FEM và FEM_DK
library(stargazer)
library(sandwich)
library(lmtest)
# 1. Tính SE cho FEM Gốc
se_goc <- sqrt(diag(vcov(femmethod)))
# 2. Tính SE cho FEM Arellano (Clustered Robust)
se_arellano <- sqrt(diag(vcovHC(femmethod, method = "arellano")))
# 3. Tính SE cho FEM Driscoll-Kraay (SCC)
se_scc <- sqrt(diag(vcovSCC(femmethod, type = "HC1")))
# 4. In bảng so sánh
stargazer(femmethod, femmethod, femmethod,
type = "text",
title = "So sánh các phương pháp điều chỉnh sai số chuẩn cho FEM",
column.labels = c("FEM Gốc", "FEM (Arellano)", "FEM (SCC/DK)"),
se = list(se_goc, se_arellano, se_scc),
digits = 4)
So sánh các phương pháp điều chỉnh sai số chuẩn cho FEM
================================================================
Dependent variable:
--------------------------------------
ROA
FEM Gốc FEM (Arellano) FEM (SCC/DK)
(1) (2) (3)
----------------------------------------------------------------
Lern 1.3565*** 1.3565*** 1.3565***
(0.2460) (0.3635) (0.1880)
CR -0.0869*** -0.0869*** -0.0869***
(0.0255) (0.0331) (0.0214)
SIZE 0.6626*** 0.6626*** 0.6626***
(0.0570) (0.0760) (0.0478)
CAP 0.0940*** 0.0940*** 0.0940***
(0.0103) (0.0145) (0.0142)
LGR 0.0041** 0.0041** 0.0041*
(0.0020) (0.0017) (0.0024)
GDPG 0.0046 0.0046 0.0046
(0.0091) (0.0070) (0.0067)
INF 0.0561*** 0.0561*** 0.0561***
(0.0179) (0.0092) (0.0113)
----------------------------------------------------------------
Observations 225 225 225
R2 0.7498 0.7498 0.7498
Adjusted R2 0.7096 0.7096 0.7096
F Statistic (df = 7; 193) 82.6352*** 82.6352*** 82.6352***
================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
# Nếu bạn chưa cài, hãy chạy:
# install.packages("texreg")
# 1. Trích xuất hệ số từ fgls_model
# Trích xuất hệ số (Coefficients)
fgls_coef <- coef(fgls_model)
# Trích xuất sai số chuẩn (SE) trực tiếp từ ma trận hiệp phương sai
fgls_se <- sqrt(diag(vcov(fgls_model)))
# Kiểm tra lại xem chúng đã là vector chưa
print(fgls_coef)
Lern CR SIZE CAP LGR GDPG
1.404143541 -0.077666839 0.563953141 0.087876941 0.000423268 0.008905373
INF
0.043642141
print(fgls_se)
Lern CR SIZE CAP LGR GDPG
0.209297073 0.019226012 0.066234918 0.011986857 0.001264360 0.006692156
INF
0.008206470
# 2. Sử dụng stargazer với mô hình 'dummy' (giả)
# Chúng ta sẽ in một bảng 'lm' giả có cùng số hệ số để stargazer vẽ khung
# Sau đó dùng tham số override để ghi đè số liệu thật vào
dummy_model <- lm(ROA ~ Lern + CR + SIZE + CAP + LGR + GDPG + INF, data = pdata)
stargazer(dummy_model, dummy_model, dummy_model, dummy_model,
type = "text",
title = "So sánh 4 mô hình (Kết quả đã được ghi đè)",
column.labels = c("FEM Gốc", "FEM (Arellano)", "FEM (SCC)", "FEM (FGLS)"),
# Ghi đè hệ số thật (Estimate)
coef = list(coef(femmethod), coef(femmethod), coef(femmethod), fgls_coef),
# Ghi đè sai số chuẩn thật (SE)
se = list(se_goc, se_arellano, se_scc, fgls_se),
digits = 4)
So sánh 4 mô hình (Kết quả đã được ghi đè)
==============================================================================
Dependent variable:
-----------------------------------------------
ROA
FEM Gốc FEM (Arellano) FEM (SCC) FEM (FGLS)
(1) (2) (3) (4)
------------------------------------------------------------------------------
Lern 1.3565*** 1.3565*** 1.3565*** 1.4041***
(0.2460) (0.3635) (0.1880) (0.2093)
CR -0.0869*** -0.0869*** -0.0869*** -0.0777***
(0.0255) (0.0331) (0.0214) (0.0192)
SIZE 0.6626*** 0.6626*** 0.6626*** 0.5640***
(0.0570) (0.0760) (0.0478) (0.0662)
CAP 0.0940*** 0.0940*** 0.0940*** 0.0879***
(0.0103) (0.0145) (0.0142) (0.0120)
LGR 0.0041** 0.0041** 0.0041* 0.0004
(0.0020) (0.0017) (0.0024) (0.0013)
GDPG 0.0046 0.0046 0.0046 0.0089
(0.0091) (0.0070) (0.0067) (0.0067)
INF 0.0561*** 0.0561*** 0.0561*** 0.0436***
(0.0179) (0.0092) (0.0113) (0.0082)
Constant
------------------------------------------------------------------------------
Observations 225 225 225 225
R2 0.6036 0.6036 0.6036 0.6036
Adjusted R2 0.5908 0.5908 0.5908 0.5908
Residual Std. Error (df = 217) 0.4387 0.4387 0.4387 0.4387
F Statistic (df = 7; 217) 47.1966*** 47.1966*** 47.1966*** 47.1966***
==============================================================================
Note: *p<0.1; **p<0.05; ***p<0.01