Oleh: Catharina Vanessa Gracia | 12 May 2025
Bisnis coffeeshop saat ini mengalami pertumbuhan yang pesat, ditandai dengan menjamurnya gerai-gerai baru di berbagai wilayah, baik di kawasan perkotaan maupun pinggiran. Di tengah persaingan yang semakin ketat, para pelaku usaha dituntut untuk lebih cermat dalam mengelola biaya operasional, khususnya biaya pemasaran dan harga pokok penjualan (HPP), agar tetap mampu meraih keuntungan optimal. Di pasar utama seperti Amerika Serikat, di mana industri makanan dan minuman sangat kompetitif, pemahaman terhadap pengaruh dua faktor biaya tersebut menjadi sangat krusial. Oleh karena itu, analisis ini bertujuan untuk meninjau seberapa besar pengaruh biaya pemasaran dan HPP terhadap keuntungan bisnis, khususnya dalam konteks pasar coffeeshop di Amerika Serikat.
Namun, analisis ini sering kali menghadapi tantangan dari keberadaan outlier, heteroskedastisitas dan pengaruh nilai-nilai ekstrem dalam data keuangan yang dapat mengganggu estimasi parameter jika hanya menggunakan metode regresi linier klasik. Sehingga penelitian ini menggunakan pendekatan regresi robust sebagai metode analisis. Regresi robust dirancang untuk menghasilkan estimasi yang lebih stabil dan reliabel meskipun terdapat pencilan atau pelanggaran asumsi-asumsi klasik dalam regresi.
Regresi Robust
Metode analisis regresi yang
dirancang untuk memberikan estimasi parameter yang tahan terhadap
pelanggaran asumsi klasik, terutama terhadap pencilan (outlier) dan data
yang tidak berdistribusi normal atau memiliki
heteroskedastisitas.
Uji S
Merupakan salah satu metode dalam
regresi robust yang digunakan untuk mengestimasi parameter regresi
dengan mengutamakan ketahanan terhadap outlier. Tujuan utama dari Uji S
adalah meminimalkan ukuran penyebaran (scale) dari residual, sambil
menjaga agar model tetap representatif terhadap sebagian besar data yang
“normal”.
Rumus Umum
\[\ K=
\frac{1}{n}\sum_{i=1}^{n}\rho(\frac{r_i}{s})\]
Keterangan :
K: Nilai
konstanta yang ditentukan untuk mencapai efisiensi tertentu,
n: Jumlah tota data,
\(\rho\): Fungsi
kerugian (loss function) robust,
\(r_i\): Residu
ke-\(i\), selisih antara \(y_i\) dan \(\hat{y}_i\),
\(s\): Estimasi skala
residu yang dicari.
Penelitian ini dimulai dengan pemuatan package yang diperlukan dengan
library()
library(readr)
library(car)
library(MASS)
library(lmtest)
library(readxl)
library(ggplot2)
| Jenis Variabel | Peran |
|---|---|
| COGS | X1 |
| Marketing | X2 |
| Profit | Y |
data <- read_excel("C:/Users/Temy/Downloads/COFFEE.xlsx")
print(data)
## # A tibble: 408 × 3
## X1 X2 Y
## <dbl> <dbl> <dbl>
## 1 89 24 94
## 2 83 27 68
## 3 95 26 101
## 4 144 47 111
## 5 95 30 87
## 6 60 19 34
## 7 57 18 42
## 8 63 57 0
## 9 84 26 67
## 10 84 27 68
## # ℹ 398 more rows
Membuat model regresi klasik dengan menggunakan fungsi
lm()
seperti berikut :
MKT=lm(Y~.,data=data)
#Model Regresi Klasik
summary(MKT)
##
## Call:
## lm(formula = Y ~ ., data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -434.08 -35.83 -12.68 36.49 708.03
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 28.7862 14.6040 1.971 0.049390 *
## X1 1.1519 0.3475 3.315 0.000999 ***
## X2 -1.1007 1.0249 -1.074 0.283490
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 158 on 405 degrees of freedom
## Multiple R-squared: 0.1498, Adjusted R-squared: 0.1456
## F-statistic: 35.68 on 2 and 405 DF, p-value: 5.343e-15
Maka didapatkan bahwa model regresi klasiknya adalah
\[\hat{Y}=28.782+1.1519X_1 - 1.1007X_2\] Interpretasi
Setelah model regresi klasik ditemukan, dilakukan Uji
Normalitas.
Uji ini dilakukan untuk memastikan bahwa residual mengikuti distribusi normalatau tidak dengan menggunakan uji seperti Shapiro-Wilk.
Hipotesis
\(H_0\): Residual berdistribusi normal
\(H_1\): Residual tidak berdistribusi
normal
\(\alpha=0{,}05\)
Daerah Kritis:
\(H_0\) ditolak jika \(p_0 < \alpha=0{,}05\)
Statistik Uji:
shapiro.test(MKT$residuals)
##
## Shapiro-Wilk normality test
##
## data: MKT$residuals
## W = 0.80565, p-value < 2.2e-16
ggplot(data.frame(res = MKT$residuals), aes(sample = res)) +
stat_qq() +
stat_qq_line(color = "#870929") +
ggtitle("Plot Residu Model")
Kesimpulan
Dikarenakan \(p_0=2.2e{-}16 <
\alpha=0{,}05\), artinya \(H_0\)
DITOLAK.
Sehingga residual model tidak berdistribusi normal dan membutuhkan
pendekatan seperti Regresi Robust.
Beta <- matrix(nrow=408,ncol=3)
Beta[1, ] <- MKT$coefficients
j <- 1
tol <- c(1,rep=3)
sig<-(median(abs(MKT$residuals-(median(MKT$residuals)))))/0.6745
u<-MKT$residuals/sig
absui<-abs(u)
w<-weights(MKT)
for (i in 1:408){
if
(absui[i]<=1.547){w[i]=1-((u[i]/1.547)^2)^2}
else {w[i]=0}
}
models<- lm(Y~ .,data=data, weight = w)
Beta[j+1, ]<-models$coefficients
summary(models)
##
## Call:
## lm(formula = Y ~ ., data = data, weights = w)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -69.29 -11.85 0.00 10.00 46.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.05009 2.61664 0.019 0.985
## X1 1.63572 0.05537 29.543 <2e-16 ***
## X2 -1.95812 0.16662 -11.752 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.26 on 307 degrees of freedom
## Multiple R-squared: 0.9077, Adjusted R-squared: 0.9071
## F-statistic: 1510 on 2 and 307 DF, p-value: < 2.2e-16
#Iterasi 1
Beta1 <- matrix(nrow=408,ncol=3)
Beta1[1,] <- models$coefficients
j <- 1
toln <- c(1,rep=3)
while (any(abs(toln)>0.001)){
res1 <- models$residuals
Yhat1 <- models$fitted.values
sigma.hat1 <- sqrt((1/(408*0.199))*sum(w*((models$residuals)^2)))
u1 <- models$residuals/sigma.hat1
absu1 <- abs(u1)
c <- 1.547
up1 <- ((u1[i]^2/2)-(u1[i]^4/(2*c^2))+(u1[i]^6/(6*c^4)))/(u1[i])^2
w1<-weights(models)
for (i in 1:408){
if (absu1[i]<=1.547){w1[i]=up1}
else {w1[i]=((c^2/6)/u1[i]^2)}
}
models1 <- lm(Y~ .,data=data, weight = w1)
Beta1[j+1,] <- models1$coefficients
toln <- Beta1[j+1,]-Beta1[j,]
j <- j+1
}
summary(models1)
##
## Call:
## lm(formula = Y ~ ., data = data, weights = w1)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -1108.10 -197.17 -28.87 134.36 973.58
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.36969 2.35429 -0.582 0.561
## X1 1.69686 0.04932 34.406 <2e-16 ***
## X2 -2.04984 0.14819 -13.833 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 352.6 on 405 degrees of freedom
## Multiple R-squared: 0.9127, Adjusted R-squared: 0.9123
## F-statistic: 2118 on 2 and 405 DF, p-value: < 2.2e-16
#Iterasi 2
Beta2 <- matrix(nrow=408,ncol=3)
Beta2[1,] <- models1$coefficients
j <- 1
toln <- c(1,rep=3)
while (any(abs(toln)>0.001)){
res2 <- models1$residuals
Yhat2 <- models1$fitted.values
sigma.hat2 <- sqrt((1/(408*0.199))*sum(w*((models1$residuals)^2)))
u2 <- models1$residuals/sigma.hat2
absu2 <- abs(u2)
c <- 1.547
up2 <- ((u2[i]^2/2)-(u2[i]^4/(2*c^2))+(u2[i]^6/(6*c^4)))/(u2[i])^2
w2<-weights(models1)
for (i in 1:408){
if (absu2[i]<=1.547){w2[i]=up2}
else {w2[i]=((c^2/6)/u2[i]^2)}
}
models2 <- lm(Y~ .,data=data, weight = w2)
Beta2[j+1,] <- models2$coefficients
toln <- Beta2[j+1,]-Beta2 [j,]
j <- j+1
}
summary(models2)
##
## Call:
## lm(formula = Y ~ ., data = data, weights = w2)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -1116.82 -198.72 -28.81 135.38 981.22
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.37034 2.35431 -0.582 0.561
## X1 1.69686 0.04932 34.405 <2e-16 ***
## X2 -2.04982 0.14819 -13.833 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 355.4 on 405 degrees of freedom
## Multiple R-squared: 0.9127, Adjusted R-squared: 0.9123
## F-statistic: 2118 on 2 and 405 DF, p-value: < 2.2e-16
#Iterasi 3
Beta3 <- matrix(nrow=408,ncol=3)
Beta3[1,] <- models2$coefficients
j <- 1
toln <- c(1,rep=3)
while (any(abs(toln)>0.001)){
res3 <- models2$residuals
Yhat3 <- models2$fitted.values
sigma.hat3 <- sqrt((1/(408*0.199))*sum(w*((models2$residuals)^2)))
u3 <- models2$residuals/sigma.hat3
absu3 <- abs(u3)
c <- 1.547
up3 <- ((u3[i]^2/2)-(u3[i]^4/(2*c^2))+(u3[i]^6/(6*c^4)))/(u3[i])^2
w3<-weights(models2)
for (i in 1:408){
if (absu3[i]<=1.547){w3[i]=up3}
else {w3[i]=((c^2/6)/u3[i]^2)}
}
models3 <- lm(Y~ .,data=data, weight = w3)
Beta3[j+1,] <- models3$coefficients
toln <- Beta3[j+1,]-Beta3[j,]
j <- j+1
}
summary(models3)
##
## Call:
## lm(formula = Y ~ ., data = data, weights = w3)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -1116.82 -198.72 -28.81 135.38 981.21
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.37034 2.35431 -0.582 0.561
## X1 1.69686 0.04932 34.405 <2e-16 ***
## X2 -2.04982 0.14819 -13.833 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 355.4 on 405 degrees of freedom
## Multiple R-squared: 0.9127, Adjusted R-squared: 0.9123
## F-statistic: 2118 on 2 and 405 DF, p-value: < 2.2e-16
models3
sebagai model terbaik. Oleh karena itu, model ini dapat dianggap sebagai
representasi yang handal dalam menjelaskan hubungan antara variabel
dependen dan independen dalam data yang digunakan.Dalam analisis regresi, salah satu langkah penting untuk mengevaluasi pengaruh individu pengamatan terhadap model regresi adalah dengan menggunakan DFITS (Difference in Fits). DFITS mengukur sejauh mana perubahan dalam estimasi parameter regresi akan terjadi jika pengamatan tertentu dihilangkan. Nilai DFITS yang besar menunjukkan bahwa suatu pengamatan dapat dianggap sebagai pengamatan pencilan yang memiliki pengaruh besar terhadap hasil model.
Untuk menilai potensi pengamatan yang ekstrem, pertama-tama dihitung nilai DFITS keseluruhan, yang menggambarkan seberapa besar kontribusi setiap data terhadap perubahan model. Selanjutnya ducari nilai pembanding untuk DFITS.
nilai.pembanding.dffits= 2*sqrt (3/408)
nilai.pembanding.dffits
## [1] 0.1714986
Karena nilai pembanding untuk DFITS adalah
models3
maka berikut adalah data yang merupakan pencilan.
# Inisialisasi vektor untuk simpan pencilan
pencilan <- c()
# Loop untuk cek nilai DFFITS yang lebih besar dari threshold
for (i in 1:length(nilai_dffits)) {
if (abs(nilai_dffits[i]) > nilai.pembanding.dffits) {
pencilan <- c(pencilan, nilai_dffits[i])
}
}
# Tampilkan pencilan
print(pencilan)
## 13 30 48 64 81 98 116
## -0.2479695 -0.2614321 -0.2632080 -0.2603557 -0.3331734 -0.3502175 -0.3993326
## 150 166 183 200 309 310 326
## -0.3806068 -0.3405735 -0.3049964 -0.3497338 0.1716069 0.2158454 0.1804555
## 341 358 375 392 395
## 0.2091486 0.2022054 0.1934358 0.2091486 0.2632864
Setelah dilakukan Analisis menggunakan Regresi Robust terhadap pengaruh biaya pemasaran dan harga pokok penjualan terhadap keuntungan di Pasar Utama Amerika Serikat, maka didapat model regresi robust sebagai berikut
\[\hat{Y}=-1.37034+1.69686X_1 - 2.04982X2\]Interpretasi
Model regresi ini memberikan wawasan penting bahwa pengeluaran untuk Harga Pokok Penjualan saat ini berasosiasi positif dengan keuntungan, sementara biaya marketing masih belum memberikan kontribusi keuntungan yang positif. Oleh karena itu, strategi pemasaran perlu ditinjau kembali agar bisa memberikan hasil yang lebih efisien dan berdampak positif terhadap profit perusahaan.