import pandas as pd
import numpy as np
import plotly.graph_objs as go
from sklearn.linear_model import LinearRegression
# Data tambang
= {
data 'Jam_Operasi': [5, 7, 8, 6, 9, 4, 7, 10, 6, 8],
'Produksi_Ore': [50, 65, 70, 60, 80, 45, 68, 90, 62, 75]
}= pd.DataFrame(data)
df
# Model regresi linear
= df[['Jam_Operasi']]
X = df['Produksi_Ore']
y = LinearRegression()
model
model.fit(X, y)
= model.intercept_
intercept = model.coef_[0]
slope
'Produksi_pred'] = model.predict(X)
df['epsilon'] = df['Produksi_Ore'] - df['Produksi_pred']
df[
# Garis regresi
= np.linspace(df['Jam_Operasi'].min()-1, df['Jam_Operasi'].max()+1, 100)
x_line = intercept + slope * x_line
y_line
= go.Scatter(
line_regresi =x_line,
x=y_line,
y='lines',
mode='Garis Regresi',
name=dict(color='red', width=3)
line
)
# Titik data aktual
= go.Scatter(
scatter_actual =df['Jam_Operasi'],
x=df['Produksi_Ore'],
y='markers',
mode='Data Aktual',
name=dict(color='blue', size=8)
marker
)
# Garis residual epsilon (vertikal)
= []
residual_lines for i, row in df.iterrows():
= go.Scatter(
residual =[row['Jam_Operasi'], row['Jam_Operasi']],
x=[row['Produksi_pred'], row['Produksi_Ore']],
y='lines',
mode=dict(color='gray', width=2, dash='dot'),
line=(i==0),
showlegend='Error ε'
name
)
residual_lines.append(residual)
# Label epsilon
= go.Scatter(
epsilon_labels =df['Jam_Operasi'] + 0.1,
x=(df['Produksi_Ore'] + df['Produksi_pred']) / 2,
y='text',
mode=[f'ε{i+1}' for i in range(len(df))],
text=False,
showlegend='middle right',
textposition=dict(color='black', size=12)
textfont
)
# Anotasi formula model dan keterangan data aktual
= [
annotations dict(
=0, y=1.12, xref='paper', yref='paper',
x=f"<b>Model Regresi:</b><br>Ŷ = {intercept:.2f} + {slope:.2f} × Jam_Operasi",
text=False,
showarrow=dict(size=14, color='darkred'),
font='left'
align
),dict(
=0.95, y=1.2, xref='paper', yref='paper',
x="<b>Data Aktual:</b><br>Y = Produksi Ori",
text=False,
showarrow=dict(size=14, color='blue'),
font='right'
align
)
]
= go.Layout(
layout ='Regresi Linear Sederhana: Produksi Ore vs Jam Operasi',
title=dict(title='Jam Operasi (jam)'),
xaxis=dict(title='Produksi Ore (ton)'),
yaxis=annotations,
annotations=dict(t=100)
margin
)
= go.Figure(data=[scatter_actual, line_regresi] + residual_lines + [epsilon_labels], layout=layout)
fig ; fig.show()
11 Pemodelan Regresi
Pemodelan regresi adalah salah satu metode statistik paling fundamental yang digunakan untuk menganalisis hubungan antara satu atau lebih variabel independen (prediktor) dengan variabel dependen (respon). Tujuan utama dari regresi adalah memprediksi, menjelaskan, atau mengestimasi nilai dari variabel respon berdasarkan informasi dari variabel prediktor (Bevans, 2023; University, n.d.).
11.1 Regresi Linear Sederhana
Regresi Linear Sederhana adalah metode untuk memodelkan hubungan antara satu variabel independen (
Keterangan: -
-
-
-
-
Persamaan ini diasumsikan memiliki hubungan linier antara
11.1.1 Studi Kasus 1
Prediksi produksi ore (bijih) harian berdasarkan jam operasi alat berat.
- Variabel bebas (
): Jam operasi alat berat per hari (jam) - Variabel terikat (
): Produksi ore per hari (ton)
11.1.2 Data Kasus 1
Misal data pengukuran 10 hari operasi alat berat di tambang adalah:
i | ||
---|---|---|
1 | 5 | 50 |
2 | 7 | 65 |
3 | 8 | 70 |
4 | 6 | 60 |
5 | 9 | 80 |
6 | 4 | 45 |
7 | 7 | 68 |
8 | 10 | 90 |
9 | 6 | 62 |
10 | 8 | 75 |
11.1.3 Rata-rata &
11.1.4 Koefisien Slope
5 | 50 | 4 | |||
7 | 65 | 0 | -1.5 | 0 | 0 |
8 | 70 | 1 | 3.5 | 3.5 | 1 |
6 | 60 | -1 | -6.5 | 6.5 | 1 |
9 | 80 | 2 | 13.5 | 27 | 4 |
4 | 45 | -3 | -21.5 | 64.5 | 9 |
7 | 68 | 0 | 1.5 | 0 | 0 |
10 | 90 | 3 | 23.5 | 70.5 | 9 |
6 | 62 | -1 | -4.5 | 4.5 | 1 |
8 | 75 | 1 | 8.5 | 8.5 | 1 |
Jumlah:
Maka,
11.1.5 Intercept :
11.1.6 Model Regresi Linear
11.1.7 Contoh Prediksi
Jika jam operasi alat berat = 8 jam, maka estimasi produksi ore:
11.1.8 Visualisasi 2D
11.1.9 Visualisasi 3D
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from sklearn.linear_model import LinearRegression
# Data tambang: Jam operasi dan produksi ore harian
= {
data 'Jam_Operasi': [5, 7, 8, 6, 9, 4, 7, 10, 6, 8],
'Produksi_Ore': [50, 65, 70, 60, 80, 45, 68, 90, 62, 75]
}= pd.DataFrame(data)
df
# Model regresi linear
= df[['Jam_Operasi']]
X = df['Produksi_Ore']
y = LinearRegression()
model
model.fit(X, y)
= model.intercept_
intercept = model.coef_[0]
slope
'Produksi_pred'] = model.predict(X)
df['epsilon'] = df['Produksi_Ore'] - df['Produksi_pred']
df[
# Permukaan regresi linear 3D (x = Jam operasi, y = Prediksi produksi, z=0)
= np.linspace(df['Jam_Operasi'].min(), df['Jam_Operasi'].max(), 20)
x_surface = intercept + slope * x_surface
y_surface = np.zeros_like(x_surface)
z_surface
= go.Scatter3d(
surface_line =x_surface,
x=y_surface,
y=z_surface,
z='lines',
mode='Garis Regresi (Permukaan)',
name=dict(color='red', width=5)
line
)
# Scatter titik data aktual di z = residual
= go.Scatter3d(
scatter_actual =df['Jam_Operasi'],
x=df['Produksi_Ore'],
y=df['epsilon'],
z='markers',
mode=dict(size=6, color='blue'),
marker='Data Aktual (Jam Operasi, Produksi, ε)'
name
)
# Garis residual vertikal dari permukaan regresi ke titik aktual
= []
residual_lines for i in range(len(df)):
= go.Scatter3d(
residual_line =[df['Jam_Operasi'][i], df['Jam_Operasi'][i]],
x=[df['Produksi_pred'][i], df['Produksi_Ore'][i]],
y=[0, df['epsilon'][i]],
z='lines',
mode=dict(color='gray', width=2, dash='dot'),
line=(i==0),
showlegend='Error (ε)'
name
)
residual_lines.append(residual_line)
# Label residual epsilon
= go.Scatter3d(
epsilon_labels =df['Jam_Operasi'] + 0.1,
x=(df['Produksi_Ore'] + df['Produksi_pred']) / 2,
y=df['epsilon'] / 2,
z='text',
mode=[f'ε{i+1}' for i in range(len(df))],
text='middle right',
textposition=False,
showlegend=dict(size=12, color='black')
textfont
)
# Formula model regresi
= f"Ŷ = {intercept:.2f} + {slope:.2f} × Jam_Operasi"
formula_text
= go.Layout(
layout ="Visualisasi Regresi Linear Sederhana: Produksi Ore vs Jam Operasi",
title=1600,
width=700,
height=dict(
scene=dict(title='Jam Operasi (jam)'),
xaxis=dict(title='Produksi Ore (ton)'),
yaxis=dict(title='Residual ε'),
zaxis
),=[
annotationsdict(
=False,
showarrow=f"<b>Model Regresi:</b><br>{formula_text}",
text=0,
x=1,
y='paper',
xref='paper',
yref='left',
align=dict(size=14, color='darkred')
font
)
]
)
= go.Figure(data=[scatter_actual, surface_line] + residual_lines + [epsilon_labels], layout=layout)
fig ; fig.show()
11.2 Regresi Linear Berganda
Regresi Linear Berganda (RLB) adalah perluasan dari regresi linear sederhana yang digunakan untuk memodelkan hubungan antara satu variabel dependen (
Regresi Linear Berganda adalah metode statistik yang digunakan untuk memodelkan hubungan antara satu variabel dependen (
11.2.1 Bentuk Umum Model
Persamaan umum RLB:
Keterangan:
: variabel dependen (respon) : variabel independen (prediktor) : intercept : koefisien regresi : galat atau error acak
11.2.2 Tujuan RLB
- Mengukur pengaruh simultan beberapa variabel bebas terhadap variabel respon.
- Memprediksi nilai
berdasarkan nilai-nilai dari . - Menentukan variabel mana yang paling signifikan dalam mempengaruhi
(Weisberg, 2011).
11.2.3 Asumsi RLB
- Linearitas: Hubungan antara
dan bersifat linier. - Independensi: Observasi bersifat independen satu sama lain.
- Homoskedastisitas: Variansi error konstan di seluruh nilai prediktor.
- Normalitas Error: Galat (
) berdistribusi normal. - Tidak ada multikolinearitas tinggi antar variabel independen (Tranmer & Murphy, 2020).
11.3 Evaluasi Model RLB
Beberapa ukuran evaluasi yang umum digunakan:
(Koefisien Determinasi): Menunjukkan proporsi variabilitas yang dijelaskan oleh model.- Adjusted
: Menyesuaikan berdasarkan jumlah prediktor. - Uji F: Menguji signifikansi model secara keseluruhan.
- Uji t: Menguji signifikansi masing-masing koefisien
(Chen, 2019).
11.3.1 Studi Kasus2
Regresi Linear Berganda (3 Variabel) - Kasus Tambang
Sebuah perusahaan tambang ingin mengetahui pengaruh jumlah jam kerja alat berat (X₁), jumlah operator (X₂), dan jumlah solar yang dikonsumsi (X₃) terhadap produksi ore harian (Y).
11.3.2 Data Kasus 2
Data dari 10 hari terakhir tercatat sebagai berikut:
Hari | Jam Kerja Alat Berat ( |
Jumlah Operator ( |
Konsumsi Solar (liter) ( |
Produksi Ore (ton) ( |
---|---|---|---|---|
1 | 8 | 5 | 120 | 75 |
2 | 7 | 6 | 115 | 72 |
3 | 9 | 5 | 130 | 80 |
4 | 6 | 4 | 110 | 65 |
5 | 10 | 6 | 140 | 85 |
6 | 7 | 5 | 118 | 70 |
7 | 8 | 6 | 125 | 78 |
8 | 5 | 4 | 105 | 60 |
9 | 9 | 6 | 135 | 83 |
10 | 6 | 5 | 112 | 68 |
11.3.3 Pertanyaan
Hitunglah model regresi linear berganda:
Tentukan nilai dari koefisien regresi
, , , dan dengan cara:- Menggunakan metode matriks normal equation
- Atau software seperti Python (opsional)
Tafsirkan masing-masing koefisien regresi secara kontekstual.
Prediksikan produksi ore (
) jika: (jam kerja) (jumlah operator) (liter solar)
11.3.4 Model Umum
11.3.5 Langkah-langkah
Matriks Persamaan Normal
Gunakan persamaan:
Matriks Koefisien
Hasil dari perhitungan:
Model Regresi
11.3.5.1 Interpretasi Koefisien
: Setiap penambahan 1 jam kerja alat berat ( ), produksi ore meningkat sekitar 3.18 ton (dengan asumsi variabel lain konstan). : Setiap penambahan 1 operator, produksi ore meningkat 1.93 ton. : Setiap penambahan 1 liter solar, produksi ore meningkat 0.16 ton.
Prediksi
Jika diketahui:
(jam kerja) (jumlah operator) (liter solar)
Maka: