Regresi Linear Sederhana merupakan teknik analisis statistik yang digunakan untuk menggambarkan hubungan antara satu peubah dependen dan satu peubah independen. Model ini dapat dinyatakan dalam bentuk persamaan linear, yaitu Y = a + bX. Dalam persamaan tersebut, Y adalah peubah dependen sedangkan X adalah peubah independen. Nilai a adalah intercept (besar Y ketika X = 0), dan b adalah koefisien regresi yang menunjukkan perubahan rata-rata dalam Y untuk setiap unit perubahan dalam X.
Data yang digunakan mencakup 111 negara diseluruh dunia. Pada analisis ini hanya digunakan dua peubah untuk menganalisis hubungan penghasilan dengan tingkat kebahagiaan karyawan. Untuk melihat struktur data, kita bisa menggunakan fungsi glimpse(). Terlihat bahwa, ada 11 peubah (8 peubah numerik dan 3 peubah kategorik) serta terdapat 111 amatan pada data.
data <- read.csv("happyscore_income.csv")
glimpse(data)
## Rows: 111
## Columns: 11
## $ country <chr> "Armenia", "Angola", "Argentina", "Austria", "Au…
## $ adjusted_satisfaction <dbl> 37, 26, 60, 59, 65, 46, 43, 63, 37, 34, 25, 20, …
## $ avg_satisfaction <dbl> 4.9, 4.3, 7.1, 7.2, 7.6, 5.8, 5.3, 7.2, 4.4, 4.6…
## $ std_satisfaction <dbl> 2.42, 3.19, 1.91, 2.11, 1.80, 2.27, 2.10, 1.72, …
## $ avg_income <dbl> 2096.760, 1448.880, 7101.120, 19457.040, 19917.0…
## $ median_income <dbl> 1731.507, 1044.240, 5109.400, 16879.620, 15846.0…
## $ income_inequality <dbl> 31.44556, 42.72000, 45.47556, 30.29625, 35.28500…
## $ region <chr> "'Central and Eastern Europe'", "'Sub-Saharan Af…
## $ happyScore <dbl> 4.350, 4.033, 6.574, 7.200, 7.284, 5.212, 4.694,…
## $ GDP <dbl> 0.76821, 0.75778, 1.05351, 1.33723, 1.33358, 1.0…
## $ country.1 <chr> "Armenia", "Angola", "Argentina", "Austria", "Au…
Fungsi summary() dapat digunakan untuk melihat ringkasan data. Pada langkah berikut, kita hanya menampilkan ringkasan dari peubah tingkat kebahagiaan (y) dan peubah penghasilan (x). Tingkat kebahagiaan memiliki skor 1 sampai 10, semakin besar nilainya mengindikasikan karyawan semakin bahagia. Hasil ringkasan menunjukkan bahwa peubah dependen (tingkat kebahagiaan) memiliki rata-rata 5,4 sedangkan pendapatan (income average) memiliki rata-rata $6442,8.
numerik <- data[sapply(data, is.numeric)]
summary(numerik)
## adjusted_satisfaction avg_satisfaction std_satisfaction avg_income
## Min. :19.00 Min. :2.500 Min. :1.380 Min. : 572.9
## 1st Qu.:40.00 1st Qu.:5.100 1st Qu.:1.910 1st Qu.: 1519.4
## Median :48.00 Median :6.000 Median :2.130 Median : 3889.3
## Mean :48.73 Mean :5.937 Mean :2.125 Mean : 6442.8
## 3rd Qu.:57.00 3rd Qu.:7.000 3rd Qu.:2.330 3rd Qu.: 7867.4
## Max. :74.00 Max. :8.500 Max. :3.190 Max. :26182.3
## median_income income_inequality happyScore GDP
## Min. : 415.5 Min. :24.21 Min. :2.839 Min. :0.0153
## 1st Qu.: 1167.7 1st Qu.:32.18 1st Qu.:4.568 1st Qu.:0.5099
## Median : 2647.0 Median :36.48 Median :5.268 Median :0.9186
## Mean : 5186.0 Mean :38.42 Mean :5.422 Mean :0.8419
## 3rd Qu.: 6581.1 3rd Qu.:43.38 3rd Qu.:6.392 3rd Qu.:1.1495
## Max. :22240.2 Max. :63.73 Max. :7.587 Max. :1.5639
# jika hanya ingin menampilkan peubah dependen dan independen, dapat menggunakan sintaks berikut: summary(data[, c(5,9)])
Scatter plot adalah grafik yang menampilkan nilai dari dua variabel dalam bentuk titik-titik pada bidang kartesius. Setiap titik pada scatter plot mewakili satu observasi, di mana satu variabel ditampilkan pada sumbu horizontal (X) dan variabel lainnya pada sumbu vertikal (Y). Dengan cara ini, scatter plot memungkinkan kita untuk melihat bagaimana dua variabel berhubungan satu sama lain. Berdasarkan plot dibawah, terdapat indikasi variabel X berhubungan secara linear dengan variabel Y.
# Plot
data$pc <- predict(prcomp(~happyScore+avg_income, data))[,1]
ggplot(data, aes(avg_income,happyScore, color=pc)) +
geom_point(shape = 16, size = 3.5, show.legend = FALSE, alpha=0.5) +
theme_minimal() + geom_smooth(formula=y~x,method = 'lm', col='black')+
scale_color_gradient(low = "#0091ff", high = "#f0650e")+ labs(x="Rataan Pendapatan ($)", y="Tingkat Kebahagiaan")+ scale_x_continuous(labels = label_number(suffix = "K", scale = 1e-3))
# Model Regresi
MRL <- lm(happyScore~avg_income, data)
summary(MRL)
##
## Call:
## lm(formula = happyScore ~ avg_income, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.7981 -0.4940 -0.0584 0.4584 2.0922
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.504e+00 9.916e-02 45.42 <2e-16 ***
## avg_income 1.425e-04 1.088e-05 13.10 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7392 on 109 degrees of freedom
## Multiple R-squared: 0.6117, Adjusted R-squared: 0.6082
## F-statistic: 171.7 on 1 and 109 DF, p-value: < 2.2e-16
Uji asumsi dalam analisis regresi adalah serangkaian tes yang dilakukan untuk memastikan bahwa model regresi yang digunakan memenuhi asumsi-asumsi dasar yang diperlukan agar hasil analisis menjadi valid.
Uji normalitas bertujuan untuk memastikan bahwa residual dari model regresi mengikuti distribusi normal. Hal ini penting karena banyak uji statistik, seperti uji t dan F, mengasumsikan bahwa residual berdistribusi normal. Metode yang umum digunakan untuk menguji normalitas adalah uji Shapiro-Wilk dan uji Kolmogorov-Smirnov. Normalitas juga dapat dilihat dari representasi grafis dari distribusi frekuensi data. Dalam konteks uji normalitas, histogram dapat menunjukkan apakah data membentuk pola distribusi normal (kurva lonceng). Jika histogram menunjukkan bentuk yang simetris dan berbentuk lonceng, maka data dapat dianggap berdistribusi normal.
ggplot(data, aes(x=happyScore)) +
geom_histogram(binwidth=.6, fill = "lightblue", alpha=0.9)+ labs(x="Tingkat Kebahagiaan", y="Jumlah")
ggplot(data, aes(x=happyScore))+
geom_density(color="darkblue", fill="lightblue")+ labs(x="Tingkat Kebahagiaan", y="density")
\(H_0 =\) Residual berdistribusi normal \(H_1 =\) Residual tidak berdistribusi normal
Berdasarkan uji normalitas menggunakan Shapiro-Wilk, diperoleh \(P-Value > \alpha\) maka kita gagal menolak \(H_0\). Ini berarti tidak ada cukup bukti untuk menyatakan bahwa data tidak berdistribusi normal, sehingga kita dapat menyimpulkan bahwa data tersebut berdistribusi normal.
shapiro.test(residuals(MRL))
##
## Shapiro-Wilk normality test
##
## data: residuals(MRL)
## W = 0.9951, p-value = 0.9659
Homoskedastisitas adalah kondisi di mana varians/ragam dari residual tetap konstan di seluruh rentang nilai variabel independen. Jika asumsi ini tidak terpenuhi disebut heteroskedastisitas, model regresi dapat memberikan estimasi yang tidak efisien dan hasil uji hipotesis yang tidak valid. Berdasarkan uji homokedastisitas dengan hipotesis: \(H_0 =\) Ragam Homogen \(H_1 =\) Ragam tidak homogen
diperoleh kesimpulan \(P-Value > \alpha\) maka kita gagal menolak \(H_0\). Ini berarti tidak ada cukup bukti untuk menyatakan bahwa ragam dari data tidak homogen, sehingga kita dapat menyimpulkan bahwa data tersebut memenuhi asumsi homokedastisitas.
library(lmtest)
bptest(MRL, data=data)
##
## studentized Breusch-Pagan test
##
## data: MRL
## BP = 1.5083, df = 1, p-value = 0.2194
Autokorelasi terjadi ketika residual dari model regresi tidak independen satu sama lain. Ini sering terjadi dalam data time series. Uji Durbin-Watson adalah salah satu metode yang dapat digunakan untuk mendeteksi autokorelasi. Berdasarkan uji Durbin-Watson dengan hipotesis: \(H_0 =\) Tidak ada autokorelasi dari galat \(H_1 =\) Ada auto korelasi dari galat
diperoleh kesimpulan \(P-Value > \alpha\) maka kita gagal menolak \(H_0\). Ini berarti tidak ada cukup bukti untuk menyatakan bahwa ada autokorelasi dari galat, sehingga kita dapat menyimpulkan bahwa data tersebut memenuhi asumsi Autokorelasi.
library(lmtest)
dwtest(MRL)
##
## Durbin-Watson test
##
## data: MRL
## DW = 1.9291, p-value = 0.3462
## alternative hypothesis: true autocorrelation is greater than 0
Berdasarkan model yang terbentuk, diperoleh intercept sebesar 4.5 dan kemiringan (slope) sebesar 0.00014. Kenaikan gaji sebesar 1 satuan (1$) dapat meningkatkan kebahagiaan sebesar 0.00014 dengan menganggap variabel lain konstan.
Nilai \(R-squared = 0.61\) artinya tingkat kebahagiaan (happy score) dapat dijelaskan oleh rata-rata pendapatan (income) sebesar 61% sedangkan 39% dijelaskan oleh faktor lain diluar model.
A <- ggplot(data, aes(avg_income,happyScore)) + geom_point(shape = 16, size = 5.5, show.legend = FALSE, alpha=0.5) +
theme_minimal() +
scale_color_gradient(low = "#0091ff", high = "#f0650e")+ labs(y="Tingkat Kebahagiaan", x="Pendapatan ($)")+ scale_x_continuous(labels = label_number(suffix = "K", scale = 1e-3))
B <- A+geom_smooth(formula=y~x,method = 'lm', col='black')+
stat_regline_equation(aes(label=paste(..eq.label.., ..rr.label..,sep = "~~~~~~~")),label.x =2000, label.y = 8.3, position = "identity",geom = "label")
B