Library (Package yang digunakan)

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.6     ✓ dplyr   1.0.8
## ✓ tidyr   1.2.0     ✓ stringr 1.4.0
## ✓ readr   2.1.2     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggplot2)
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
library(foreign)  
library(car)      
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
library(gvlma)   
library(effects) 
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
library(sjPlot)  
## Registered S3 method overwritten by 'parameters':
##   method                         from      
##   format.parameters_distribution datawizard
## Learn more about sjPlot with 'browseVignettes("sjPlot")'.
library(relaimpo) 
## Loading required package: boot
## 
## Attaching package: 'boot'
## The following object is masked from 'package:car':
## 
##     logit
## Loading required package: survey
## Loading required package: grid
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Loading required package: survival
## 
## Attaching package: 'survival'
## The following object is masked from 'package:boot':
## 
##     aml
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
## Loading required package: mitools
## This is the global version of package relaimpo.
## If you are a non-US user, a version with the interesting additional metric pmvd is available
## from Ulrike Groempings web site at prof.beuth-hochschule.de/groemping.
library(ggplot2)
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(readxl)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(agricolae)
library(tseries) 
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(corrplot)
## corrplot 0.92 loaded

Import Data

library(readxl)
ratio<-read_excel("~/Downloads/AMAG.xlsx")
head(ratio)
## # A tibble: 6 × 6
##   Date      Price   DER   PBV    PE   EPS
##   <chr>     <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2017 (Q1)   488  1.10   1.4  18.7  6   
## 2 2017 (Q2)   438  1.12   1.2  18.6  6.39
## 3 2017 (Q3)   400  1.19   1.1  20.5  8.31
## 4 2017 (Q4)   380  1.10   1    23.3  3.93
## 5 2018 (Q1)   364  1.32   1    14.8  2.23
## 6 2018 (Q2)   354  1.44   1    17    4.45
summary(ratio)
##      Date               Price            DER             PBV        
##  Length:16          Min.   :194.0   Min.   :1.095   Min.   :0.5000  
##  Class :character   1st Qu.:296.0   1st Qu.:1.287   1st Qu.:0.8000  
##  Mode  :character   Median :321.0   Median :1.405   Median :0.9000  
##                     Mean   :332.5   Mean   :1.384   Mean   :0.9062  
##                     3rd Qu.:368.0   3rd Qu.:1.488   3rd Qu.:1.0000  
##                     Max.   :488.0   Max.   :1.717   Max.   :1.4000  
##        PE             EPS        
##  Min.   :12.10   Min.   :-5.180  
##  1st Qu.:18.20   1st Qu.: 3.190  
##  Median :19.75   Median : 4.410  
##  Mean   :25.41   Mean   : 4.146  
##  3rd Qu.:27.23   3rd Qu.: 6.048  
##  Max.   :56.40   Max.   : 8.330

Independen & Dependen Variabel

y=ratio$Price #dependen
x1= ratio$DER #independen
x2= ratio$PBV #independen
x3= ratio$PE #independen
x4= ratio$EPS #independen

Visualisasi Data

Hubungan DER dengan Harga Closing Saham

scat1=ggplot(ratio,aes(x1,y))+geom_point()+geom_smooth(method="lm",se=T)

scat1
## `geom_smooth()` using formula 'y ~ x'

Berdasarkan pola diatas dimana titik-titik berada pada membentuk suatu garis lurus, diduga variabel DER memiliki hubungan dengan Variabel Harga Closing Saham.

Hubungan PBV dengan Harga Closing Saham

scat2=ggplot(ratio,aes(x2,y))+geom_point()+geom_smooth(method="lm",se=T)

scat2
## `geom_smooth()` using formula 'y ~ x'

Berdasarkan pola diatas dimana titik-titik berada pada membentuk suatu garis lurus, diduga variabel PBV memiliki hubungan dengan Variabel Harga Closing Saham.

Hubungan PE dengan Harga Closing Saham

scat3=ggplot(ratio,aes(x3,y))+geom_point()+geom_smooth(method="lm",se=T)

scat3
## `geom_smooth()` using formula 'y ~ x'

Berdasarkan pola diatas dimana titik-titik berada di sekitar suatu garis lurus, diduga variabel PE memiliki hubungan dengan Variabel Harga Closing Saham.

Hubungan EPS dengan Harga Closing Saham

scat4=ggplot(ratio,aes(x4,y))+geom_point()+geom_smooth(method="lm",se=T)

scat4
## `geom_smooth()` using formula 'y ~ x'

Berdasarkan pola diatas dimana titik-titik berada di sekitar suatu garis lurus, diduga variabel EPS memiliki hubungan dengan Variabel Harga Closing Saham.

Model Linier

Pemodelan regresi linier berganda akan dilakukan dengan membuat model yang mencakup keseluruhan variabel independent (DER, PBV, PE, EPS).

model <- lm(y ~ x1 + x2 + x3 + x4, data = ratio)
summary(model)
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4, data = ratio)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -12.543  -4.662   1.001   3.745  10.683 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  80.6323    31.9526   2.524   0.0283 *  
## x1          -28.5559    16.1118  -1.772   0.1040    
## x2          314.5616    13.2177  23.798 8.21e-11 ***
## x3            0.1589     0.1515   1.049   0.3166    
## x4            0.5466     0.6530   0.837   0.4204    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.985 on 11 degrees of freedom
## Multiple R-squared:  0.9915, Adjusted R-squared:  0.9885 
## F-statistic: 322.3 on 4 and 11 DF,  p-value: 2.575e-11
vif(model)
##       x1       x2       x3       x4 
## 2.105033 2.053259 1.045200 1.006956

Pengecekan Model

Dalam membangun model regresi linier, metode estimasi yang digunakan adalah dengan metode estimasi kuadrat terkecil (ordinary least square), yaitu dengan meminimumkan jumlah kuadrat residual.

Terdapat asumsi yang harus diuji dalam membangun model regresi linier tersebut. Asumsi model tersebut sering juga disebut sebagai asumsi klasik yang terdiri atas:

1. Uji Normalitas Residual

2. Uji Linearitas

3. Uji Homoskedastisitas (Asumsi Model yang Bersifat Konstan)

4. Uji Autokorelasi (Uji Asumsi Tidak Adanya Korelasi dalam Model)

5. Uji Multikolinieritas antar Variabel Independen

Uji Normalitas

Uji normalitas akan diuji dengan Kolmogorov-Smirnov Test dan Jarque Bera

Uji Kolmogorov-Smirnov

ks.test(model$residuals, ecdf(model$residuals))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  model$residuals
## D = 0.0625, p-value = 1
## alternative hypothesis: two-sided

H0: model data berdistribusi normal; H1: model data tidak berdistribusi normal

Tingkat signifikansi = 0.05

Statistik Uji: p-value = 1

Keputusan: Karena p-value (1) > alpha (0.05), maka gagal tolak H0

Kesimpulan: Model data berdistribusi normal.

Uji Jarque Bera

# analisis residual
residual=resid(model) #menampilkan residual dari model

jarque.bera.test(residual) #normalitas
## 
##  Jarque Bera Test
## 
## data:  residual
## X-squared = 0.55522, df = 2, p-value = 0.7576

H0: Residual berdistribusi normal; H1: Residual tidak berdistribusi normal

Tingkat signifikansi = 0.05

Statistik Uji: p-value = 0.7576

Keputusan: Karena p-value (0.7576) > alpha (0.05), maka gagal tolak H0

Kesimpulan: Residual berdistribusi normal.

QQ Plot

qqPlot(residual,distribution="norm",main="Normal QQ Plot") #normalitas dengan plot

## [1] 10 14

qqplot menunjukkan residual ada di sepanjang garis 45 derajat, sehingga mengindikasikan bahwa residual menyebar normal.

Dilihat dari Uji Kolmogorov-Smirnov dan Jarque Bera, dan qqplot, maka dapat disimpulkan bahwa model yang dibuat memenuhi asumsi kenormalan.

Uji Linearitas

Asumsi linieritas dapat diperiksa menggunakan Normal QQ Plot

qqPlot(residual,distribution="norm",main="Normal QQ Plot") #normalitas dengan plot

## [1] 10 14

qqplot menunjukkan residual ada di sepanjang garis 45 derajat, sehingga mengindikasikan bahwa residual menyebar normal, artinya model tersebut sudah linearitas dalam parameter.

# Ho : The model is correct linearly specified

linearity <- resettest(model)
linearity
## 
##  RESET test
## 
## data:  model
## RESET = 0.96253, df1 = 2, df2 = 9, p-value = 0.418

H0: model data linier; H1: model data tidak linier

Tingkat signifikansi = 0.05

Statistik Uji: p-value = 0.418

Keputusan: Karena p-value (0.418) > alpha (0.05), maka gagal tolak H0

Kesimpulan: Model data linier.

Kehomogenan Ragam (Homoskedastisitas)

Untuk menguji homoskedastisitas akan digunakan uji Breusch Pagan

bptest(model, data=ratio)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 0.60466, df = 4, p-value = 0.9625

H0: Ragam homogen; H1: Ragam tidak homogen

Tingkat signifikansi = 0.05

Statistik Uji: p-value = 0.9625

Keputusan: Karena p-value (0.9625) > alpha (0.05), maka gagal tolak H0

Kesimpulan: Model menunjukkan ragam homogen dan asumsi homoskedastisitas terpenuhi.

Uji Autokorelasi

Uji autokorelasi akan diuji dengan uji Durbin Watson

dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 2.0474, p-value = 0.2955
## alternative hypothesis: true autocorrelation is greater than 0

H0: Tidak ada autokorelasi pada model; H1: ada autokorelasi pada model

Tingkat signifikansi = 0.05

Statistik Uji: p-value = 0.2955

Keputusan: Karena p-value (0.2955) > alpha (0.05), maka gagal tolak H0

Kesimpulan: Tidak ada autokorelasi pada model.

Uji Multikolinearitas

Kolinieritas akan diuji dengan VIF (Variance Inflation Factor). Jika, nilai VIF > 10, maka terjadi multikolinieritas.

vif(model)
##       x1       x2       x3       x4 
## 2.105033 2.053259 1.045200 1.006956

Keempat variabel (DER, PBV, PE, EPS) memiliki nilai VIF < 10 dan mengindikasikan bahwa tidak ada multikolinieritas.

Kesimpulan model berdasarkan beberapa uji yang dilakukan:

1. Memenuhi asumsi kenormalan (normalitas residual)

2. Model sudah linearitas dalam parameter

3. Model menunjukkan ragam homogen dan asumsi homoskedastisitas terpenuhi

4. Tidak ada autokorelasi

5. Tidak ada multikolinieritas

Matriks Korelasi

Uji variabel mana yang berkorelasi dengan menggunakan matrik korelasi.

Perhitungan Matriks Korelasi

fundamental <- ratio[c(2,3,4,5,6)]

mk <- cor(fundamental)

round(mk,2) #Membulatkan 2 angka di belakang koma
##       Price   DER   PBV    PE   EPS
## Price  1.00 -0.74  0.99 -0.10  0.05
## DER   -0.74  1.00 -0.72  0.19 -0.04
## PBV    0.99 -0.72  1.00 -0.12  0.03
## PE    -0.10  0.19 -0.12  1.00 -0.08
## EPS    0.05 -0.04  0.03 -0.08  1.00

Visualisasi Matriks Korelasi

corrplot(mk, type="lower",
         order = "hclust", # mengurutkan berdasarkan hierarchical clustering
         tl.col= "black", # warna tulisan
         addCoef.col = "black", # tambahkan koefisien korelasi
         diag=FALSE, #menyembunyikan koefisien pada diagonal
         tl.srt= 45, # kemiringan tulisan 45 derajat
         method = "circle") # Bentuk Visualisasi

Terlihat dalam matriks korelasi bahwa terdapat korelasi yang tinggi antara PBV dan Price sebesar 0.99

Persamaan Regresi

summary(model)
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4, data = ratio)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -12.543  -4.662   1.001   3.745  10.683 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  80.6323    31.9526   2.524   0.0283 *  
## x1          -28.5559    16.1118  -1.772   0.1040    
## x2          314.5616    13.2177  23.798 8.21e-11 ***
## x3            0.1589     0.1515   1.049   0.3166    
## x4            0.5466     0.6530   0.837   0.4204    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.985 on 11 degrees of freedom
## Multiple R-squared:  0.9915, Adjusted R-squared:  0.9885 
## F-statistic: 322.3 on 4 and 11 DF,  p-value: 2.575e-11
vif(model)
##       x1       x2       x3       x4 
## 2.105033 2.053259 1.045200 1.006956

Persamaan Regresi

Persamaan Regresi = 80.6323 - 28.5559 DER + 314.5616 PBV + 0.1589 PE + 0.5466 EPS

Interpretasi: Variabel independen yang paling signifikan terhadap Harga Closing Saham adalah PBV(X2). Setiap kenaikan satu satuan PBV menyebabkan Harga Closing AMAG naik sebesar 314.5616 dengan mengganggap variabel lain konstan.

Multiple R-squared = 0.9915 yang artinya Harga Closing Saham AMAG dapat dijelaskan oleh variabel independen sebesar 99.15% sedangkan 0.85% dijelaskan oleh faktor lain diluar model.