Analisis Pengaruh Harga Pembukaan dan Range Harga terhadap Return Harga Minyak Sawit Berjangka Menggunakan Regresi Linier Berganda

Latar belakang

Minyak sawit merupakan salah satu komoditas penting dalam perdagangan internasional yang memiliki peran besar dalam perekonomian, khususnya di negara penghasil seperti Indonesia. Harga minyak sawit berjangka sering mengalami fluktuasi akibat berbagai faktor pasar, sehingga diperlukan analisis untuk memahami pergerakan harga tersebut. Salah satu metode yang dapat digunakan adalah regresi linier berganda untuk mengetahui pengaruh beberapa variabel harga terhadap return minyak sawit berjangka. Dalam analisis ini digunakan data historis yang meliputi harga penutupan, harga pembukaan, harga tertinggi, dan harga terendah, dengan return sebagai variabel dependen serta range harga dan harga pembukaan sebagai variabel independen.

Data

Data yang digunakan merupakan data historis harga minyak sawit berjangka yang terdiri dari 196 observasi. Variabel yang terdapat pada data antara lain:

Dari data tersebut dibuat dua variabel tambahan yaitu:

Model Persamaan Regresi

Model regresi yang digunakan adalah regresi linier berganda dengan bentuk:

Return=β0​+β1​Range+β2​Pembukaan+ϵ

Berdasarkan hasil estimasi diperoleh persamaan regresi sebagai berikut:

Return=−0.05006+0.0000158(Range)+0.0000117(Pembukaan)

Membaca data

data <- read.csv("C://Users//kvnan//Downloads//Data Historis Minyak Sawit Berjangka.csv")

Melihat ukuran data

dim(data)
## [1] 196   7

Melihat beberapa baris pertama

head(data)
##      Tanggal Terakhir Pembukaan Tertinggi Terendah   Vol. Perubahan.
## 1 05/03/2026 4.367,00  4.219,00  4.373,00 4.201,00 61,93K      3,80%
## 2 04/03/2026 4.207,00  4.159,00  4.268,00 4.132,00 63,33K      0,67%
## 3 03/03/2026 4.179,00  4.188,00  4.205,00 4.143,00 36,42K     -0,17%
## 4 02/03/2026 4.186,00  4.065,00  4.188,00 4.060,00 87,76K      3,56%
## 5 26/02/2026 4.042,00  4.017,00  4.055,00 4.005,00 32,48K      0,92%
## 6 25/02/2026 4.005,00  4.055,00  4.067,00 3.997,00 30,71K     -1,18%

Ringkasan data

summary(data)
##    Tanggal            Terakhir          Pembukaan          Tertinggi        
##  Length:196         Length:196         Length:196         Length:196        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##    Terendah             Vol.            Perubahan.       
##  Length:196         Length:196         Length:196        
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character

Membersihkan data numerik

clean_number <- function(x)
  {
  x <- gsub("\\.", "", x)
  x <- gsub(",", ".", x)
  as.numeric(x)
}

data$Terakhir  <- clean_number(data$Terakhir) 
data$Pembukaan <- clean_number(data$Pembukaan) 
data$Tertinggi <- clean_number(data$Tertinggi) 
data$Terendah  <- clean_number(data$Terendah)

Cek kembali data setelah cleaning

summary(data)
##    Tanggal             Terakhir      Pembukaan      Tertinggi       Terendah   
##  Length:196         Min.   :3728   Min.   :3725   Min.   :3796   Min.   :3696  
##  Class :character   1st Qu.:4036   1st Qu.:4036   1st Qu.:4069   1st Qu.:3998  
##  Mode  :character   Median :4152   Median :4153   Median :4192   Median :4106  
##                     Mean   :4179   Mean   :4183   Mean   :4222   Mean   :4142  
##                     3rd Qu.:4366   3rd Qu.:4380   3rd Qu.:4412   3rd Qu.:4327  
##                     Max.   :4591   Max.   :4650   Max.   :4664   Max.   :4541  
##      Vol.            Perubahan.       
##  Length:196         Length:196        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 

Membuat variabel baru

# membuat variabel return
data$return <- c(NA, diff(log(data$Terakhir)))

# membuat variabel range
data$range <- data$Tertinggi - data$Terendah

Menghapus NA

data <- na.omit(data)

Membuat model regresi

model_final <- lm(return ~ range + Pembukaan, data=data)

summary(model_final)
## 
## Call:
## lm(formula = return ~ range + Pembukaan, data = data)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.038091 -0.009193  0.000088  0.009722  0.042451 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -5.006e-02  2.019e-02  -2.480   0.0140 *
## range        1.581e-05  3.417e-05   0.463   0.6441  
## Pembukaan    1.170e-05  4.836e-06   2.420   0.0164 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01389 on 192 degrees of freedom
## Multiple R-squared:  0.03192,    Adjusted R-squared:  0.02183 
## F-statistic: 3.165 on 2 and 192 DF,  p-value: 0.04443

Uji normalitas

shapiro.test(residuals(model_final))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_final)
## W = 0.99783, p-value = 0.9959
res <- residuals(model_final)

hist(res,
     main="Histogram Residual",
     xlab="Residual",
     col="lightblue",
     border="black")

qqnorm(res, main="Normal Q-Q Plot")
qqline(res, col="red", lwd=2)

Uji normalitas dilakukan menggunakan Shapiro-Wilk Test dan diperoleh nilai p-value sebesar 0.9959. Karena nilai tersebut lebih besar dari 0.05, maka residual model dapat dikatakan berdistribusi normal.

Uji Multikolinearitas

library(car)
## Loading required package: carData
vif(model_final)
##     range Pembukaan 
##  1.008495  1.008495
# plot hubungan antar variabel independen
pairs(data[,c("range","Pembukaan")],
      main="Scatter Plot Antar Variabel Independen",
      pch=16)

Hasil uji multikolinearitas menggunakan Variance Inflation Factor (VIF) menunjukkan nilai sekitar 1.008 untuk masing-masing variabel independen. Nilai ini jauh lebih kecil dari batas umum 10 sehingga dapat disimpulkan bahwa tidak terdapat multikolinearitas antar variabel independen.

Uji Heteroskedastisitas

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(model_final)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_final
## BP = 0.8598, df = 2, p-value = 0.6506
plot(fitted(model_final), residuals(model_final),
     main="Residual vs Fitted",
     xlab="Nilai Prediksi",
     ylab="Residual",
     pch=16)

abline(h=0, col="red", lwd=2)

Uji heteroskedastisitas menggunakan Breusch-Pagan Test menghasilkan nilai p-value sebesar 0.6506. Karena nilai p-value lebih besar dari 0.05 maka dapat disimpulkan bahwa tidak terdapat gejala heteroskedastisitas dalam model regresi.

Uji Autokorelasi

dwtest(model_final)
## 
##  Durbin-Watson test
## 
## data:  model_final
## DW = 1.809, p-value = 0.07778
## alternative hypothesis: true autocorrelation is greater than 0
acf(residuals(model_final),
    main="ACF Residual Model")

Uji autokorelasi menggunakan Durbin-Watson Test menghasilkan nilai statistik sebesar 1.809 dengan p-value sebesar 0.07778. Nilai ini mendekati 2 sehingga dapat disimpulkan bahwa tidak terdapat autokorelasi yang signifikan pada residual model.

Plot harga minyak sawit

plot(data$Terakhir, type="l",
     main="Pergerakan Harga Minyak Sawit Berjangka",
     xlab="Waktu",
     ylab="Harga",
     lwd=2)

Grafik pergerakan harga minyak sawit berjangka menunjukkan bahwa harga mengalami fluktuasi sepanjang periode pengamatan. Pada awal periode, harga berada di sekitar kisaran 3900–4100, kemudian mengalami peningkatan hingga mendekati 4600 pada pertengahan periode. Setelah itu harga kembali mengalami penurunan hingga berada di kisaran 3800, sebelum akhirnya kembali mengalami kenaikan pada bagian akhir periode pengamatan.

Pola ini menunjukkan bahwa harga minyak sawit memiliki pergerakan yang dinamis dan tidak stabil, yang merupakan karakteristik umum dari harga komoditas di pasar berjangka. Fluktuasi harga ini dapat dipengaruhi oleh berbagai faktor seperti kondisi pasar global, permintaan komoditas, serta aktivitas perdagangan.

Return

plot(data$return, type="l",
     main="Return Harga Minyak Sawit",
     xlab="Waktu",
     ylab="Return",
     col="blue")

Grafik return menunjukkan bahwa nilai return berfluktuasi di sekitar nilai nol sepanjang periode pengamatan. Sebagian besar nilai return berada pada kisaran -0.04 hingga 0.04.

Hal ini menunjukkan bahwa perubahan harga dari satu periode ke periode berikutnya relatif kecil dan tidak memiliki tren tertentu. Return yang bergerak di sekitar nol merupakan karakteristik umum dari data keuangan, karena perubahan harga biasanya bersifat acak dan dipengaruhi oleh banyak faktor eksternal.

Hubungan pembukaan dan return

plot(data$Pembukaan, data$return,
     main="Hubungan Harga Pembukaan dan Return",
     xlab="Harga Pembukaan",
     ylab="Return",
     pch=16)
abline(lm(return ~ Pembukaan, data=data), col="red", lwd=2)

Scatter plot yang menunjukkan hubungan antara harga pembukaan dan return memperlihatkan bahwa titik-titik data tersebar secara acak di sekitar garis regresi. Garis regresi yang hampir datar menunjukkan bahwa hubungan antara kedua variabel tersebut tidak terlalu kuat secara visual.

Terdapat kecenderungan bahwa ketika harga pembukaan meningkat, return juga mengalami sedikit peningkatan. Hal ini sejalan dengan hasil uji regresi sebelumnya yang menunjukkan bahwa variabel harga pembukaan memiliki pengaruh signifikan terhadap return, meskipun pengaruhnya relatif kecil.

Diagnostik Regresi

par(mfrow=c(2,2))
plot(model_final)

Residuals vs Fitted

Pada grafik ini terlihat bahwa titik-titik residual menyebar secara acak di sekitar garis horizontal. Tidak terlihat pola tertentu pada penyebaran residual, sehingga dapat disimpulkan bahwa tidak terdapat indikasi heteroskedastisitas yang kuat dalam model regresi.

Normal Q-Q Plot

Grafik Q-Q menunjukkan bahwa sebagian besar titik residual berada di sekitar garis diagonal. Hal ini menunjukkan bahwa distribusi residual mendekati distribusi normal, sehingga asumsi normalitas pada model regresi dapat dikatakan terpenuhi.

Scale-Location Plot

Grafik ini menunjukkan bahwa penyebaran residual relatif konstan di sepanjang nilai fitted. Hal ini menunjukkan bahwa varians residual cenderung homogen, sehingga tidak terdapat indikasi heteroskedastisitas yang signifikan.

Residuals vs Leverage

Grafik ini digunakan untuk mendeteksi adanya pengaruh observasi ekstrem. Berdasarkan grafik terlihat bahwa sebagian besar titik berada di dalam batas Cook’s Distance, sehingga dapat disimpulkan bahwa tidak terdapat pengamatan yang memiliki pengaruh ekstrem terhadap model regresi.

Korelasi Variable Harga

cor(data[,c("Terakhir","Pembukaan","Tertinggi","Terendah")])
##            Terakhir Pembukaan Tertinggi  Terendah
## Terakhir  1.0000000 0.9725008 0.9891722 0.9918444
## Pembukaan 0.9725008 1.0000000 0.9896062 0.9860949
## Tertinggi 0.9891722 0.9896062 1.0000000 0.9898593
## Terendah  0.9918444 0.9860949 0.9898593 1.0000000

Nilai korelasi yang mendekati 1 menunjukkan bahwa variabel harga memiliki hubungan yang sangat kuat dan positif. Hal ini wajar karena variabel-variabel tersebut merupakan harga dalam satu periode perdagangan yang saling berkaitan satu sama lain.

Sebagai contoh, ketika harga tertinggi meningkat, biasanya harga penutupan dan harga pembukaan juga akan meningkat. Oleh karena itu hubungan antar variabel harga cenderung sangat kuat.