Overview

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.

Menyiapkan Library

library(plm)
library(car)
library(readr)
library(tseries)
library(lmtest)
library(writexl)
library(dplyr)

Data Preparation

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 

Estimasi Model CE, FE, RE

# ==== 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

Pemilihan Model

# ==== 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.

Model Akhir

\[ 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.