Supply and Demand

Lesson 2 - Economics with R

Author

Irfan Tri Raharjo

Penawaran dan Permintaan

Di bagian ini, kita cari tahu konsep dasar yang mengatur semua harga di dunia: Permintaan (Demand) dan Penawaran (Supply). Selanjutnya, kita bakal coba visualisasikan dinamika ini pakai R.


Hukum Permintaan

Sekarang, pikirkan kopi susu favoritmu. Sampai akhir minggu lalu harga kopi susu itu masih 15 ribu, dan kamu beli stiap hari. Tapi, tiba-tiba mulai awal minggu ini harganya naik jadi 30 ribu. Kira-kira kamu masih beli sesering dulu enggak?

Kemungkinan besar enggak, kan? Mungkin kamu cuman akan beli awal bulan, atau cari alternatif yang lebih murah.

Inilah Hukum Permintaan: Kalau semua faktor lain tidak berubah, saat harga suatu barang naik, maka jumlah barang yang diminta akan turun. Sebalikanya, kalau harga turun, permintaan naik. Intinya: Hubungan antara harga dan permintaan itu terbalik. Inilah dasar mengapa harga di pasar bergerak.

Formula:

\[Qd = a - b*P\]

Bikin Kurva Permintaan di R

# Tentukan Fungsi Permintaannya
price <- seq(0, 100, by = 5)
quantity_demanded <- 100 - 0.8 * price

# Lanjut kita buat data frame
demand_data <- data.frame(
  Price = price,
  Quantity = quantity_demanded
)

# Baru Lanjut Plot Kurvanya
library(ggplot2)
ggplot(demand_data, aes(x = Quantity, y = Price)) +
  geom_line(color = "blue", size = 1.5) +
  labs(title = "Demand Curve",
       x = "Quantity Demanded",
       y = "Price (Rp)") +
  theme_minimal()

Hukum Penawaran

Sekarang posisi kita adalah penjual atau produsen. Kamu adalah pemilik kedai kopi. Jika harga kopi susu lagi malah banget (30 ribu) kamu pasti semangat bangget buat bikin stok yang banyak, kalau perlu nambah jam operasional. Kenapa? Karena ada potensi Untung Gede.

Inilah Hukum Penawaran. Kalau semua faktor lain tidak berubah, saat harga suatu barang naik, jumlah barang yang ditawarkan juga akan bertambah. Intinya: Produsen itu semakin semangat menawarkan banyak barang ketika harganya sedang tinggi.

Formula:

\[Qs = c + d*P\]

Gabungkan Kurva Permintaan dan Penawaran

# Tentukan Fungsi Permintaan & Penawaran
price <- seq(0, 100, by = 2)
quantity_demanded <- 100 - 0.8 * price
quantity_supplied <- -20 + 1.2 * price

# Buat kombinasi data framenya
market_data <- data.frame(
  Price = price,
  Demand = quantity_demanded,
  Supply = quantity_supplied
)

# Cari Titik Keseimbangan
equilibrium_price <- (100 + 20) / (0.8 + 1.2)
equilibrium_quantity <- 100 - 0.8 * equilibrium_price

print(paste("Equilibrium Price:", round(equilibrium_price, 2)))
[1] "Equilibrium Price: 60"
print(paste("Equilibrium Quantity:", round(equilibrium_quantity, 2)))
[1] "Equilibrium Quantity: 52"

Bikin Kurva Permintaan dan Penawaran

library(ggplot2)

# Fungsi harga
price <- seq(0, 100, by = 2)

# Fungsi permintaan & penawaran
demand <- 100 - 0.8 * price
supply <- -20 + 1.2 * price

# Data frame pasar
market_data <- data.frame(
  Price = price,
  Demand = demand,
  Supply = supply
)

# cek 6 baris pertama
head(market_data)
  Price Demand Supply
1     0  100.0  -20.0
2     2   98.4  -17.6
3     4   96.8  -15.2
4     6   95.2  -12.8
5     8   93.6  -10.4
6    10   92.0   -8.0
# Plot kurva permintaan

ggplot(market_data) +
  geom_line(aes(x = Demand, y = Price, color = "Permintaan")) +
  geom_line(aes(x = Supply, y = Price, color = "Penawaran")) +
  labs(
    title = "Kurva Permintaan dan Penawaran",
    x = "Jumlah",
    y = "Harga"
  ) +
  theme_minimal() +
  theme(
    legend.position = c(0.9, 0.5)
  )

Permintaan dan penawaran membantu kita memahami bagaimana keputusan individu bertemu di pasar. Melalui kurva tersebut, kita bisa melihat bagaimana harga keseimbangan terbentuk, mengapa pasar cenderung menunju titik tertentu, dan bagaimana perubahan kondisi mempengaruhi hasil akhir. Konsep ini bisa menjadi fondasi untuk analisis kebijakan ekonomi.

##Membuat Fungsi Permintaan

Penasaran kan bagaimana fungsi permintaan seperti \[Qd = 1000 - 140*P\] bisa tiba-tiba muncul? Sini aku jelasin.

Misal, seorang pelaku UMKM mencatat 30 kali transaksi penjualan tas sekolah. Penjualan ke-1 sampai ke-15, harga relatif stabil. Mulai penjualan ke-16, harga mulai dinaikkan (misal karena biaya bahan naik), maka:

set.seed (123)

n <- 30
obs <- 1:n

# Perhatikan, harga stabil lalu naik di observasi ke-16
P <- c(
  rep(80,15), #harga awal
  seq(85, 120, length.out = 15) #harga naik bertahap
)

# Permintaan menurun + noise (perilaku konsumen tidak sempurna)
Q <- 18000 - 100*P + rnorm(n, mean = 0, sd=300)

# Buat dataframe data penjualan (datpj)

datpj <-data.frame(
  obs = obs,
  P=P,
  Q=round(Q)
  )
datpj
   obs     P     Q
1    1  80.0  9832
2    2  80.0  9931
3    3  80.0 10468
4    4  80.0 10021
5    5  80.0 10039
6    6  80.0 10515
7    7  80.0 10138
8    8  80.0  9620
9    9  80.0  9794
10  10  80.0  9866
11  11  80.0 10367
12  12  80.0 10108
13  13  80.0 10120
14  14  80.0 10033
15  15  80.0  9833
16  16  85.0 10036
17  17  87.5  9399
18  18  90.0  8410
19  19  92.5  8960
20  20  95.0  8358
21  21  97.5  7930
22  22 100.0  7935
23  23 102.5  7442
24  24 105.0  7281
25  25 107.5  7062
26  26 110.0  6494
27  27 112.5  7001
28  28 115.0  6546
29  29 117.5  5909
30  30 120.0  6376

Setelah kita dapatkan data, selanjutnya kita periksa visualisasi datanya

library(ggplot2)

ggplot(datpj, aes(x=P, y=Q)) +
  geom_point(size=2) +
  geom_vline(xintercept = P[16], linetype = "dashed") +
  labs(
    title = "Data Penjualan UMKM",
    subtitle = "Harga naik mulai observasi ke-16",
    x = "Harga (ribu rupiah)",
    y = "Jumlah Terjual"
  ) +
  theme_minimal()

Melalui visualisasi kita bisa lihat secara jelas ya bagaimana pola datanya. Lanjut, bagian terpenting untuk menjawab pertanyaan awal bagaimana fungsi permintaannya?

model_permint <- lm(Q ~ P, data = datpj)

summary(model_permint)

Call:
lm(formula = Q ~ P, data = datpj)

Residuals:
    Min      1Q  Median      3Q     Max 
-581.31 -203.14  -13.31  160.33  522.65 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 18388.020    362.997   50.66   <2e-16 ***
P            -104.408      3.935  -26.54   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 293 on 28 degrees of freedom
Multiple R-squared:  0.9618,    Adjusted R-squared:  0.9604 
F-statistic: 704.2 on 1 and 28 DF,  p-value: < 2.2e-16

Berdasarkan formula diatas, kita dapati hasil sebagai berikut:

Perhatikan nilai intercept dan P

Q = 18388 - 104*P Q = 18388 - 104P

Ini adalah fungsi permintaan linear. Apakah kalian bisa mengartikan nilai koefisien dari fungsi tersebut?