Dalam penelitian ini ingin diketahui faktor-faktor yang memengaruhi kinerja keuangan perusahaan yang diproksikan dengan Return on Assets (ROA) pada perusahaan yang menjadi sampel penelitian selama periode pengamatan (2009 - 2022). Analisis dilakukan menggunakan pendekatan data panel untuk menangkap pengaruh karakteristik perusahaan secara individual serta perubahan kondisi dari waktu ke waktu.
Penelitian ini bertujuan memberikan gambaran mengenai bagaimana ukuran perusahaan dan kemampuan likuiditas memengaruhi efektivitas perusahaan dalam menghasilkan laba dari aset yang dimiliki. Hasil penelitian diharapkan dapat menjadi referensi bagi manajemen perusahaan, investor, dan pengambil keputusan dalam mengevaluasi strategi pengelolaan aset dan struktur keuangan agar kinerja perusahaan menjadi lebih optimal dan berkelanjutan.
Variabel yang digunakan:
Y : Return on Assets (ROA) Menggambarkan kemampuan perusahaan menghasilkan laba bersih dari seluruh aset yang dimiliki, sebagai indikator utama kinerja keuangan.
X1 : Firm Size (ln_MarketCap) Diproksikan dengan logaritma natural dari Market Capitalization. Variabel ini mencerminkan besar kecilnya perusahaan. Perusahaan yang lebih besar umumnya memiliki akses pendanaan lebih luas, skala ekonomi, dan stabilitas operasional yang lebih tinggi.
X2 : Current Ratio (CR) Menggambarkan tingkat likuiditas perusahaan, yaitu kemampuan perusahaan memenuhi kewajiban jangka pendek menggunakan aset lancar yang dimiliki.
Dengan menggunakan ketiga variabel tersebut, penelitian ini menganalisis sejauh mana ukuran perusahaan dan likuiditas berperan dalam meningkatkan profitabilitas perusahaan yang tercermin pada ROA melalui pendekatan regresi data panel.
library(plm)
library(car)
library(readr)
library(tseries)
library(lmtest)
library(writexl)
library(dplyr)
suppressMessages({
df <- read_csv2("C:/Users/user/Downloads/Financial Statements.csv",
show_col_types = FALSE)
})
names(df) <- make.names(names(df))
#Rename Variabel
df <- df %>%
rename(
MarketCap = Market.Cap.in.B.USD.,
CR = Current.Ratio,
)
#Ubah ke numerik
df <- df %>%
mutate(across(c(MarketCap, CR, ROA),
as.numeric))
#Tampilan Data
summary(df)
## Year Company Category MarketCap
## Min. :2009 Length:159 Length:159 Min. : 0.04
## 1st Qu.:2012 Class :character Class :character 1st Qu.: 40.91
## Median :2016 Mode :character Mode :character Median : 110.86
## Mean :2016 Mean : 320.03
## 3rd Qu.:2019 3rd Qu.: 346.87
## Max. :2022 Max. :2913.28
## NA's :1
## CR ROA
## Min. : 0.2205 Min. :-23.7236
## 1st Qu.: 1.0000 1st Qu.: 0.8065
## Median : 1.3375 Median : 6.5301
## Mean : 2.0277 Mean : 7.7012
## 3rd Qu.: 2.4613 3rd Qu.: 14.6989
## Max. :10.6178 Max. : 31.1541
##
df_3var <- df %>%
select(ROA, MarketCap, CR)
print(df_3var)
## # A tibble: 159 × 3
## ROA MarketCap CR
## <dbl> <dbl> <dbl>
## 1 28.3 2067. 0.879
## 2 27.0 2913. 1.07
## 3 17.7 2256. 1.36
## 4 16.3 1305. 1.54
## 5 16.3 749. 1.13
## 6 12.9 869. 1.28
## 7 14.2 618. 1.35
## 8 18.4 587. 1.11
## 9 17.0 647. 1.08
## 10 17.9 505. 1.68
## # ℹ 149 more rows
#Buat log variabel data (Data preparation)
df <- df %>%
filter(MarketCap > 0) %>%
mutate(
ln_MarketCap = log(MarketCap),
)
#Set data panel
pdata <- pdata.frame(df, index = c("Company", "Year"))
# Formula umum
form <- ROA ~ ln_MarketCap + CR
# ==== 2) ESTIMASI MODEL CE, FE, RE ====
mod_ce <- plm(form, data = pdata, model = "pooling")
mod_fe <- plm(form, data = pdata, model = "within", effect = "individual")
mod_re <- plm(form, data = pdata, model = "random", effect = "individual")
print(summary(mod_ce))
## Pooling Model
##
## Call:
## plm(formula = form, data = pdata, model = "pooling")
##
## Unbalanced Panel: n = 12, T = 8-14, N = 158
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -13.1438 -3.4120 -1.0723 3.6378 13.6464
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) -10.18684 1.30650 -7.7971 8.650e-13 ***
## ln_MarketCap 3.12723 0.26048 12.0059 < 2.2e-16 ***
## CR 1.71818 0.27856 6.1681 5.758e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 12259
## Residual Sum of Squares: 5073.8
## R-Squared: 0.58611
## Adj. R-Squared: 0.58077
## F-statistic: 109.748 on 2 and 155 DF, p-value: < 2.22e-16
print(summary(mod_fe))
## Oneway (individual) effect Within Model
##
## Call:
## plm(formula = form, data = pdata, effect = "individual", model = "within")
##
## Unbalanced Panel: n = 12, T = 8-14, N = 158
##
## Residuals:
## Min. 1st Qu. Median 3rd Qu. Max.
## -12.77510 -1.80842 -0.06464 1.77782 12.30023
##
## Coefficients:
## Estimate Std. Error t-value Pr(>|t|)
## ln_MarketCap 1.93105 0.37572 5.1396 8.819e-07 ***
## CR 1.48690 0.38372 3.8750 0.0001614 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 3156.9
## Residual Sum of Squares: 2442.5
## R-Squared: 0.22629
## Adj. R-Squared: 0.15644
## F-statistic: 21.0577 on 2 and 144 DF, p-value: 9.5014e-09
print(summary(mod_re))
## Oneway (individual) effect Random Effect Model
## (Swamy-Arora's transformation)
##
## Call:
## plm(formula = form, data = pdata, effect = "individual", model = "random")
##
## Unbalanced Panel: n = 12, T = 8-14, N = 158
##
## Effects:
## var std.dev share
## idiosyncratic 16.962 4.118 0.472
## individual 18.980 4.357 0.528
## theta:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.6830 0.7550 0.7550 0.7488 0.7550 0.7550
##
## Residuals:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -13.7357 -2.0251 -0.4141 0.0245 2.2736 12.1462
##
## Coefficients:
## Estimate Std. Error z-value Pr(>|z|)
## (Intercept) -5.88132 2.11543 -2.7802 0.005433 **
## ln_MarketCap 2.21760 0.34188 6.4864 8.792e-11 ***
## CR 1.57573 0.35618 4.4240 9.690e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Total Sum of Squares: 3724.9
## Residual Sum of Squares: 2644.5
## R-Squared: 0.29007
## Adj. R-Squared: 0.28091
## Chisq: 65.1761 on 2 DF, p-value: 7.0339e-15
# ==== 3) PEMILIHAN MODEL ====
## 3a. Chow test: FE vs CE
Uji Chow digunakan untuk memilih model terbaik untuk analisis regresi antara Fixed Effect Model (FEM) dan Common Effect Model (CEM).
Hipotesis:
H0 : Model CEM
H1 : Model FEM
H0 ditolak jika p-value < 0.05
cat("\n--- Uji Chow (FE vs CE) ---\n")
##
## --- Uji Chow (FE vs CE) ---
print(pFtest(mod_fe, mod_ce))
##
## F test for individual effects
##
## data: form
## F = 14.103, df1 = 11, df2 = 144, p-value < 2.2e-16
## alternative hypothesis: significant effects
Pada hasil diatas, didapatkan p-value < 0.05, maka dapat dibuat keputusan tolak H0. Oleh karena itu, model FEM lebih baik digunakan daripada model CEM.
## 3b. Breusch–Pagan LM: RE vs CE
Uji Breusch Pagan digunakan untuk menentukan apakah ada efek waktu, individu, atau tidak ada efek apapun dalam model.
H0 : Tidak terdapat efek
H1 : Terdapat efek
Tolak H0 jika p-value < 0.05
cat("\n--- Uji Breusch–Pagan LM (RE vs CE) ---\n")
##
## --- Uji Breusch–Pagan LM (RE vs CE) ---
print(plmtest(mod_ce, type = "bp"))
##
## Lagrange Multiplier Test - (Breusch-Pagan)
##
## data: form
## chisq = 207.04, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects
Karena p-value yang dihasilkan < 0.05 dapat disimpulkan bahwa terdapat efek dua arah pada model yang akan terbentuk menggunakan REM. Namun, pengujian efek perlu dilanjutkan untuk mengetahui terkait efek yang memengaruhi secara detail dengan menguji efek individual dan efek waktu.
## 3c. Hausman: FE vs RE
Uji Hausman digunakan untuk memilih model terbaik untuk analisis regresi antara Fixed Effect Model (FEM) dan Random Effect Model (REM).
Hipotesis:
H0 : Model REM
H1 : Model FEM
H0 ditolak jika p-value < 0.05
cat("\n--- Uji Hausman (FE vs RE) ---\n")
##
## --- Uji Hausman (FE vs RE) ---
print(phtest(mod_fe, mod_re))
##
## Hausman Test
##
## data: form
## chisq = 3.4429, df = 2, p-value = 0.1788
## alternative hypothesis: one model is inconsistent
Pada hasil diatas, didapatkan p-value > 0.05, maka dapat dibuat keputusan gagal tolak H0. Oleh karena itu, model REM lebih baik digunakan daripada model FEM.
###Uji Asumsi
## 4a. Multikolinearitas (VIF) pada model OLS biasa (tanpa efek)
cat("\n--- VIF ---\n")
##
## --- VIF ---
ols_for_vif <- lm(form, data = as.data.frame(pdata))
print(vif(ols_for_vif)) # aturan praktis: < 10 aman
## ln_MarketCap CR
## 1.039676 1.039676
Variabel ukuran perusahaan (ln_MarketCap) dan likuiditas (CR) dapat digunakan secara bersamaan dalam model untuk menjelaskan ROA, karena tidak terjadi hubungan linear yang kuat antar keduanya.
## 4b. Normalitas residual RE (Jarque–Bera)
cat("\n--- Normalitas Residual (Jarque–Bera) ---\n")
##
## --- Normalitas Residual (Jarque–Bera) ---
res_re <- residuals(mod_re)
print(jarque.bera.test(res_re))
##
## Jarque Bera Test
##
## data: res_re
## X-squared = 7.9939, df = 2, p-value = 0.01837
Berdasarkan uji Jarque–Bera diperoleh p-value sebesar 0,01837 (< 0,05) yang menunjukkan bahwa residual tidak berdistribusi normal, namun dalam analisis regresi data panel normalitas residual bukan merupakan asumsi utama yang harus dipenuhi agar estimator tetap konsisten dan tidak bias, terutama ketika jumlah observasi cukup besar seperti pada penelitian ini. Ketidaknormalan residual juga lazim terjadi pada data keuangan perusahaan karena adanya perbedaan karakteristik dan skala antarperusahaan, sehingga kondisi ini masih dapat ditoleransi. Selain itu, untuk memastikan hasil inferensi tetap reliabel, model telah dikoreksi menggunakan robust standard error Driscoll–Kraay yang mampu mengatasi pelanggaran asumsi seperti heteroskedastisitas dan autokorelasi, sehingga model tetap layak digunakan untuk penarikan kesimpulan.
## 4c. Heteroskedastisitas (Breusch–Pagan) pada model panel
cat("\n--- Heteroskedastisitas (BP) ---\n")
##
## --- Heteroskedastisitas (BP) ---
print(bptest(ols_for_vif))
##
## studentized Breusch-Pagan test
##
## data: ols_for_vif
## BP = 1.8245, df = 2, p-value = 0.4016
Berdasarkan hasil uji Breusch–Pagan diperoleh nilai p-value sebesar 0,4016 (> 0,05), sehingga gagal menolak hipotesis nol. Hal ini menunjukkan bahwa tidak terdapat indikasi heteroskedastisitas pada model, atau dengan kata lain varians error dapat dianggap konstan (homoskedastis). Kondisi ini menandakan bahwa model regresi telah memenuhi salah satu asumsi klasik yang penting, sehingga estimasi koefisien yang dihasilkan dapat dianggap stabil dan tidak mengalami gangguan akibat perbedaan varians residual antarobservasi.
## 4d. Autokorelasi (Breusch–Godfrey) pada FE (order 1)
cat("\n--- Autokorelasi (BG, orde 1) ---\n")
##
## --- Autokorelasi (BG, orde 1) ---
print(pbgtest(mod_fe, order = 1))
##
## Breusch-Godfrey/Wooldridge test for serial correlation in panel models
##
## data: form
## chisq = 13.671, df = 1, p-value = 0.0002178
## alternative hypothesis: serial correlation in idiosyncratic errors
Berdasarkan hasil Breusch–Godfrey/Wooldridge test diperoleh nilai p-value sebesar 0,0002178 (< 0,05), sehingga hipotesis nol tentang tidak adanya autokorelasi ditolak.Kondisi ini menandakan adanya pelanggaran asumsi independensi residual, sehingga estimasi standar error koefisien regresi dapat menjadi tidak tepat jika tidak diperbaiki dengan metode robust atau model yang memperhitungkan struktur autokorelasi.
# Standard error Driscoll–Kraay (HAC)
V_re_dk <- vcovSCC(mod_re, type = "HC0", maxlag = 1)
re_dk <- coeftest(mod_re, vcov. = V_re_dk)
print(re_dk)
##
## t test of coefficients:
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.88132 2.97189 -1.9790 0.049590 *
## ln_MarketCap 2.21760 0.39166 5.6621 7.061e-08 ***
## CR 1.57573 0.48636 3.2399 0.001463 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Setelah model Random Effect (REM) dihitung menggunakan standard error Driscoll–Kraay untuk mengoreksi potensi pelanggaran asumsi klasik (heteroskedastisitas, autokorelasi, dan cross-sectional dependence), diperoleh koefisien sebagai berikut:
Intercept = -5,881 dengan p-value 0,0496 → signifikan pada tingkat 5%.
ln_MarketCap = 2,218 dengan p-value 7,061e-08 → sangat signifikan. Artinya, peningkatan 1% pada MarketCap ceteris paribus akan meningkatkan ROA sekitar 2,22 unit secara log-linear.
CR = 1,576 dengan p-value 0,00146 → signifikan pada tingkat 1%. Ini menunjukkan bahwa likuiditas perusahaan yang lebih tinggi berasosiasi positif dengan ROA.
Dengan penggunaan Driscoll–Kraay standard error, nilai standar error lebih konservatif dibandingkan REM biasa, sehingga estimasi tetap valid meskipun terdapat autokorelasi, heteroskedastisitas, dan ketergantungan antar perusahaan. Secara keseluruhan, model REM yang telah diperbaiki dengan HAC dapat digunakan untuk menarik kesimpulan kausalitas antara ukuran perusahaan (MarketCap), likuiditas (CR), dan profitabilitas (ROA) secara lebih andal.
\[ y_{it} = -5.881 + 2.218 x_{1} + 1.576 x_{2} + u_{it} \] Persamaan tersebut dapat diinterpretasikan dengan mempertimbangkan adanya efek individual perusahaan yang bersifat acak. Nilai konstanta −5,881 menunjukkan bahwa ketika Firm Size (ln_MarketCap) dan Current Ratio bernilai nol, ROA diperkirakan sebesar −5,881, meskipun kondisi ini kurang bermakna secara ekonomi. Koefisien Firm Size sebesar 2,218 mengindikasikan bahwa setiap peningkatan 1 satuan ln(MarketCap), dengan Current Ratio konstan dan dengan mempertimbangkan variasi acak antar perusahaan, akan meningkatkan ROA sebesar 2,218 poin, sehingga perusahaan yang lebih besar cenderung memiliki kinerja keuangan yang lebih baik. Sementara itu, koefisien Current Ratio sebesar 1,576 menunjukkan bahwa setiap kenaikan 1 unit likuiditas perusahaan, dengan Firm Size tetap, akan meningkatkan ROA sebesar 1,576 poin. Secara keseluruhan, dalam kerangka REM yang mengasumsikan perbedaan karakteristik individu perusahaan bersifat acak dan tidak berkorelasi dengan variabel penjelas, ukuran perusahaan dan likuiditas terbukti berpengaruh positif terhadap profitabilitas perusahaan selama periode pengamatan.