Email : sherlytaurinsiri@gmail.com
Instagram : https://www.instagram.com/sherlytaurin
RPubs : https://rpubs.com/sherlytaurin/
Github : https://github.com/sherlytaurin/
Telegram : @Sherlytaurin
Regresi Linear Sederhana adalah analisis regresi yang hanya melibatkan 2 variabel, yaitu 1 variabel dependen atau terikat, dan 1 variabel independen atau bebas. Pada regresi linear sederhana, hubungan antar variabelnya bersifat linier, dimana perubahan pada variabel X akan diikuti oleh perubahan pada variabel Y secara tetap.
Analisis ini digunakan untuk mengetahui arah hubungan antara variabel independen dengan variabel dependen apakah positif atau negatif serta untuk memprediksi nilai dari variabel dependen apabila nilai variabel independen mengalami kenaikan atau penurunan nilai. Data yang digunakan biasanya berskala interval atau rasio. Model regresi linear sederhana yang baik harus memenuhi asumsi eksogenitas, linearitas, autokorelasi, dan varians error.
Rumus dari analisis regresi linear sederhana adalah: \[ Y' = a + bX \] dimana:
Y’ = subyek dalam variabel dependen yang dipresiksi
a = harga Y ketika harga X = 0
b = angka koefisien regresi
X = subyek pada variabel independen yang memiliki nilai tertentu.
b adalah tangent dari perbandingan antara panjang garis variabel dependen dimana:
\[ b = r \frac {s_y}{s_x} \] dimana:
R = koefisien korelasi antara variabel X dan Y
\(s_y\) = simpangan baku variabel Y
\(s_x\) = simpangan baku variabel X
Contoh: Pengaruh income terhadap premi asuransi yang dibayarkan. Kasus ini adalah analisis regresi sederhana karena hanya terdapat 2 variabel, Income sebagai variabel bebas dan premi asuransi sebagai variabel terikat atau dependennya. (Perhitungannya akan dibahas di nomor selanjutnya)
Regresi Linear Berganda adalah analisis regresi linear yang melibatkan lebih dari dua variabel atau dengan kata lain melibatkan 1 variabel terikat, dan lebih dari satu variabel bebas atau prediktor atau independen. Disebut berganda karena beberapa variabel independen ini akan berpengaruh pada variabel dependen.
Analisis ini bertujuan untuk mengetahui manakah variabel independen yang paling berpengaruh atau memiliki hubungan paling kuat terhadap variabel dependen.
Model regresi linear berganda dilukiskan dengan persamaan:
\[ Y = \alpha + \beta_1 X_1 + \beta_2 X_2 + \beta_n X_n + e \] dimana:
Y = variabel respon / terikat / dependen
X = variabel prediktor / bebas / independen
\(\alpha\) = konstanta
\(\beta\) = slope / koefisien estimasi
Contoh: Penelitian mengenai pengaruh ROA, NPM, dan Size terhadap Return Saham. Pada kasus ini, terdapat 3 variabel bebas dan 1 variabel terikat. Oleh sebab itu disebut sebagai regresi linear berganda.
Pada kasus ini saya mengambil data mengenai asuransi tepatnya data insur yang membahas mengenai pengaruh income (pendapatan) terhadap biaya insurance (asuransi) di Swedish Kronor for geographical zones in Sweden, dimana keduanya dalam $1000. Pada data ini terdapat 60 data dengan insurance sebagai variabel terikat dan income sebagai variabel bebas.
library(readxl)
library(DT)
library(dplyr)
insur <- read_xlsx("UTS/slr06.xlsx") %>%
rename("income" = "X",
"insurance" = "Y")
datatable(insur)Untuk mempermudah memahami isi data, kita visualisasikan data yang ada kedalam bentuk plot, seperti:
plot(insur$income, insur$insurance,
ylim=c(0, max(insur$insurance)),
xlim=c(0, max(insur$income)),
xlab="income in $",
ylab="insurance fee in $",
type = "p") Gambar diatas menunjukkan scatter plot pendapatan terhadap biaya asuransi yang menunjukkan bahwa terdapat hubungan positif antara pendapatan dan biaya asuransi.
Ada beberapa asumsi yang harus diperhatikan untuk melakukan hipotesis. Oleh karena itu, kita harus memastikan apakah asumsi-asumsi yang ada telah terpenuhi. Berikut asumsi yang harus dipenuhi:
Karena datanya hanya memiliki 1 variabel independen, dapat disimpulkan bahwa data ini sudah pasti independen. Sehingga tidak perlu mencari korelasinya lagi.
Normalitas dicari untuk memeriksa apakah variabel terikatnya berdistribusi normal. Untuk mengetahui hal ini, kita dapat menggunakan fungsi hist().
avg <- mean(insur$insurance)
stdev <- sd(insur$insurance)
hist(insur$insurance, xlab = "insurance", main="Histogram of Insurance", freq = FALSE)
curve(dnorm(x, avg, stdev), add = TRUE, col=2)Linearitas dilakukan untuk mengetahui apakah data observasi bersifat linear. Jika tidak memenuhi maka tidak dapat menggunakan regresi linier, tetapi harus menggunakan metode lainnya.
library("gridExtra")
library("ggplot2")
g1 <- ggplot(insur)+
geom_point(aes(x = income,
y = insurance),
shape = 1)+
geom_smooth(aes(x = income,
y = insurance),
method = "lm",
formula = "y~x",
color = "red")
g1Hipotesis dan tingkat signifikansinya adalah: \[ H_0 : \beta_1 = \beta_2 \\ H_1 : \beta_1 \neq \beta_2 \\ \alpha = 0.05 \]
Untuk melihat summatry dari model linier regresi sederhana kita dapat menggunakan lm() dan summary().
##
## Call:
## lm(formula = insurance ~ income, data = insur)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.557 -17.806 2.738 13.143 49.649
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.7243 5.7785 4.106 0.000128 ***
## income 2.6886 0.2197 12.237 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.44 on 58 degrees of freedom
## Multiple R-squared: 0.7208, Adjusted R-squared: 0.716
## F-statistic: 149.7 on 1 and 58 DF, p-value: < 2.2e-16
dapat dilihat dari hasil, bahwa \(\beta_1=23.7243\) dan \(\beta_2=2.6886\). Sehingga estimasi dari \(y\) adalah:
\[
\hat{y} = \beta_1 + \beta_2 X \\
\hat{y} = 23.7243 + 2.6886 X
\] Lalu kita cari p-valuenya menggunakan anova()
## [1] 1.042827e-17
Dari hasil didapatkan bahwa \(p{-}value \leq \alpha\) dimana \(\alpha = 0.05\) yang berarti pada data insur, terhadap hubungan yang signifikan antara variabel pendapatan dan variabel biaya asuransi dengan tingkat kepercayaan 95%.
Pada bagian ini, saya mengambil data heart disease yang diambil untuk mengetahui hubungan persentase seseorang merokok dan bersepeda terhadap persen orang yang terkena penyakit jantung. Dimana terdapat 3 variabel, yaitu:
biking = persentase seorang bersepeda
smoking = persentase seorang merokok
heart.disease = persentase seorang terkena penyakit jantung
Pada kasus ini yang akan diselidiki hubungan antar variabel tersebut dengan tingkat kepercayaan 99% dan seberapa kuat hubungannya.
Langkah pertama adalah memastikan data yang ada sudah memenuhi asumsi.
Karena variabel bebasnya lebih dari 1, maka harus diperiksa apakah ada korelasi antar variabel. Jika korelasi mendekati 1 maka terdapat hubungan timpal balik positif. Jika mendekati 0, maka tidak ada korelasi. Dan jika mendekati -1 maka terdapat hubungan timpal balik negatif.
## [1] 0.01513618
Karena korelasi antar variabel bebasnya mendekati 0, maka dapat disimpulkan tidak terdapat korelasi.
Sama seperti sebelumnya, kita dapat menggunakan function hist()
avg2 <- mean(heart$heart.disease)
stdev2 <- sd(heart$heart.disease)
hist(heart$heart.disease, xlab = "Heart Disease", main="", freq=FALSE)
curve(dnorm(x, avg2, stdev2), add = TRUE, col="blue")Sama seperti sebelumnya, kita harus mengecek linearitasnya.
g2 <- ggplot(heart)+
geom_point(aes(x = smoking,
y = heart.disease),
shape = 1)+
geom_smooth(aes(x = smoking ,
y = heart.disease),
method = "lm",
formula = "y~x",
color = "red")
g3 <- ggplot(heart)+
geom_point(aes(x = biking,
y = heart.disease),
shape = 1)+
geom_smooth(aes(x = biking,
y = heart.disease),
method = "lm",
formula = "y~x",
color = "red")
grid.arrange(g2, g3, nrow = 1, ncol =2)Hipotesis dan tingkat signifikansinya adalah: \[ H_0 : \beta_{biking} = \beta_{smoking} = 0 \\ H_1 : \beta_{biking} \neq \beta_{smoking} \neq 0 \\ \alpha = 0.01 \]
##
## Call:
## lm(formula = heart.disease ~ biking + smoking, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.1789 -0.4463 0.0362 0.4422 1.9331
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.984658 0.080137 186.99 <2e-16 ***
## biking -0.200133 0.001366 -146.53 <2e-16 ***
## smoking 0.178334 0.003539 50.39 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.654 on 495 degrees of freedom
## Multiple R-squared: 0.9796, Adjusted R-squared: 0.9795
## F-statistic: 1.19e+04 on 2 and 495 DF, p-value: < 2.2e-16
dapat dilihat dari hasil, bahwa \(\beta_1=14.984658\), \(\beta_2=-0.200133\), dan \(\beta_3= 0.178334\). Sehingga estimasi dari \(y\) adalah:
\[
\hat{y} = \beta_1 + \beta_2 X_1 + \beta_3 X_2 \\
\hat{y} = 14.984658-0.200133X_1 + 0.178334X_2
\] Lalu kita cari p-valuenya menggunakan anova()
## [1] 0
Dari hasil didapatkan bahwa \(p{-}value \leq \alpha\) dimana \(\alpha = 0.01\). Berarti pada data heart.disease, terdapat hubungan yang signifikan antara variabel smoking dan variabel biking terhadap variabel heart.disease dengan tingkat kepercayaan 99%.
sama saat mengecek independensi, kuat hubungan variabel bebas dan terikat dapat dicari menggunakan cor().
## biking smoking
## -0.9354555 0.3091310
Dimana dari hasil dapat disimpulkan biking tidak memiliki hubungan dengan penyakit jantung atau dengan kata lain tidak menimbulkan penyakit jantung. Tetapi smoking memiliki korelasi yang lemah atau hubungan yang lemah untuk menimbulkan penyakit jantung.
##
## Call:
## lm(formula = heart.disease ~ biking + smoking, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.1789 -0.4463 0.0362 0.4422 1.9331
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.984658 0.080137 186.99 <2e-16 ***
## biking -0.200133 0.001366 -146.53 <2e-16 ***
## smoking 0.178334 0.003539 50.39 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.654 on 495 degrees of freedom
## Multiple R-squared: 0.9796, Adjusted R-squared: 0.9795
## F-statistic: 1.19e+04 on 2 and 495 DF, p-value: < 2.2e-16
kuadrat1 <- lm(heart.disease~(biking+smoking)^2, data=heart)
skuadrat1 <- summary(kuadrat1)
skuadrat1##
## Call:
## lm(formula = heart.disease ~ (biking + smoking)^2, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.20619 -0.44862 0.02892 0.44099 1.94142
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 15.0527397 0.1248112 120.604 <2e-16 ***
## biking -0.2019916 0.0029472 -68.536 <2e-16 ***
## smoking 0.1740065 0.0070359 24.731 <2e-16 ***
## biking:smoking 0.0001177 0.0001653 0.712 0.477
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6544 on 494 degrees of freedom
## Multiple R-squared: 0.9796, Adjusted R-squared: 0.9795
## F-statistic: 7922 on 3 and 494 DF, p-value: < 2.2e-16
kuadrat2 <- lm(heart.disease~I(biking^2)+I(smoking^2), data=heart)
skuadrat2 <- summary(kuadrat2)
skuadrat2##
## Call:
## lm(formula = heart.disease ~ I(biking^2) + I(smoking^2), data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3189 -0.8664 -0.0981 0.7664 3.6697
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.304e+01 1.038e-01 125.70 <2e-16 ***
## I(biking^2) -2.442e-03 3.222e-05 -75.80 <2e-16 ***
## I(smoking^2) 5.678e-03 2.102e-04 27.01 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.226 on 495 degrees of freedom
## Multiple R-squared: 0.9284, Adjusted R-squared: 0.9281
## F-statistic: 3210 on 2 and 495 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = heart.disease ~ poly(biking, 3) + smoking, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.13134 -0.44800 0.03562 0.44119 1.98212
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.41749 0.06199 119.653 <2e-16 ***
## poly(biking, 3)1 -95.84416 0.65349 -146.665 <2e-16 ***
## poly(biking, 3)2 -1.06107 0.65414 -1.622 0.105
## poly(biking, 3)3 0.36175 0.65344 0.554 0.580
## smoking 0.17862 0.00354 50.458 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6534 on 493 degrees of freedom
## Multiple R-squared: 0.9797, Adjusted R-squared: 0.9796
## F-statistic: 5960 on 4 and 493 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = heart.disease ~ poly(smoking, 3) + biking, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.12509 -0.45146 0.02807 0.43989 1.93414
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.731305 0.059372 298.645 <2e-16 ***
## poly(smoking, 3)1 32.957140 0.653228 50.453 <2e-16 ***
## poly(smoking, 3)2 0.596688 0.653927 0.912 0.362
## poly(smoking, 3)3 1.035422 0.653808 1.584 0.114
## biking -0.199976 0.001367 -146.287 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6532 on 493 degrees of freedom
## Multiple R-squared: 0.9798, Adjusted R-squared: 0.9796
## F-statistic: 5964 on 4 and 493 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = log(heart.disease) ~ biking + smoking, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.59285 -0.08401 0.04881 0.14200 0.37256
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.7338211 0.0296098 92.33 <2e-16 ***
## biking -0.0244554 0.0005047 -48.46 <2e-16 ***
## smoking 0.0238085 0.0013077 18.21 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2417 on 495 degrees of freedom
## Multiple R-squared: 0.8428, Adjusted R-squared: 0.8421
## F-statistic: 1327 on 2 and 495 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = heart.disease ~ log(biking) + log(smoking), data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.581 -1.249 0.349 1.546 4.275
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 21.6124 0.4631 46.67 <2e-16 ***
## log(biking) -4.5597 0.1067 -42.73 <2e-16 ***
## log(smoking) 1.5781 0.1109 14.22 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.03 on 495 degrees of freedom
## Multiple R-squared: 0.8037, Adjusted R-squared: 0.8029
## F-statistic: 1013 on 2 and 495 DF, p-value: < 2.2e-16
loglog1 <- lm(log(heart.disease)~log(biking)+log(smoking), data=heart)
sloglog1 <- summary(loglog1)
sloglog1##
## Call:
## lm(formula = log(heart.disease) ~ log(biking) + log(smoking),
## data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.8049 -0.1553 0.1113 0.2413 0.7898
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.31670 0.08637 38.40 <2e-16 ***
## log(biking) -0.51146 0.01990 -25.70 <2e-16 ***
## log(smoking) 0.23441 0.02069 11.33 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3786 on 495 degrees of freedom
## Multiple R-squared: 0.6141, Adjusted R-squared: 0.6125
## F-statistic: 393.8 on 2 and 495 DF, p-value: < 2.2e-16
loglog2 <-lm(log(heart.disease)~log(biking)+smoking, data=heart)
sloglog2 <- summary(loglog2)
sloglog2##
## Call:
## lm(formula = log(heart.disease) ~ log(biking) + smoking, data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9789 -0.1515 0.1184 0.2491 0.4774
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.54881 0.07663 46.31 <2e-16 ***
## log(biking) -0.51044 0.02001 -25.51 <2e-16 ***
## smoking 0.02270 0.00206 11.02 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3807 on 495 degrees of freedom
## Multiple R-squared: 0.6098, Adjusted R-squared: 0.6082
## F-statistic: 386.8 on 2 and 495 DF, p-value: < 2.2e-16
loglog3 <- lm(log(heart.disease)~biking+log(smoking), data=heart)
sloglog3 <- summary(loglog3)
sloglog3##
## Call:
## lm(formula = log(heart.disease) ~ biking + log(smoking), data = heart)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.41503 -0.08858 0.03096 0.13968 0.69374
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.4947444 0.0391877 63.66 <2e-16 ***
## biking -0.0244477 0.0005018 -48.72 <2e-16 ***
## log(smoking) 0.2425345 0.0131338 18.47 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2403 on 495 degrees of freedom
## Multiple R-squared: 0.8446, Adjusted R-squared: 0.844
## F-statistic: 1345 on 2 and 495 DF, p-value: < 2.2e-16
library(scales)
ringkasan <- data.frame(
"r.lm" = slm2$r.squared,
"r.sq1" = skuadrat1$r.squared,
"r.sq2" = skuadrat2$r.squared,
"r.polim1" = spolim1$r.squared,
"r.polim2" = spolim2$r.squared,
"loglin" = sloglin$r.squared,
"linlog" = slinlog$r.squared,
"r.loglog1" = sloglog1$r.squared,
"r.loglog2" = sloglog2$r.squared,
"r.loglog3" = sloglog3$r.squared
)
datatable(ringkasan)Dari ringkasan didapatkan bahwa Model terbaik adalah model yang memiliki \(R^2\) tertinggi. Pada kasus ini \(R^2\) tertinggi berada pada model polinomial metode 2 yaitu sebesar 0.979754381466797. Maka dapat disimpulkan model terbaik adalah Model Polinomial Metode 2 dimana variabel biking di polinomialkan.