Instal Package

install.packages(“ggplot2”) install.packages(“dplyr”) install.packages(“broom”) install.packages(“ggpubr”) library(ggplot2) library(dplyr) library(broom) library(ggpubr)

library(readxl)
Data_Pendapatan <- read_excel("C:/Users/tengk/Downloads/Data Pendapatan.xlsx")
View(Data_Pendapatan)
  1. Gunakan (plot) histogram untuk cek apakah variabel terikat berdistribusi normal atau tidak. Jelaskan interpretasi histogram tersebut!
#histogram dari buku
hist(Data_Pendapatan$kebahagiaan, col=' steelblue ', main=' Histogram Pendapatan ')

library(ggplot2)

#gada garis tapi kelihatan rentang
ggplot(Data_Pendapatan, aes(x = kebahagiaan)) +
  geom_histogram(binwidth = 1, fill = "skyblue", color = "white") +
  labs(title = "Distribusi Skor Kebahagiaan",
       x = "Skor Kebahagiaan",
       y = "Frekuensi") +
  theme_minimal()

#Ada garisnya
library(ggplot2)

ggplot(Data_Pendapatan, aes(x = kebahagiaan)) +
  geom_histogram(aes(y = ..density..),
                 fill = "skyblue", color = "white", bins = 10) +
  stat_function(fun = dnorm,
                args = list(mean = mean(Data_Pendapatan$kebahagiaan),
                            sd = sd(Data_Pendapatan$kebahagiaan)),
                color = "red", size = 1.2) +
  labs(title = "Distribusi Skor Kebahagiaan dengan Kurva Normal",
       x = "Skor Kebahagiaan",
       y = "Kerapatan (Density)") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Tujuan dari melihat histogram ini adalah untuk melakukan inspeksi visual (pemeriksaan mata) apakah variabel terikat (Pendapatan) mengikuti Distribusi Normal atau tidak.

Distribusi Normal dicirikan oleh bentuk lonceng (bell shape) yang simetris, di mana frekuensi tertinggi (modus) berada di tengah, dan frekuensi berkurang secara bertahap menuju kedua ujung (ekor).

Berdasarkan cisualisasi histogram diatas : Berdasarkan hasil visualisasi histogram distribusi skor kebahagiaan dengan kurva normal, dapat dilihat bahwa bentuk histogram tampak menyerupai pola lonceng (bell-shaped curve) yang merupakan ciri khas dari distribusi normal. Frekuensi data paling banyak berada di sekitar nilai tengah, kemudian menurun secara bertahap ke arah kanan dan kiri secara relatif seimbang. Selain itu, garis lengkung merah yang merepresentasikan distribusi normal terlihat mengikuti pola batang histogram dengan cukup baik, tanpa adanya penyimpangan yang signifikan ke salah satu sisi. Hal ini menunjukkan bahwa sebaran data variabel kebahagiaan cenderung simetris dan tidak memiliki kemencengan (skewness) yang besar. Dengan demikian, dapat disimpulkan bahwa variabel terikat, yaitu kebahagiaan, memiliki distribusi yang mendekati normal. Kondisi ini mengindikasikan bahwa asumsi normalitas terpenuhi, sehingga data layak digunakan dalam analisis regresi linear karena salah satu syarat penting regresi, yaitu data berdistribusi normal, telah terpenuhi secara visual. Dapat disimpulkan bahwa data berdistribusi NORMAL karena dari bentuk distribusi yang membentuk lonceng, kemencengan atau kesimetrisan terlihat jelas ke kanan maupun kekiri, puncak juga terlihat jelas.

  1. Gunakan scatter plot untuk cek apakah variabel terikat dan bebas memiliki hubungan linear. Interpretasikan hasil grafik tersebut! (10 poin)
#Plot biasa dari Buku
plot(Data_Pendapatan$pendapatan, Data_Pendapatan$kebahagiaan, main = "Pendapatan vs Kebahagiaan", xlab = "Pendapatan", ylab = "Kebahagiaan", pch = 19, col = "maroon")

#Lebin informatif
library(ggplot2)

ggplot(Data_Pendapatan, aes(x = pendapatan, y = kebahagiaan)) +
  geom_point(color = "pink", size = 2) +
  geom_smooth(method = "lm", color = "green", se = FALSE) +
  labs(title = "Hubungan Linear antara Pendapatan dan Kebahagiaan",
       x = "Pendapatan (juta rupiah)",
       y = "Skor Kebahagiaan") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Interpretasi: * Arah Hubungan : Titik-titik pada scatter plot menunjukkan pola yang cenderung naik dari kiri bawah ke kanan atas. Artinya, terdapat hubungan positif antara pendapatan dan kebahagiaan: semakin tinggi pendapatan, semakin tinggi tingkat kebahagiaan. * Bentuk Hubungan : Pola sebaran titik tampak mengikuti garis lurus (tidak melengkung), sehingga hubungan antara kedua variabel cenderung linear. Ini berarti model regresi linear berpotensi cocok digunakan untuk menganalisis hubungan keduanya. * Kekuatan Hubungan : Titik-titik data cukup terpusat di sekitar pola garis naik, meskipun tetap ada variasi (scatter). Hal ini menunjukkan bahwa hubungannya cukup kuat tetapi tidak sempurna—variabel pendapatan bukan satu-satunya faktor yang memengaruhi kebahagian * Outlier : Secara visual, tidak terlihat outlier ekstrem yang menyimpang jauh dari pola umum. Ini menunjukkan data relatif bersih dan konsisten.

Sehingga, Berdasarkan scatter plot, terdapat hubungan linear positif yang cukup jelas antara pendapatan dan kebahagiaan. Dengan demikian, regresi linear dapat digunakan, dan pendapatan tampaknya merupakan prediktor yang cukup baik untuk kebahagiaan.

  1. Lakukan regresi linear sederhana dan jelaskan hasil regresi tersebut! (20 poin)
reg_lin <- lm(Data_Pendapatan$kebahagiaan ~ Data_Pendapatan$pendapatan, data=Data_Pendapatan)
summary(reg_lin)
## 
## Call:
## lm(formula = Data_Pendapatan$kebahagiaan ~ Data_Pendapatan$pendapatan, 
##     data = Data_Pendapatan)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.02292 -0.47796  0.03729  0.44564  2.38002 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                 0.20906    0.08962   2.333   0.0201 *  
## Data_Pendapatan$pendapatan  0.71239    0.01870  38.089   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.724 on 496 degrees of freedom
## Multiple R-squared:  0.7452, Adjusted R-squared:  0.7447 
## F-statistic:  1451 on 1 and 496 DF,  p-value: < 2.2e-16

*Persamaan Regresi : Y = 0,20906 + 0,71239X dengan Y= Kebahagiaan dan X = Pendapatan Artinya:

Nilai intersep (0.20906) menunjukkan bahwa jika pendapatan = 0, maka kebahagiaan diperkirakan sebesar 0.209 (meskipun secara praktis tidak selalu relevan).

Nilai koefisien regresi (0.71239) berarti setiap kenaikan 1 satuan pendapatan, kebahagiaan akan meningkat sebesar 0.712, dengan asumsi faktor lain konstan.

*Uji Signifikansi Koefisien Nilai t = 38.089 dan p-value < 2e-16, yang jauh lebih kecil dari 0.05.Artinya, pendapatan berpengaruh signifikan terhadap kebahagiaan.

*Uji Goodness of fit (Kebaikan Model) R-squared = 0.7452 Artinya, 74,52% variasi dalam kebahagiaan dapat dijelaskan oleh pendapatan. Sisanya (25,48%) dijelaskan oleh faktor lain di luar model (misalnya kesehatan, lingkungan sosial, dll).

Adjusted R-squared = 0.7447, hampir sama dengan R², menandakan model cukup stabil.

Sehingga dapat disimpulkan bahwa : Model regresi sederhana menunjukkan bahwa: Terdapat hubungan positif dan signifikan antara pendapatan dan kebahagiaa; pendapatan dapat menjelaskan sekitar 74,5% variasi kebahagiaan, sehingga merupakan faktor yang cukup kuat memengaruhi kebahagiaa; model layak digunakan untuk prediksi kebahagiaan berdasarkan pendapatan.

  1. Gunakan perintah plot(nama variabel regresi kalian) untuk cek homoskedastisitas. Interpretasikan hasil plot (20 poin).
#install.packages("lmtest") 
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(reg_lin)
## 
##  studentized Breusch-Pagan test
## 
## data:  reg_lin
## BP = 1.319, df = 1, p-value = 0.2508

Interpretasi Hasil: Hipotesis Nol : Ragam sisaan (residual) adalah homogen (asumsi homoskedastisitas terpenuhi). Hipotesis Alternatif : Ragam sisaan (residual) adalah tidak homogen (terjadi heteroskedastisitas). Kriteria Keputusan: Jika p-value > Tingkat Signifikansi (alpha 0.05): Gagal tolak H0. Kesimpulan: Asumsi homoskedastisitas terpenuhi (ragam homogen) artinya Model regresi linear dianggap valid dari sisi asumsi ini.

plot(reg_lin, which = 1)

Dari grafik diatas, Homoskedastisitas terpenuhi karena titik-titik residual tersebar secara acak di sekitar garis horizontal di y=0, tanpa pola yang jelas.

Kedua hasil (visual dan statistik) sama-sama menyimpulkan bahwa asumsi homoskedastisitas terpenuhi.

  1. Visualisasikan hasil regresi menggunakan grafik dengan langkah-langkah berikut:
  1. Plot data points pada grafik (10 poin)
  2. Tambahkan garis regresi linear pada data yang sudah diplot (10 poin)
plot(Data_Pendapatan$pendapatan,Data_Pendapatan$kebahagiaan,
  main = "Hubungan Pendapatan dan Tingkat Kebahagiaan", 
  # Judul
  xlab = "Pendapatan (Jutaan Rupiah/Satuan)",       
  # Label Sumbu X
  ylab = "Tingkat Kebahagiaan",               
  # Label Sumbu Y
  pch = 19,                                    
  # Bentuk titik (lingkaran solid)
  col = "darkblue"                              
  # Warna titik
  )
abline(reg_lin, col="red", lwd=2) #menambahkan garis linear pada data sudah di plot

  1. Tambah persamaan untuk garis linear (10 poin)
  2. Beri judul dan label yang sesuai untuk sumbu x dan y (10 poin)
# Pastikan paketnya sudah terinstal (jalankan sekali saja di console, bukan di Rmd)
# install.packages("ggplot2")

library(ggplot2)

# Buat model regresi linear
model <- lm(kebahagiaan ~ pendapatan, data = Data_Pendapatan)

# Ambil nilai penting dari model
a <- coef(model)[1]  # intercept
b <- coef(model)[2]  # slope
summary_model <- summary(model)
p_value <- summary_model$coefficients[2, 4]
adj_r2 <- summary_model$adj.r.squared

# Buat teks keterangan
eq <- paste0("y = ", round(a, 2), " + ", round(b, 2), "x")
info <- paste0("Adjusted R² = ", round(adj_r2, 3), 
               "\nP-value = ", round(p_value, 4))

# Plot dengan ggplot2
ggplot(Data_Pendapatan, aes(x = pendapatan, y = kebahagiaan)) +
  geom_point(color = "blue", size = 2) +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(title = "Hubungan Linear antara Pendapatan dan Kebahagiaan",
       x = "Pendapatan (juta rupiah)",
       y = "Skor Kebahagiaan") +
  annotate("text",
           x = Inf, y = -Inf,
           label = paste(eq, info, sep = "\n"),
           hjust = 1.1, vjust = -0.5,
           color = "red", size = 4) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'