Vous êtes sur la page 1sur 21

Dr.

Khoirin Nisa

BAB 8
SIMULASI ANALISIS REGRESI

8.1 Analisis Regresi Linear Sederhana


Dalam sub-bab ini akan diberikan contoh penelitian tentang percobaan dalam
bidang lingkungan.
Apakah semakin tua mobil semakin besar juga emisi HC yang dihasilkan ?.
Diambil contoh 10 mobil secara acak, kemudian dicatat jarak tempuh yang
sudah dijalani (dalam seribu KM) dan diukut emisi HC-nya (dalam ppm)

Jarak Emisi
31 553
38 590
48 608
52 682
63 752
67 725
75 834
84 752
89 845
99 960
Tabel 4. Data jarak & emisi
1. Input data
=====================================================
Jarak = c(31,38,48,52,63,67,75,84,89,99)
Emisi = c(553,590,608,682,752,725,834,752,845,960)
=====================================================

86 Simulasi Data Statistik


Dr. Khoirin Nisa

2. Buat model regresi


=================================================
regresi = lm(Emisi~Jarak)
=================================================
Output :

> regresi

Call:
lm(formula = Emisi ~ Jarak)

Coefficients:
(Intercept) Jarak
381.951 5.389

3. Uji simultan (F) dan uji parsial (t)


=================================================
uji_simultan = anova(regresi)
uji_parsial = summary(regresi)
=================================================
Output :

> uji_simultan

Analysis of Variance Table

Response: Emisi
Df Sum Sq Mean Sq F value Pr(>F)
Jarak 1 131932 131932 74.757 2.486e-05 ***
Residuals 8 14118 1765
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> uji_parsial

Call:
lm(formula = Emisi ~ Jarak)

Residuals:
Min 1Q Median 3Q Max
-82.653 -17.676 3.618 27.843 47.851

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 381.9506 42.4008 9.008 1.84e-05 ***
Jarak 5.3893 0.6233 8.646 2.49e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Bab 8 Simulasi Analisis Regresi 87


Dr. Khoirin Nisa

Residual standard error: 42.01 on 8 degrees of freedom


Multiple R-squared: 0.9033, Adjusted R-squared: 0.8912
F-statistic: 74.76 on 1 and 8 DF, p-value: 2.486e-05

4. Uji linearitas
=====================================================
plot(Jarak,Emisi)
abline(lsfit(Jarak, Emisi))
=====================================================
Output :

Gambar 24. Uji linearitas Jarak vs Emisi

5. Uji korelasi
=====================================================
korelasi = cor.test(Jarak,Emisi)
P.Value.korelasi = korelasi$p.value
=====================================================
Output :
> korelasi

Pearson's product-moment correlation

data: Jarak and Emisi


t = 8.6462, df = 8, p-value = 2.486e-05
alternative hypothesis: true correlation is not equal
to 0

88 Simulasi Data Statistik


Dr. Khoirin Nisa

95 percent confidence interval:


0.7988745 0.9885158
sample estimates:
cor
0.9504378

> P.Value.korelasi
[1] 0.8861848

6. Uji Normalitas
=================================================
library(nortest) # Package uji kolmogorov
residual = uji_parsial$residuals
kolmogorov_tes = lillie.test(residual)
P.Value.kolmogorov = kolmogorov_tes$p
=================================================
Output :
> kolmogorov_tes
Lilliefors (Kolmogorov-Smirnov)
normality test

data: residual
D = 0.13276, p-value = 0.8862

> P.Value.kolmogorov
[1] 0.8861848

Menggunakan Normal Q-Q Plot


=================================================
qqnorm(residual)#scatterplot
qqline(residual)#garis
=================================================

Bab 8 Simulasi Analisis Regresi 89


Dr. Khoirin Nisa

Output :

Gambar 25. Normal Q-Q plot residual Jarak vs Emisi

7. Memanggil beta duga (𝑏̂)


=================================================
beta.duga = uji_parsial$coefficients[,1]
=================================================
Output :
> beta.duga
(Intercept) Jarak
381.95060 5.38931

8.2 Analisis Regresi Linear Berganda


Dalam sub-bab ini akan diberikan contoh penelitian tentang apa saja faktor
yang berkontribusi pada penentuan harga suplemen energi berdasarkan
kandungan yang ada pada suplemen tersebut. Diberikan data dengan variabel
harga, kalori, protein dan lemak (dalam gram) untuk 19 sampel suplemen
energi

90 Simulasi Data Statistik


Dr. Khoirin Nisa

No. Price Calories Protein Fat


1 1,4 180 12 3
2 1,28 200 14 6
3 1,31 210 16 7
4 1,1 220 13 6
5 2,29 220 17 11
6 1,15 230 14 4,5
7 2,24 240 24 10
8 1,99 270 24 5
9 2,57 320 31 9
10 0,94 110 5 30
11 1,4 180 10 4,5
12 0,53 200 7 6
13 1,02 220 8 5
14 1,13 230 9 6
15 1,29 230 10 2
16 1,28 240 10 4
17 1,44 260 6 5
18 1,27 260 7 5
19 1,47 290 13 6
Tabel 4. Data 19 sampel suplemen energi
1. Input data
=====================================================
# Input data dengan format .txt
data = read.delim(file.choose())

# Input data dengan format excel .xlsx


data = read.xlsx(file.choose(),1)
=====================================================

Untuk input data dengan format .txt maupun format excel (xlsx) saat kode
dijalankan, maka akan muncul jendela sebagai berikut :

Bab 8 Simulasi Analisis Regresi 91


Dr. Khoirin Nisa

Gambar 26. Jendela pilih file data .txt


Kemudian pilih file data sesuai direktori data yang anda simpan

2. Membuat model regresi


=====================================================
regresi = lm(Price~Calories+Protein+Fat,data = data)
=====================================================
Output :
> regresi

Call:
lm(formula = Price ~ Calories + Protein + Fat, data =
data)

Coefficients:
(Intercept) Calories Protein Fat
0.015544 0.002654 0.053542 0.014683

3. Uji simultan (F) dan uji parsial (t)


=================================================
uji_simultan = anova(regresi)
uji_parsial = summary(regresi)
=================================================
Output :
> uji_simultan

92 Simulasi Data Statistik


Dr. Khoirin Nisa

Analysis of Variance Table

Response: Price
Df Sum Sq Mean Sq F value Pr(>F)
Calories 1 1.35305 1.35305 17.0795 0.0008855 ***
Protein 1 1.97673 1.97673 24.9523 0.0001598 ***
Fat 1 0.09416 0.09416 1.1885 0.2928320
Residuals 15 1.18831 0.07922
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘
’ 1

> uji_parsial

Call:
lm(formula = Price ~ Calories + Protein + Fat, data = data)

Residuals:
Min 1Q Median 3Q Max
-0.47915 -0.10219 -0.07563 0.13604 0.61894

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.015544 0.467883 0.033 0.973936
Calories 0.002654 0.002102 1.263 0.226036
Protein 0.053542 0.012019 4.455 0.000463 ***
Fat 0.014683 0.013468 1.090 0.292832
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘
’ 1

Residual standard error: 0.2815 on 15 degrees of freedom


Multiple R-squared: 0.7424, Adjusted R-squared: 0.6908
F-statistic: 14.41 on 3 and 15 DF, p-value: 0.000109

4. Uji linearitas
=================================================
Price = data.contoh[,1]
Calories = data.contoh[,2]
Protein = data.contoh[,3]
Fat = data.contoh[,4]

par(mfrow=c(1,3))

Bab 8 Simulasi Analisis Regresi 93


Dr. Khoirin Nisa

#Price VS Calories
plot(Calories,Price)
abline(lsfit(Calories,Price))

#Price VS Protein
plot(Protein,Price)
abline(lsfit(Protein,Price))

#Price VS Fat
plot(Fat,Price)
abline(lsfit(Fat,Price))
=================================================
Output :

Gambar 27. Uji linearitas data sampel suplemen energi

5. Uji korelasi
=================================================
korelasi = cor(data)
=================================================
Output :
> korelasi

Price Calories Protein Fat


Price 1.00000000 0.5416273 0.84341828 0.01052428
Calories 0.54162730 1.0000000 0.53944651 -0.50467648
Protein 0.84341828 0.5394465 1.00000000 -0.05878939
Fat 0.01052428 -0.5046765 -0.05878939 1.00000000

94 Simulasi Data Statistik


Dr. Khoirin Nisa

6. Uji normalitas
=================================================================
library(nortest)
residual = uji_parsial$residuals
kolmogorov_tes = lillie.test(residual)
shapiro_test = shapiro.test(residual)
stat_uji_norm = rbind(kolmogorov_tes$statistic,
shapiro_test$statistic)

P_Value = rbind(kolmogorov_tes$p,shapiro_test$p)
Uji_Normalitas = cbind(stat_uji_norm,P_Value)
colnames(Uji_Normalitas)=c("Statistik Uji","P-Value")
rownames(Uji_Normalitas)=c("Kolmogorov-Smirnov","Shapiro-Wilk")
=================================================================

Output :
> Uji_Normalitas

Statistik Uji P-Value


Kolmogorov-Smirnov 0.1800769 0.1077290
Shapiro-Wilk 0.9639534 0.6522776

Dengan menggunakan grafik :


=================================================
qqnorm(residual)
qqline(residual)
=================================================
Output :

Gambar 28. Normal Q-Q plot residual data suplemen energi

Bab 8 Simulasi Analisis Regresi 95


Dr. Khoirin Nisa

7. Uji heteroskedastisitas
=================================================
library(lmtest)
Uji_Heteroskedastisitas = bptest(regresi)
=================================================
Output :
> Uji_Heteroskedastisitas

studentized Breusch-Pagan test

data: regresi
BP = 0.46259, df = 3, p-value = 0.927

Dengan menggunakan grafik :


=================================================
plot(regresi$fitted.values,regresi$residuals,main
= "Residual VS Fitted Values")
=================================================
Output :

Gambar 29. Uji heteroskedastisitas data suplemen energi

96 Simulasi Data Statistik


Dr. Khoirin Nisa

8. Uji multikolinearitas
=================================================
library(car)
Uji_Multikolinearitas_1 = vif(regresi)

# Atau #

x = data[,2:4]
cor_data=cor(x)
VIF=diag(solve(cor_data))
Uji_Multikolinearitas_2 = VIF
=================================================
Output :
> Uji_Multikolinearitas_1
Calories Protein Fat
2.063865 1.543537 1.468350

> Uji_Multikolinearitas_2
Calories Protein Fat
2.063865 1.543537 1.468350

9. Uji autokorelasi
=================================================
library(car)
Uji_Autokorelasi = durbinWatsonTest(regresi)
=================================================
Output :
> Uji_Autokorelasi
lag Autocorrelation D-W Statistic p-value
1 -0.3597935 2.670475 0.216
Alternative hypothesis: rho != 0

Uji_Autokorelasi$dw
[1] 2.670475

Bab 8 Simulasi Analisis Regresi 97


Dr. Khoirin Nisa

Menggunakan grafik :
=================================================
n_row = nrow(data)
observation_order = seq(1:n_row)
plot(observation_order, residual)
lines(observation_order, residual)
=================================================
Output :

Gambar 30. Uji autokorelasi data suplemen energi

10. Memanggil beta duga (𝑏̂)


=================================================
beta.duga = uji_parsial$coefficients[,1]
=================================================
Output :
> beta.duga

(Intercept) Calories Protein Fat


0.015543601 0.002653604 0.053541826 0.014682837

98 Simulasi Data Statistik


Dr. Khoirin Nisa

8.3 Membangkitkan Data untuk Simulasi Analisis Regresi


Secara umum, langkah-langkah untuk membangkitkan data analisis regresi
adalah sebagai berikut:
1. Menetapkan parameter regresi (0, 1, 2, …, p)
2. Membangkitkan galat berdistribusi normal dengan mean nol dengan
varians 2
3. Membangkitkan Xi, i=1,2,…,p (bisa menggunakan random integer atau
dari distribusi tertentu)
4. Membangkitkan y dengan rumus : y = 0+ 1X1+ 2 X2 + … + p Xp +
galat.

Varians galat 2 dapat ditetapkan menggunakan sembarang nilai, namun pada


beberapa kasus perlu disesuaikan tergantung kebutuhan. Sebagai contoh,
untuk membangkitkan data dengan masalah heteroskedastisitas, nilai 2
dibangkitkan menggunakan suatu fungsi tertentu sesuai yang diinginkan
analis. Untuk simulasi metode regresi robust, beberapa galat perlu diberi
kontaminasi agar diperoleh data pencilan. Demikian juga untuk masalah-
masalah kajian regresi lainnya.

Berikut ini beberapa contoh program R terkait analisis regresi:

1. Berikut ini contoh program R untuk membangkitkan data pada analisis


regresi sederhana dengan intersep (data bangkitan terdiri dari satu variabel
bebas X dan satu variabel tak bebas Y)

Bab 8 Simulasi Analisis Regresi 99


Dr. Khoirin Nisa

===================================================
beta0=beta1=1 #Menentukan b0 dan b1
galat = rnorm(100) #Membuat galat ~ N(0,1)
x = round(runif(100,10,50)) #Bangkit data x
y = beta0+beta1*x+galat #Bangkit data y
model = lm(y~x) #pendugaan model regresi dengan
metode kuadrat terkecil (lm=linear model)#
duga = model$coefficient #memanggil koefisien
regresi dugaan #
===================================================

2. Uji sifat kenormalan dengan koefisien regresi


Berikut ini contoh program R untuk simulasi analisis regresi sederhana tanpa
intersep, dan selanjutnya menguji kenormalan koefisien regresi dugaan
(betaduga) yang dihasilkan dari m-kali pengulangan dengan ukuran sampel
yang berbeda-beda.

===================================================
Ujinormal.beta = function(n,m)
{
Hasil = rep(0,m)
for (i in 1:m)
{
x = round(runif(n,10,50))
galat = rnorm(n)
y = x+galat
model = lm(y~x-1)
hasil[i] = model$coefficient
}
normal.test = shapiro.test(hasil)
pvalue = normal.test$p.value
return(pvalue)
}

sim1=Ujinormal.beta(10,100)
sim2=Ujinormal.beta(20,100)
sim3=Ujinormal.beta(30,100)
sim4=Ujinormal.beta(50,100)
sim5=Ujinormal.beta(100,100)

100 Simulasi Data Statistik


Dr. Khoirin Nisa

sim6=Ujinormal.beta(300,100)
sim7=Ujinormal.beta(500,100)
sim8=Ujinormal.beta(1000,100)
simulasi=rbind(sim1,sim2,sim3,sim4,sim5,sim6,sim7,s
im8)
size=c(10,20,30,50,100,300,500,1000)
hasil=data.frame(size,simulasi)
colnames(hasil)=c(”n”, ”p-value”)
hasil
===================================================

8.4 Membangkitkan Data Regresi dengan Masalah


Heteroskedastisitas
Contoh program R untuk membangkitkan data yang mengandung
heteroskedastisitas
===================================================
x1 = rep(1:20,5) #n20x5=100
x2 = rep(21:40,5)
#x1 = rnorm(n,1,1)
#x2 = rnorm(n,2,1)
b0=b1=b2=1
sigma = function(x1,x2) 1+x1^2+x2 #fungsi
heteroskedastisitas#
galat = rnorm(100,0,sigma(x1,x2)) #simpanganbaku
galat merupakan fungsi dari x1 dan x2#

y = b0+b1*x1+b2*x2+galat
data1 = data.frame(x1,x2,y)
mod = lm(y~x1+x2, data=data1)
res = abs(resid(mod))
res = sort(res)
index = seq(1:100)
plot(index,res) #mengecek heteroskedastisitas
dengan plot galat

library(lmtest)
Uji_Heteroskedastisitas = bptest(regresi)
plot(regresi$fitted.values,regresi$residuals,main
= "Residual VS Fitted Values")
===================================================

Bab 8 Simulasi Analisis Regresi 101


Dr. Khoirin Nisa

8.5 Membangkitkan Data Regresi dengan Masalah


Autokorelasi
Contoh program R untuk membangkitkan data yang mengandung
autokorelasi
===================================================
e=arima.sim(list(order = c(1,0,0), ar = 0.7), n =
200, sd=20) #galat bersifat autoregressive AR(1)

plot(e)
x=rnorm(200)
y = 50 + 25*x + e
dataku = data.frame(x=x, y=y)
lm.model = lm(y~x, data=dataku)
anova(lm.model)
summary(lm.model)
residual = lm.model$residuals
plot(residual)

library(car)
Uji_Autokorelasi = durbinWatsonTest(regresi)

n_row = nrow(data)
observation_order = seq(1:n_row)
plot(observation_order, residual)
lines(observation_order, residual)
===================================================

8.6 Membangkitkan Data Regresi dengan Masalah


Multikolinearitas
Untuk menciptakan multikolinieritas antar variable bebas 𝑥𝑖 kita dapat
menggunakan persamaan berikut:

𝑥𝑖 = √1 − 𝜌2 𝑥𝑖0 + 𝜌𝑥𝑝0
keterangan :
𝑥𝑖 : variabel bebas ke - 𝑖 yang berkorelasi dengan variabel 𝑥𝑝0
𝑥𝑖0 : variabel bebas ke - 𝑖 awal sebelum berkorelasi dengan variabel 𝑥𝑝0

102 Simulasi Data Statistik


Dr. Khoirin Nisa

𝜌 : nilai yang menjelaskan korelasi antara variabel.

Contoh program R untuk membangkitkan data dengan masalah


multikolinearitas:
===================================================
dataku=function(n, rho)
{
x1r = rnorm(n)
x2r = rnorm(n)
x3r = rnorm(n)
x4r = rnorm(n)
x5r = rnorm(n)
x6r = rnorm(n)
x7r = rnorm(n)

x1 = (sqrt(1-((rho)^2)))*x1r+((rho)*x7r)
x2 = (sqrt(1-((rho)^2)))*x2r+((rho)*x7r)
x3 = (sqrt(1-((rho)^2)))*x3r+((rho)*x7r)
x4 = (sqrt(1-((rho)^2)))*x4r+((rho)*x7r)
x5 = (sqrt(1-((rho)^2)))*x5r+((rho)*x7r)
x6 = (sqrt(1-((rho)^2)))*x6r+((rho)*x7r)

X = cbind(x1,x2,x3,x4,x5,x6)
galat = rnorm(n)
b0=b1=b2=b3=b4=b5=b6=1
y = b0+b1*x1+b2*x2+b3*x3+b4*x4+b5*x5+b6*x6+galat
dataku = cbind(y,x1,x2,x3,x4,x5,x6)
data = data.frame(dataku)
data = round(data,digits=3)
return(data)
}
coba=dataku(50,0.99)
coba
data.X.simulasi = coba[,2:7]
corX = cor(data.X.simulasi)
VIF = (diag(solve(corX)))
===================================================

Bab 8 Simulasi Analisis Regresi 103


Dr. Khoirin Nisa

8.7 Membangkitkan Data Regresi yang Mengandung


Pencilan
Untuk menciptakan pencilan, kita berikan kontaminasi terhadap beberapa
galat menggunakan distribusi normal dengan mean yang cukup besar. Ketika
data mengandung pencilan, maka metode kuadrat terkecil tidak lagi
memberikan hasil dugaan parameter regresi yang terbaik (BLUE=best linear
unbiased estimator). Untuk menghasilkan model regresi yang baik pada data
mengandung pencilan dapat menggunakan merode regresi robust.

1. Contoh program R untuk membangkitkan data regresi dengan pencilan


sebanyak 𝑝% dari 𝑛 ukuran sampel
=================================================
n = 100
p = 5 #menciptakan pencilan sebanyak 5%
galat = rnorm(n,0,1)
persen = p*n/100
outlier = rnorm(persen,10,1)
galat[1:persen] = outlier
x = rnorm(n,0,1)
b0=b1=1
y = b0+b1*x+galat
plot(x,y)

mod = lm(y~x)
anova(mod)
summary(mod)

residual = mod$residuals

library(nortest)
lilie.test(residual)
=================================================

104 Simulasi Data Statistik


Dr. Khoirin Nisa

2. Contoh program R untuk simulasi kajian metode regresi robust (metode


MM-estimator dengan tiga bobot berbeda: Hampel, Tukey dan Welsh)
dengan replikasi sebanyak m-kali untuk menghitung nilai mean square
error (MSE) penduga robust dan membandingkan dengan MKT
=================================================
library(robustbase)
SIMULASI = function(m,n,pencilan)
{
HASIL = matrix(c(1000,1000,1000,1000,1000),1,5)
KOEF = matrix(0,m,4)
for (j in pencilan)
{
for (i in 1:m)
{
galat =rnorm(n, 0, 1)
out = j*n/100
outlier = rnorm(out, 50, 1)
galat[1:out] = outlier
x1 = runif(n,1,50)
y = x1+galat
mkt = lm(y~x1-1)
bmkt = mkt$coefficients
MMH = lmrob(y~x1-1, method = "MM",
init="S",control=lmrob.control(psi="hampel"))
MMT = lmrob(y~x1-1, method = "MM",
init="S",control=lmrob.control(psi="tukey"))
MMW = lmrob(y~x1-1, method = "MM",
init="S",control=lmrob.control(psi="Welsh"))

bMMH = MMH$coefficients
bMMT = MMT$coefficients
bMMW = MMW$coefficients
B = cbind(bmkt,bMMH,bMMT,bMMW)
KOEF[i,] = B
}
MSE = colSums((KOEF-1)^2)/m
REKAP = cbind(j,t(MSE))
HASIL = rbind(HASIL,REKAP)
}
s = nrow(HASIL)

Bab 8 Simulasi Analisis Regresi 105


Dr. Khoirin Nisa

HASILAKHIR = HASIL[2:s,]
HASIL = data.frame(HASILAKHIR)
return(HASIL)
}

m = 100
pencilan1 = c(10,20,30)
n = 30
simn30 = SIMULASI(m,n,pencilan1)
hasil30 = cbind(n,simn30)

pencilan2 = c(5,10,15,20,25,30)
n = 200
simn200 = SIMULASI(m,n,pencilan2)
hasil200 = cbind(n,simn200)

HASIL = rbind(hasil30,hasil200)
HASIL = data.frame(HASIL)
colnames(HASIL) =
c("n","%pencilan","MSE(MKT)","MSE(HUBER)",
"MSE(TUKEY)", "MSE(WELSH)")

HASIL
=================================================

106 Simulasi Data Statistik

Vous aimerez peut-être aussi