1 Pendahuluan

Analisis ini bertujuan mengkaji faktor-faktor yang berhubungan dengan pengeluaran konsumsi bulanan rumah tangga menggunakan regresi linier berganda metode Ordinary Least Squares (OLS). Variabel yang dianalisis mengikuti instruksi tugas, yaitu:

Model regresi yang digunakan:

\[ Y_i = \beta_0 + \beta_1X_{1i} + \beta_2X_{2i} + \beta_3X_{3i} + \beta_4X_{4i} + \beta_5X_{5i} + \varepsilon_i \]

Catatan tentang data: file Excel yang ikut terlampir pada percakapan berisi 10 observasi UMR Kota Semarang tahun 2013–2022, bukan 200 observasi rumah tangga seperti yang diminta dalam soal. Oleh karena itu, agar dokumen ini dapat dijalankan dari awal sampai akhir, kode di bawah secara default membangkitkan data simulasi sebanyak 200 rumah tangga dengan set.seed(2026). Data simulasi bukan data asli dari dosen. Jika dosen menyediakan file data 200 rumah tangga, ubah pengaturan pada bagian Persiapan Data dan gunakan file tersebut sebelum mengumpulkan tugas.

2 Persiapan

3 Persiapan Data

# TRUE  = gunakan data simulasi 200 rumah tangga agar file langsung dapat dijalankan.
# FALSE = baca data asli dari file Excel yang disediakan dosen.
gunakan_data_simulasi <- TRUE

if (gunakan_data_simulasi) {

  # Membuat data simulasi secara reproducible
  set.seed(2026)
  n <- 200

  # X5: dummy wilayah (0 = perdesaan, 1 = perkotaan)
  wilayah <- rbinom(n, size = 1, prob = 0.55)

  # X3: pendidikan kepala keluarga dalam tahun pendidikan
  pendidikan <- sample(
    c(6, 9, 12, 15, 16),
    size = n,
    replace = TRUE,
    prob = c(0.12, 0.18, 0.42, 0.18, 0.10)
  )

  # X4: usia kepala keluarga
  usia <- round(rnorm(n, mean = 42, sd = 9))
  usia <- pmin(pmax(usia, 25), 65)

  # X2: jumlah anggota keluarga
  anggota_keluarga <- sample(
    1:7, size = n, replace = TRUE,
    prob = c(0.05, 0.12, 0.20, 0.25, 0.20, 0.12, 0.06)
  )

  # X1: pendapatan bulanan rumah tangga dalam juta rupiah
  pendapatan <- exp(
    rnorm(
      n,
      mean = log(5.5) + 0.025 * (pendidikan - 12) + 0.12 * wilayah,
      sd = 0.25
    )
  )

  # Komponen galat simulasi
  galat <- rnorm(n, mean = 0, sd = 0.55)

  # Y: konsumsi bulanan rumah tangga dalam juta rupiah
  konsumsi <- 0.35 +
    0.58 * pendapatan +
    0.22 * anggota_keluarga +
    0.035 * pendidikan -
    0.002 * usia +
    0.30 * wilayah +
    galat

  konsumsi <- pmax(konsumsi, 0.5)

  data_rt <- data.frame(
    konsumsi = konsumsi,
    pendapatan = pendapatan,
    anggota_keluarga = anggota_keluarga,
    pendidikan = pendidikan,
    usia = usia,
    wilayah = wilayah
  )

} else {

  # Letakkan file data asli bernama data_rumah_tangga.xlsx
  # di folder yang sama dengan file R Markdown ini.
  data_asli <- readxl::read_excel("data_rumah_tangga.xlsx")

  # Sesuaikan nama kolom di sebelah kanan (= data_asli[["..."]])
  # dengan nama kolom yang benar pada file Excel dosen.
  # Format variabel yang dibutuhkan:
  # Y, X1, X2, X3, X4, X5.
  data_rt <- data.frame(
    konsumsi = data_asli[["Y"]],
    pendapatan = data_asli[["X1"]],
    anggota_keluarga = data_asli[["X2"]],
    pendidikan = data_asli[["X3"]],
    usia = data_asli[["X4"]],
    wilayah = data_asli[["X5"]]
  )
}

# Memastikan seluruh variabel berformat numerik
kolom_model <- c(
  "konsumsi", "pendapatan", "anggota_keluarga",
  "pendidikan", "usia", "wilayah"
)

if (!all(kolom_model %in% names(data_rt))) {
  stop("Nama variabel pada data tidak lengkap. Periksa kembali bagian import data.")
}

if (!all(vapply(data_rt[kolom_model], is.numeric, logical(1)))) {
  stop("Semua variabel harus numerik. Pastikan X5 sudah dikodekan 0 dan 1.")
}

if (anyNA(data_rt[kolom_model])) {
  stop("Data mengandung NA. Periksa dan tangani missing value terlebih dahulu.")
}

if (!all(data_rt$wilayah %in% c(0, 1))) {
  stop("Variabel wilayah harus berupa dummy: 0 = perdesaan dan 1 = perkotaan.")
}

if (nrow(data_rt) != 200) {
  warning("Jumlah observasi bukan 200. Periksa kembali kesesuaian data dengan instruksi tugas.")
}

# Membuat label wilayah untuk visualisasi
data_rt$wilayah_label <- factor(
  data_rt$wilayah,
  levels = c(0, 1),
  labels = c("Perdesaan", "Perkotaan")
)

cat("Jumlah observasi:", nrow(data_rt), "\n")
#> Jumlah observasi: 200
cat("Jumlah variabel:", length(kolom_model), "\n")
#> Jumlah variabel: 6
cat("Data yang digunakan:",
    ifelse(gunakan_data_simulasi, "Simulasi", "Data Excel dosen"), "\n")
#> Data yang digunakan: Simulasi

3.1 Melihat data

# Menampilkan 10 baris pertama
knitr::kable(
  head(data_rt[, kolom_model], 10),
  digits = 3,
  caption = "Sepuluh observasi pertama"
)
Sepuluh observasi pertama
konsumsi pendapatan anggota_keluarga pendidikan usia wilayah
6.333 6.350 7 6 38 0
5.249 6.439 5 15 46 0
5.815 5.770 6 12 40 1
7.221 9.537 2 16 25 1
5.025 5.438 4 12 39 0
6.278 6.335 7 15 58 1
5.974 6.414 5 12 38 1
5.724 5.173 7 16 37 0
3.631 5.414 4 6 41 1
4.576 6.440 2 9 57 0
# Struktur dan ringkasan awal data
str(data_rt[, kolom_model])
#> 'data.frame':    200 obs. of  6 variables:
#>  $ konsumsi        : num  6.33 5.25 5.82 7.22 5.02 ...
#>  $ pendapatan      : num  6.35 6.44 5.77 9.54 5.44 ...
#>  $ anggota_keluarga: int  7 5 6 2 4 7 5 7 4 2 ...
#>  $ pendidikan      : num  6 15 12 16 12 15 12 16 6 9 ...
#>  $ usia            : num  38 46 40 25 39 58 38 37 41 57 ...
#>  $ wilayah         : int  0 0 1 1 0 1 1 0 1 0 ...
summary(data_rt[, kolom_model])
#>     konsumsi       pendapatan     anggota_keluarga   pendidikan   
#>  Min.   :2.647   Min.   : 3.013   Min.   :1.00     Min.   : 6.00  
#>  1st Qu.:4.450   1st Qu.: 4.994   1st Qu.:3.00     1st Qu.: 9.00  
#>  Median :5.141   Median : 5.679   Median :4.00     Median :12.00  
#>  Mean   :5.245   Mean   : 6.029   Mean   :3.98     Mean   :11.77  
#>  3rd Qu.:5.820   3rd Qu.: 6.926   3rd Qu.:5.00     3rd Qu.:15.00  
#>  Max.   :9.780   Max.   :11.765   Max.   :7.00     Max.   :16.00  
#>       usia          wilayah     
#>  Min.   :25.00   Min.   :0.000  
#>  1st Qu.:36.00   1st Qu.:0.000  
#>  Median :42.00   Median :1.000  
#>  Mean   :42.21   Mean   :0.605  
#>  3rd Qu.:48.00   3rd Qu.:1.000  
#>  Max.   :61.00   Max.   :1.000

4 Statistik Deskriptif

Statistik deskriptif digunakan untuk menggambarkan karakteristik setiap variabel melalui jumlah observasi, rata-rata, median, standar deviasi, nilai minimum, dan maksimum.

deskriptif <- data.frame(
  Variabel = c(
    "Konsumsi rumah tangga (Y)",
    "Pendapatan rumah tangga (X1)",
    "Jumlah anggota keluarga (X2)",
    "Pendidikan kepala keluarga (X3)",
    "Usia kepala keluarga (X4)",
    "Wilayah (X5: 0 perdesaan, 1 perkotaan)"
  ),
  N = sapply(data_rt[kolom_model], function(x) sum(!is.na(x))),
  Rata_rata = sapply(data_rt[kolom_model], mean),
  Median = sapply(data_rt[kolom_model], median),
  Standar_deviasi = sapply(data_rt[kolom_model], sd),
  Minimum = sapply(data_rt[kolom_model], min),
  Maksimum = sapply(data_rt[kolom_model], max)
)

knitr::kable(
  deskriptif,
  digits = 3,
  caption = "Statistik deskriptif seluruh variabel"
)
Statistik deskriptif seluruh variabel
Variabel N Rata_rata Median Standar_deviasi Minimum Maksimum
konsumsi Konsumsi rumah tangga (Y) 200 5.245 5.141 1.193 2.647 9.780
pendapatan Pendapatan rumah tangga (X1) 200 6.029 5.679 1.520 3.013 11.765
anggota_keluarga Jumlah anggota keluarga (X2) 200 3.980 4.000 1.638 1.000 7.000
pendidikan Pendidikan kepala keluarga (X3) 200 11.765 12.000 3.137 6.000 16.000
usia Usia kepala keluarga (X4) 200 42.210 42.000 8.546 25.000 61.000
wilayah Wilayah (X5: 0 perdesaan, 1 perkotaan) 200 0.605 1.000 0.490 0.000 1.000
frekuensi_wilayah <- as.data.frame(
  table(data_rt$wilayah_label)
)

names(frekuensi_wilayah) <- c("Wilayah", "Jumlah")
frekuensi_wilayah$Persentase <- round(
  frekuensi_wilayah$Jumlah / sum(frekuensi_wilayah$Jumlah) * 100, 2
)

knitr::kable(
  frekuensi_wilayah,
  caption = "Distribusi rumah tangga berdasarkan wilayah"
)
Distribusi rumah tangga berdasarkan wilayah
Wilayah Jumlah Persentase
Perdesaan 79 39.5
Perkotaan 121 60.5

4.1 Visualisasi statistik deskriptif

ggplot(data_rt, aes(x = konsumsi)) +
  geom_histogram(
    bins = 20,
    fill = "steelblue",
    color = "white"
  ) +
  geom_vline(
    xintercept = mean(data_rt$konsumsi),
    color = "red",
    linetype = "dashed",
    size = 1
  ) +
  labs(
    title = "Distribusi Pengeluaran Konsumsi Rumah Tangga",
    x = "Konsumsi bulanan (juta rupiah)",
    y = "Frekuensi"
  ) +
  theme_minimal()

ggplot(data_rt, aes(x = pendapatan, y = konsumsi)) +
  geom_point(alpha = 0.65, color = "steelblue") +
  geom_smooth(method = "lm", se = TRUE, color = "red") +
  labs(
    title = "Hubungan Pendapatan dan Konsumsi Rumah Tangga",
    x = "Pendapatan bulanan (juta rupiah)",
    y = "Konsumsi bulanan (juta rupiah)"
  ) +
  theme_minimal()

ggplot(data_rt, aes(x = wilayah_label, y = konsumsi, fill = wilayah_label)) +
  geom_boxplot(alpha = 0.75) +
  labs(
    title = "Perbandingan Konsumsi Berdasarkan Wilayah Tempat Tinggal",
    x = "Wilayah tempat tinggal",
    y = "Konsumsi bulanan (juta rupiah)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

5 Estimasi Regresi Linier Berganda (OLS)

Model yang diestimasi adalah:

\[ Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \beta_3X_3 + \beta_4X_4 + \beta_5X_5 + \varepsilon \]

# Estimasi parameter menggunakan Ordinary Least Squares (OLS)
model <- lm(
  konsumsi ~ pendapatan + anggota_keluarga +
    pendidikan + usia + wilayah,
  data = data_rt
)

# Ringkasan hasil regresi
summary(model)
#> 
#> Call:
#> lm(formula = konsumsi ~ pendapatan + anggota_keluarga + pendidikan + 
#>     usia + wilayah, data = data_rt)
#> 
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -1.65828 -0.31835 -0.01333  0.32610  1.73790 
#> 
#> Coefficients:
#>                    Estimate Std. Error t value             Pr(>|t|)    
#> (Intercept)      -0.0632840  0.3017563  -0.210             0.834107    
#> pendapatan        0.6149879  0.0272047  22.606 < 0.0000000000000002 ***
#> anggota_keluarga  0.2189250  0.0242158   9.041 < 0.0000000000000002 ***
#> pendidikan        0.0490530  0.0130155   3.769             0.000218 ***
#> usia              0.0001463  0.0046505   0.031             0.974935    
#> wilayah           0.2419429  0.0811456   2.982             0.003235 ** 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.5521 on 194 degrees of freedom
#> Multiple R-squared:  0.7911, Adjusted R-squared:  0.7857 
#> F-statistic: 146.9 on 5 and 194 DF,  p-value: < 0.00000000000000022

5.1 Tabel estimasi koefisien

hasil_summary <- summary(model)
matriks_koef <- hasil_summary$coefficients
interval_kepercayaan <- confint(model)

tabel_koefisien <- data.frame(
  Parameter = rownames(matriks_koef),
  Estimasi = matriks_koef[, 1],
  Std_Error = matriks_koef[, 2],
  t_hitung = matriks_koef[, 3],
  p_value = matriks_koef[, 4],
  CI_95_Bawah = interval_kepercayaan[, 1],
  CI_95_Atas = interval_kepercayaan[, 2],
  row.names = NULL
)

knitr::kable(
  tabel_koefisien,
  digits = 4,
  caption = "Estimasi parameter regresi linier berganda"
)
Estimasi parameter regresi linier berganda
Parameter Estimasi Std_Error t_hitung p_value CI_95_Bawah CI_95_Atas
(Intercept) -0.0633 0.3018 -0.2097 0.8341 -0.6584 0.5319
pendapatan 0.6150 0.0272 22.6060 0.0000 0.5613 0.6686
anggota_keluarga 0.2189 0.0242 9.0406 0.0000 0.1712 0.2667
pendidikan 0.0491 0.0130 3.7688 0.0002 0.0234 0.0747
usia 0.0001 0.0047 0.0315 0.9749 -0.0090 0.0093
wilayah 0.2419 0.0811 2.9816 0.0032 0.0819 0.4020

5.2 Persamaan regresi

b <- coef(model)

cat(
  "Persamaan regresi estimasi:\n",
  "Y = ", round(b[1], 4),
  " + (", round(b[2], 4), ")X1",
  " + (", round(b[3], 4), ")X2",
  " + (", round(b[4], 4), ")X3",
  " + (", round(b[5], 4), ")X4",
  " + (", round(b[6], 4), ")X5\n",
  sep = ""
)
#> Persamaan regresi estimasi:
#> Y = -0.0633 + (0.615)X1 + (0.2189)X2 + (0.0491)X3 + (0.0001)X4 + (0.2419)X5

6 Uji Asumsi Klasik

Uji asumsi dilakukan terhadap residual dan hubungan antarvariabel penjelas. Taraf signifikansi yang digunakan adalah 5% (\(\alpha = 0,05\)).

6.1 Uji normalitas residual (Shapiro-Wilk)

Hipotesis:

  • H0: residual berdistribusi normal.
  • H1: residual tidak berdistribusi normal.

Keputusan: jika p-value > 0,05, tidak terdapat bukti yang cukup untuk menyatakan residual menyimpang dari distribusi normal.

uji_normalitas <- shapiro.test(residuals(model))

tabel_normalitas <- data.frame(
  Metode = "Shapiro-Wilk",
  Statistik_W = unname(uji_normalitas$statistic),
  p_value = uji_normalitas$p.value,
  Keputusan = ifelse(
    uji_normalitas$p.value > 0.05,
    "Tidak menolak H0: residual konsisten dengan normalitas",
    "Menolak H0: terdapat indikasi residual tidak normal"
  )
)

knitr::kable(
  tabel_normalitas,
  digits = 5,
  caption = "Hasil uji normalitas residual"
)
Hasil uji normalitas residual
Metode Statistik_W p_value Keputusan
Shapiro-Wilk 0.99489 0.7339 Tidak menolak H0: residual konsisten dengan normalitas

6.2 Uji multikolinearitas (VIF dan Tolerance)

Multikolinearitas diperiksa menggunakan Variance Inflation Factor (VIF) dan Tolerance. Pedoman yang digunakan adalah VIF < 10 dan Tolerance > 0,10.

nilai_vif <- car::vif(model)

tabel_vif <- data.frame(
  Variabel = names(nilai_vif),
  VIF = as.numeric(nilai_vif),
  Tolerance = 1 / as.numeric(nilai_vif)
)

tabel_vif$Keputusan <- ifelse(
  tabel_vif$VIF < 10 & tabel_vif$Tolerance > 0.10,
  "Tidak terindikasi multikolinearitas tinggi",
  "Terindikasi multikolinearitas"
)

knitr::kable(
  tabel_vif,
  digits = 4,
  caption = "Hasil uji multikolinearitas"
)
Hasil uji multikolinearitas
Variabel VIF Tolerance Keputusan
pendapatan 1.1168 0.8954 Tidak terindikasi multikolinearitas tinggi
anggota_keluarga 1.0273 0.9734 Tidak terindikasi multikolinearitas tinggi
pendidikan 1.0883 0.9188 Tidak terindikasi multikolinearitas tinggi
usia 1.0315 0.9695 Tidak terindikasi multikolinearitas tinggi
wilayah 1.0326 0.9684 Tidak terindikasi multikolinearitas tinggi

6.3 Uji heteroskedastisitas (Breusch-Pagan)

Hipotesis:

  • H0: varians residual konstan (homoskedastisitas).
  • H1: varians residual tidak konstan (heteroskedastisitas).

Keputusan: jika p-value > 0,05, tidak terdapat bukti yang cukup untuk menyatakan adanya heteroskedastisitas.

uji_bp <- lmtest::bptest(model)

tabel_bp <- data.frame(
  Metode = "Breusch-Pagan",
  Statistik_BP = unname(uji_bp$statistic),
  df = unname(uji_bp$parameter),
  p_value = uji_bp$p.value,
  Keputusan = ifelse(
    uji_bp$p.value > 0.05,
    "Tidak terdapat bukti heteroskedastisitas",
    "Terdapat indikasi heteroskedastisitas"
  )
)

knitr::kable(
  tabel_bp,
  digits = 5,
  caption = "Hasil uji heteroskedastisitas"
)
Hasil uji heteroskedastisitas
Metode Statistik_BP df p_value Keputusan
BP Breusch-Pagan 4.36778 5 0.49777 Tidak terdapat bukti heteroskedastisitas

6.4 Uji autokorelasi (relevansi untuk data cross-sectional)

Data pada tugas ini merupakan data cross-sectional, yaitu 200 rumah tangga yang diamati pada satu periode. Tidak terdapat urutan waktu antarobservasi seperti pada data runtun waktu (time series). Oleh karena itu, uji Durbin-Watson tidak diterapkan karena urutan baris rumah tangga tidak memiliki makna waktu. Asumsi yang lebih relevan adalah independensi antarobservasi, yang perlu dijaga melalui rancangan pengambilan sampel.

Jika dosen memberikan data dengan urutan waktu yang jelas, uji autokorelasi dapat dipertimbangkan sesuai struktur datanya.

7 Uji Hipotesis Regresi

7.1 Uji t (parsial)

Uji t digunakan untuk mengetahui apakah masing-masing variabel independen berhubungan secara signifikan dengan konsumsi rumah tangga setelah variabel independen lainnya dikendalikan.

Hipotesis untuk setiap variabel:

  • H0: \(\beta_j = 0\), variabel Xj tidak berpengaruh secara signifikan.
  • H1: \(\beta_j \ne 0\), variabel Xj berpengaruh secara signifikan.

Keputusan: p-value < 0,05 berarti koefisien signifikan secara parsial.

tabel_uji_t <- tabel_koefisien[
  tabel_koefisien$Parameter != "(Intercept)",
]

tabel_uji_t$Keputusan <- ifelse(
  tabel_uji_t$p_value < 0.05,
  "Signifikan (tolak H0)",
  "Tidak signifikan (tidak menolak H0)"
)

knitr::kable(
  tabel_uji_t[
    , c("Parameter", "Estimasi", "t_hitung", "p_value", "Keputusan")
  ],
  digits = 5,
  caption = "Hasil uji t parsial"
)
Hasil uji t parsial
Parameter Estimasi t_hitung p_value Keputusan
2 pendapatan 0.61499 22.60596 0.00000 Signifikan (tolak H0)
3 anggota_keluarga 0.21893 9.04060 0.00000 Signifikan (tolak H0)
4 pendidikan 0.04905 3.76880 0.00022 Signifikan (tolak H0)
5 usia 0.00015 0.03146 0.97494 Tidak signifikan (tidak menolak H0)
6 wilayah 0.24194 2.98159 0.00324 Signifikan (tolak H0)

7.2 Uji F (simultan)

Uji F digunakan untuk mengetahui apakah seluruh variabel independen secara bersama-sama mempunyai hubungan yang signifikan dengan variabel dependen.

Hipotesis:

  • H0: \(\beta_1 = \beta_2 = \beta_3 = \beta_4 = \beta_5 = 0\).
  • H1: minimal terdapat satu koefisien slope yang tidak sama dengan nol.
nilai_f <- summary(model)$fstatistic

f_hitung <- unname(nilai_f["value"])
df_pembilang <- unname(nilai_f["numdf"])
df_penyebut <- unname(nilai_f["dendf"])
p_f <- pf(
  f_hitung,
  df1 = df_pembilang,
  df2 = df_penyebut,
  lower.tail = FALSE
)

tabel_uji_f <- data.frame(
  F_hitung = f_hitung,
  df1 = df_pembilang,
  df2 = df_penyebut,
  p_value = p_f,
  Keputusan = ifelse(
    p_f < 0.05,
    "Signifikan secara simultan (tolak H0)",
    "Tidak signifikan secara simultan (tidak menolak H0)"
  )
)

knitr::kable(
  tabel_uji_f,
  digits = 6,
  caption = "Hasil uji F simultan"
)
Hasil uji F simultan
F_hitung df1 df2 p_value Keputusan
146.9485 5 194 0 Signifikan secara simultan (tolak H0)

8 Koefisien Determinasi (R-squared)

Koefisien determinasi digunakan untuk mengukur proporsi variasi konsumsi rumah tangga yang dapat dijelaskan secara bersama-sama oleh pendapatan, jumlah anggota keluarga, pendidikan, usia, dan wilayah tempat tinggal.

r2 <- summary(model)$r.squared
adjusted_r2 <- summary(model)$adj.r.squared

tabel_determinasi <- data.frame(
  Ukuran = c("R-squared", "Adjusted R-squared"),
  Nilai = c(r2, adjusted_r2),
  Persentase = c(r2 * 100, adjusted_r2 * 100)
)

knitr::kable(
  tabel_determinasi,
  digits = 4,
  caption = "Koefisien determinasi model"
)
Koefisien determinasi model
Ukuran Nilai Persentase
R-squared 0.7911 79.1115
Adjusted R-squared 0.7857 78.5732
cat(
  "Model menjelaskan sekitar ",
  round(r2 * 100, 2),
  "% variasi konsumsi rumah tangga berdasarkan variabel yang dimasukkan.\n",
  "Sisanya sekitar ",
  round((1 - r2) * 100, 2),
  "% berkaitan dengan faktor lain dan variasi yang tidak dijelaskan model.\n",
  sep = ""
)
#> Model menjelaskan sekitar 79.11% variasi konsumsi rumah tangga berdasarkan variabel yang dimasukkan.
#> Sisanya sekitar 20.89% berkaitan dengan faktor lain dan variasi yang tidak dijelaskan model.

9 Diagnostik Model

Grafik berikut digunakan untuk memeriksa pola residual, normalitas residual secara visual, kesamaan varians, dan pengamatan yang berpotensi berpengaruh.

par(mfrow = c(2, 2))
plot(model, which = 1:4)

par(mfrow = c(1, 1))

10 Interpretasi Hasil dan Implikasi Ekonomi

10.1 Interpretasi koefisien regresi

Koefisien regresi diinterpretasikan dengan asumsi variabel independen lainnya konstan (ceteris paribus). Karena Y dan X1 dinyatakan dalam juta rupiah, koefisien X1 menunjukkan perubahan konsumsi dalam juta rupiah untuk setiap kenaikan pendapatan sebesar satu juta rupiah.

b <- coef(model)
arah_wilayah <- ifelse(b["wilayah"] >= 0, "lebih tinggi", "lebih rendah")

cat(
  "1. Pendapatan rumah tangga (X1): koefisien = ",
  round(b["pendapatan"], 4),
  ". Dengan variabel lain tetap, kenaikan pendapatan Rp1 juta berkaitan dengan perubahan konsumsi sekitar Rp",
  round(b["pendapatan"], 4),
  " juta per bulan.\n\n",
  sep = ""
)
#> 1. Pendapatan rumah tangga (X1): koefisien = 0.615. Dengan variabel lain tetap, kenaikan pendapatan Rp1 juta berkaitan dengan perubahan konsumsi sekitar Rp0.615 juta per bulan.
cat(
  "2. Jumlah anggota keluarga (X2): koefisien = ",
  round(b["anggota_keluarga"], 4),
  ". Tambahan satu anggota keluarga berkaitan dengan perubahan konsumsi sekitar ",
  round(b["anggota_keluarga"], 4),
  " juta rupiah per bulan, dengan variabel lain tetap.\n\n",
  sep = ""
)
#> 2. Jumlah anggota keluarga (X2): koefisien = 0.2189. Tambahan satu anggota keluarga berkaitan dengan perubahan konsumsi sekitar 0.2189 juta rupiah per bulan, dengan variabel lain tetap.
cat(
  "3. Pendidikan kepala keluarga (X3): koefisien = ",
  round(b["pendidikan"], 4),
  ". Tambahan satu tahun pendidikan berkaitan dengan perubahan konsumsi sekitar ",
  round(b["pendidikan"], 4),
  " juta rupiah per bulan, dengan variabel lain tetap.\n\n",
  sep = ""
)
#> 3. Pendidikan kepala keluarga (X3): koefisien = 0.0491. Tambahan satu tahun pendidikan berkaitan dengan perubahan konsumsi sekitar 0.0491 juta rupiah per bulan, dengan variabel lain tetap.
cat(
  "4. Usia kepala keluarga (X4): koefisien = ",
  round(b["usia"], 4),
  ". Tambahan satu tahun usia berkaitan dengan perubahan konsumsi sekitar ",
  round(b["usia"], 4),
  " juta rupiah per bulan, dengan variabel lain tetap.\n\n",
  sep = ""
)
#> 4. Usia kepala keluarga (X4): koefisien = 0.0001. Tambahan satu tahun usia berkaitan dengan perubahan konsumsi sekitar 0.0001 juta rupiah per bulan, dengan variabel lain tetap.
cat(
  "5. Wilayah tempat tinggal (X5): koefisien = ",
  round(b["wilayah"], 4),
  ". Rumah tangga perkotaan (X5 = 1) diperkirakan memiliki konsumsi sebesar ",
  round(abs(b["wilayah"]), 4),
  " juta rupiah ", arah_wilayah,
  " dibanding rumah tangga perdesaan (X5 = 0), dengan variabel lain tetap.\n",
  sep = ""
)
#> 5. Wilayah tempat tinggal (X5): koefisien = 0.2419. Rumah tangga perkotaan (X5 = 1) diperkirakan memiliki konsumsi sebesar 0.2419 juta rupiah lebih tinggi dibanding rumah tangga perdesaan (X5 = 0), dengan variabel lain tetap.

10.2 Ringkasan keputusan pengujian

ringkasan <- data.frame(
  Pengujian = c(
    "Normalitas residual",
    "Multikolinearitas",
    "Heteroskedastisitas",
    "Uji F simultan",
    "Koefisien determinasi"
  ),
  Hasil = c(
    ifelse(uji_normalitas$p.value > 0.05,
           "Tidak ada indikasi penyimpangan normalitas",
           "Ada indikasi residual tidak normal"),
    ifelse(all(tabel_vif$VIF < 10 & tabel_vif$Tolerance > 0.10),
           "Tidak ada indikasi multikolinearitas tinggi",
           "Ada indikasi multikolinearitas"),
    ifelse(uji_bp$p.value > 0.05,
           "Tidak ada bukti heteroskedastisitas",
           "Ada indikasi heteroskedastisitas"),
    ifelse(p_f < 0.05,
           "Model signifikan secara simultan",
           "Model tidak signifikan secara simultan"),
    paste0(round(r2 * 100, 2), "% variasi Y dijelaskan model")
  )
)

knitr::kable(
  ringkasan,
  caption = "Ringkasan hasil analisis regresi"
)
Ringkasan hasil analisis regresi
Pengujian Hasil
Normalitas residual Tidak ada indikasi penyimpangan normalitas
Multikolinearitas Tidak ada indikasi multikolinearitas tinggi
Heteroskedastisitas Tidak ada bukti heteroskedastisitas
Uji F simultan Model signifikan secara simultan
Koefisien determinasi 79.11% variasi Y dijelaskan model

10.3 Implikasi ekonomi

Hasil regresi perlu dibaca dengan mempertimbangkan arah koefisien dan signifikansinya. Variabel dengan koefisien positif menunjukkan hubungan searah dengan konsumsi, sedangkan koefisien negatif menunjukkan hubungan berlawanan arah, setelah variabel lain dikendalikan. Variabel yang signifikan secara statistik memberikan bukti hubungan parsial pada taraf 5%, sedangkan variabel yang tidak signifikan belum memberikan bukti yang cukup pada taraf tersebut.

Secara ekonomi, pendapatan dapat berkaitan dengan kemampuan rumah tangga membiayai kebutuhan konsumsi. Jumlah anggota keluarga dapat berkaitan dengan besarnya kebutuhan rumah tangga. Pendidikan dan usia dapat menggambarkan karakteristik kepala keluarga, sedangkan variabel dummy wilayah membandingkan konsumsi rumah tangga perkotaan dan perdesaan setelah karakteristik lain dikendalikan.

Batasan interpretasi: data cross-sectional dan regresi observasional menunjukkan hubungan statistik, bukan otomatis membuktikan hubungan sebab-akibat. Apabila data yang digunakan merupakan data simulasi, hasil numerik hanya menggambarkan pola dari simulasi tersebut dan tidak boleh ditafsirkan sebagai gambaran faktual seluruh rumah tangga.

11 Kesimpulan

Kesimpulan akhir harus disesuaikan dengan hasil tabel yang dihasilkan ketika R Markdown dijalankan. Dalam menyusun kesimpulan, cantumkan:

  1. Karakteristik data berdasarkan statistik deskriptif.
  2. Persamaan regresi dan arah setiap koefisien.
  3. Hasil uji asumsi klasik: normalitas, multikolinearitas, dan heteroskedastisitas.
  4. Hasil uji t untuk setiap variabel independen.
  5. Hasil uji F untuk pengaruh simultan.
  6. Nilai R-squared dan Adjusted R-squared.
  7. Implikasi ekonomi serta keterbatasan analisis.

12 Referensi

R Core Team. (2026). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/

Fox, J., & Weisberg, S. (2019). An R companion to applied regression (3rd ed.). Sage Publications.