library(olsrr)
## Warning: package 'olsrr' was built under R version 4.3.1
##
## Attaching package: 'olsrr'
## The following object is masked from 'package:datasets':
##
## rivers
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:olsrr':
##
## cement
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car)
## Loading required package: carData
library(glmnet)
## Warning: package 'glmnet' was built under R version 4.3.1
## Loading required package: Matrix
## Loaded glmnet 4.1-8
library(ggplot2)
data <- read.csv("C:/Users/Asus/Downloads/Marketing_Data (1).csv")
data
## youtube facebook newspaper sales
## 1 84.72 19.20 48.96 12.60
## 2 351.48 33.96 51.84 25.68
## 3 135.48 20.88 46.32 14.28
## 4 116.64 1.80 36.00 11.52
## 5 318.72 24.00 0.36 20.88
## 6 114.84 1.68 8.88 11.40
## 7 348.84 4.92 10.20 15.36
## 8 320.28 52.56 6.00 30.48
## 9 89.64 59.28 54.84 17.64
## 10 51.72 32.04 42.12 12.12
## 11 273.60 45.24 38.40 25.80
## 12 243.00 26.76 37.92 19.92
## 13 212.40 40.08 46.44 20.52
## 14 352.32 33.24 2.16 24.84
## 15 248.28 10.08 31.68 15.48
## 16 30.12 30.84 51.96 10.20
## 17 210.12 27.00 37.80 17.88
## 18 107.64 11.88 42.84 12.72
## 19 287.88 49.80 22.20 27.84
## 20 272.64 18.96 59.88 17.76
## 21 80.28 14.04 44.16 11.64
## 22 239.76 3.72 41.52 13.68
## 23 120.48 11.52 4.32 12.84
## 24 259.68 50.04 47.52 27.12
## 25 219.12 55.44 70.44 25.44
## 26 315.24 34.56 19.08 24.24
## 27 238.68 59.28 72.00 28.44
## 28 8.76 33.72 49.68 6.60
## 29 163.44 23.04 19.92 15.84
## 30 252.96 59.52 45.24 28.56
## 31 252.84 35.40 11.16 22.08
## 32 64.20 2.40 25.68 9.72
## 33 313.56 51.24 65.64 29.04
## 34 287.16 18.60 32.76 18.84
## 35 123.24 35.52 10.08 16.80
## 36 157.32 51.36 34.68 21.60
## 37 82.80 11.16 1.08 11.16
## 38 37.80 29.52 2.64 11.40
## 39 167.16 17.40 12.24 16.08
## 40 284.88 33.00 13.20 22.68
## 41 260.16 52.68 32.64 26.76
## 42 238.92 36.72 46.44 21.96
## 43 131.76 17.16 38.04 14.88
## 44 32.16 39.60 23.16 10.56
## 45 155.28 6.84 37.56 13.20
## 46 256.08 29.52 15.72 20.40
## 47 20.28 52.44 107.28 10.44
## 48 33.00 1.92 24.84 8.28
## 49 144.60 34.20 17.04 17.04
## 50 6.48 35.88 11.28 6.36
## 51 139.20 9.24 27.72 13.20
## 52 91.68 32.04 26.76 14.16
## 53 287.76 4.92 44.28 14.76
## 54 90.36 24.36 39.00 13.56
## 55 82.08 53.40 42.72 16.32
## 56 256.20 51.60 40.56 26.04
## 57 231.84 22.08 78.84 18.24
## 58 91.56 33.00 19.20 14.40
## 59 132.84 48.72 75.84 19.20
## 60 105.96 30.60 88.08 15.48
## 61 131.76 57.36 61.68 20.04
## 62 161.16 5.88 11.16 13.44
## 63 34.32 1.80 39.60 8.76
## 64 261.24 40.20 70.80 23.28
## 65 301.08 43.80 86.76 26.64
## 66 128.88 16.80 13.08 13.80
## 67 195.96 37.92 63.48 20.28
## 68 237.12 4.20 7.08 14.04
## 69 221.88 25.20 26.40 18.60
## 70 347.64 50.76 61.44 30.48
## 71 162.24 50.04 55.08 20.64
## 72 266.88 5.16 59.76 14.04
## 73 355.68 43.56 121.08 28.56
## 74 336.24 12.12 25.68 17.76
## 75 225.48 20.64 21.48 17.64
## 76 285.84 41.16 6.36 24.84
## 77 165.48 55.68 70.80 23.04
## 78 30.00 13.20 35.64 8.64
## 79 108.48 0.36 27.84 10.44
## 80 15.72 0.48 30.72 6.36
## 81 306.48 32.28 6.60 23.76
## 82 270.96 9.84 67.80 16.08
## 83 290.04 45.60 27.84 26.16
## 84 210.84 18.48 2.88 16.92
## 85 251.52 24.72 12.84 19.08
## 86 93.84 56.16 41.40 17.52
## 87 90.12 42.00 63.24 15.12
## 88 167.04 17.16 30.72 14.64
## 89 91.68 0.96 17.76 11.28
## 90 150.84 44.28 95.04 19.08
## 91 23.28 19.20 26.76 7.92
## 92 169.56 32.16 55.44 18.60
## 93 22.56 26.04 60.48 8.40
## 94 268.80 2.88 18.72 13.92
## 95 147.72 41.52 14.88 18.24
## 96 275.40 38.76 89.04 23.64
## 97 104.64 14.16 31.08 12.72
## 98 9.36 46.68 60.72 7.92
## 99 96.24 0.00 11.04 10.56
## 100 264.36 58.80 3.84 29.64
## 101 71.52 14.40 51.72 11.64
## 102 0.84 47.52 10.44 1.92
## 103 318.24 3.48 51.60 15.24
## 104 10.08 32.64 2.52 6.84
## 105 263.76 40.20 54.12 23.52
## 106 44.28 46.32 78.72 12.96
## 107 57.96 56.40 10.20 13.92
## 108 30.72 46.80 11.16 11.40
## 109 328.44 34.68 71.64 24.96
## 110 51.60 31.08 24.60 11.52
## 111 221.88 52.68 2.04 24.84
## 112 88.08 20.40 15.48 13.08
## 113 232.44 42.48 90.72 23.04
## 114 264.60 39.84 45.48 24.12
## 115 125.52 6.84 41.28 12.48
## 116 115.44 17.76 46.68 13.68
## 117 168.36 2.28 10.80 12.36
## 118 288.12 8.76 10.44 15.84
## 119 291.84 58.80 53.16 30.48
## 120 45.60 48.36 14.28 13.08
## 121 53.64 30.96 24.72 12.12
## 122 336.84 16.68 44.40 19.32
## 123 145.20 10.08 58.44 13.92
## 124 237.12 27.96 17.04 19.92
## 125 205.56 47.64 45.24 22.80
## 126 225.36 25.32 11.40 18.72
## 127 4.92 13.92 6.84 3.84
## 128 112.68 52.20 60.60 18.36
## 129 179.76 1.56 29.16 12.12
## 130 14.04 44.28 54.24 8.76
## 131 158.04 22.08 41.52 15.48
## 132 207.00 21.72 36.84 17.28
## 133 102.84 42.96 59.16 15.96
## 134 226.08 21.72 30.72 17.88
## 135 196.20 44.16 8.88 21.60
## 136 140.64 17.64 6.48 14.28
## 137 281.40 4.08 101.76 14.28
## 138 21.48 45.12 25.92 9.60
## 139 248.16 6.24 23.28 14.64
## 140 258.48 28.32 69.12 20.52
## 141 341.16 12.72 7.68 18.00
## 142 60.00 13.92 22.08 10.08
## 143 197.40 25.08 56.88 17.40
## 144 23.52 24.12 20.40 9.12
## 145 202.08 8.52 15.36 14.04
## 146 266.88 4.08 15.72 13.80
## 147 332.28 58.68 50.16 32.40
## 148 298.08 36.24 24.36 24.24
## 149 204.24 9.36 42.24 14.04
## 150 332.04 2.76 28.44 14.16
## 151 198.72 12.00 21.12 15.12
## 152 187.92 3.12 9.96 12.60
## 153 262.20 6.48 32.88 14.64
## 154 67.44 6.84 35.64 10.44
## 155 345.12 51.60 86.16 31.44
## 156 304.56 25.56 36.00 21.12
## 157 246.00 54.12 23.52 27.12
## 158 167.40 2.52 31.92 12.36
## 159 229.32 34.44 21.84 20.76
## 160 343.20 16.68 4.44 19.08
## 161 22.44 14.52 28.08 8.04
## 162 47.40 49.32 6.96 12.96
## 163 90.60 12.96 7.20 11.88
## 164 20.64 4.92 37.92 7.08
## 165 200.16 50.40 4.32 23.52
## 166 179.64 42.72 7.20 20.76
## 167 45.84 4.44 16.56 9.12
## 168 113.04 5.88 9.72 11.64
## 169 212.40 11.16 7.68 15.36
## 170 340.32 50.40 79.44 30.60
## 171 278.52 10.32 10.44 16.08
#Eksplorasi Plot antara Y dengan X1
#Eksplorasi Plot antara Y dengan X1
plot(data$youtube,data$sales)
#Eksplorasi Plot antara Y dengan X2
plot(data$facebook,data$sales)
#Eksplorasi Plot antara Y dengan X3
plot(data$newspaper, data$sales)
modelklasik <- lm(sales~youtube+facebook+newspaper,data=data)
s.modelklasik <- summary(modelklasik)
s.modelklasik
##
## Call:
## lm(formula = sales ~ youtube + facebook + newspaper, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.6212 -0.9316 0.2776 1.4111 3.3701
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.505871 0.399647 8.772 1.96e-15 ***
## youtube 0.045235 0.001516 29.830 < 2e-16 ***
## facebook 0.188398 0.009016 20.895 < 2e-16 ***
## newspaper 0.004279 0.006501 0.658 0.511
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.01 on 167 degrees of freedom
## Multiple R-squared: 0.9005, Adjusted R-squared: 0.8987
## F-statistic: 503.7 on 3 and 167 DF, p-value: < 2.2e-16
Model regresi klasik yang diperoleh adalah : \[ sales = 3.505871 + 0.045235youtube + 0.188398facebook + 0.004279newspaper \]
# R squared
R2.modelklasik <- s.modelklasik$r.squared
R2.modelklasik
## [1] 0.9004752
# RSE
rse.modelklasik <- s.modelklasik$sigma
rse.modelklasik
## [1] 2.009917
Rsq Model klasik didapatkan \(R^2 = 0.9004752\) dan nilai RSE \(RSE = 2.009917\)
ols_plot_resid_lev(modelklasik)
plot(modelklasik,which=5)
ols_plot_diagnostics(modelklasik)
# 1 Nilai harapan sisaan sama dengan nol
t.test(modelklasik$residuals,
mu = 0,
conf.level = 0.95)
##
## One Sample t-test
##
## data: modelklasik$residuals
## t = -4.1604e-16, df = 170, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -0.3007217 0.3007217
## sample estimates:
## mean of x
## -6.337954e-17
# 2 Sisaan saling bebas
dwtest(modelklasik)
##
## Durbin-Watson test
##
## data: modelklasik
## DW = 2.0646, p-value = 0.6656
## alternative hypothesis: true autocorrelation is greater than 0
#3 Ragam sisaan homogen
bptest(modelklasik)
##
## studentized Breusch-Pagan test
##
## data: modelklasik
## BP = 5.0942, df = 3, p-value = 0.165
shapiro.test(modelklasik$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelklasik$residuals
## W = 0.91394, p-value = 1.734e-08
vif(modelklasik)
## youtube facebook newspaper
## 1.015706 1.097761 1.103072
x <- data.matrix(data[,c('youtube','facebook','newspaper')])
y <- data$sales
cv.r<-cv.glmnet(x,y,alpha=0)
best.lr<-cv.r$lambda.min
bestridge<-glmnet(x,y,alpha=0,lambda=best.lr)
coef(bestridge)
## 4 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 4.318516808
## youtube 0.042053023
## facebook 0.174795288
## newspaper 0.007976879
Didapatkan model regresi Ridge : \[ sales = 4.318516808 + 0.042053023youtube + 0.174795288facebook + 0.007976879newspaper\]
# Fungsi untuk cari rsquared
rsq<-function(bestmodel,bestlambda,x,y){
# y duga
y.duga <- predict(bestmodel, s = bestlambda, newx = x)
# JKG dan JKT
jkt <- sum((y - mean(y))^2)
jkg <- sum((y.duga- y)^2)
#Mencari R-Squared
rsq <- 1 - jkg/jkt
return(rsq)
}
# R2 ridge
R2.modelridge <- rsq(bestridge,best.lr,x,y)
R2.modelridge
## [1] 0.8962598
# RSE ridge
train_predictionsr <- predict(bestridge,newx = x)
# Hitung residu (selisih antara prediksi dan nilai sebenarnya)
residualsr <- y - train_predictionsr
# Hitung varian residu
dfr <- length(y) - length(bestridge$beta)
residual_variancer <- sum(residualsr^2) / dfr
# Hitung RSE
rse.modelridge <- sqrt(residual_variancer)
rse.modelridge
## [1] 2.045925
Didapatkan nilai R2 pada model ridge $ R^2 = 0.8962598$ dan RSE model ridge didapatkan nilai \(RSE =2.045925\)
cv.l<-cv.glmnet(x,y,alpha=1)
best.ll<-cv.l$lambda.min
bestlasso<-glmnet(x,y,alpha=1,lambda=best.ll)
coef(bestlasso)
## 4 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 3.709798958
## youtube 0.044758363
## facebook 0.186108913
## newspaper 0.002700051
Model Regresi Lasso : \[ sales = 3.646431264 + 0.044906596youtube + 0.186820254facebook + 0.003190833newspaper\]
# R2 lasso
R2.modellasso <- rsq(bestlasso,best.ll,x,y)
R2.modellasso
## [1] 0.9002912
# RSE Lasso
train_predictionsLasso <- predict(bestlasso,newx = x)
# Hitung residu (selisih antara prediksi dan nilai sebenarnya)
residualsLasso <- y - train_predictionsLasso
# Hitung varian residu
dfLasso <- length(y) - length(bestlasso$beta)
residual_varianceLasso <- sum(residualsLasso^2) / dfLasso
# Hitung RSE
rse.modelLasso <- sqrt(residual_varianceLasso)
rse.modelLasso
## [1] 2.005778
Didapatkan nilai \[R^2\] pada Model Lasso \[R^2 = 0.9003878\] dan RSE Model Ridge didapatkan nilai \[RSE = 2.004806 \]
perbandingan <- matrix(c(R2.modelklasik, R2.modelridge, R2.modellasso, rse.modelklasik, rse.modelridge, rse.modelLasso),ncol=2,byrow = F)
row.names(perbandingan)<- c("Model klasik","model ridge","model lasso")
colnames(perbandingan) <- c("R squared","RSE")
perbandingan
## R squared RSE
## Model klasik 0.9004752 2.009917
## model ridge 0.8962598 2.045925
## model lasso 0.9002912 2.005778
Perbandingan model dengan melihat nilai RSE yang memiliki ialah model Lasso dengan nilai \[ RSE = 2.004806 \]. Maka dari itu dapat dikatakan bahwa model terbaiknya adalah Model Lasso.
coef(bestlasso)
## 4 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 3.709798958
## youtube 0.044758363
## facebook 0.186108913
## newspaper 0.002700051
Model Regresi Lasso : \[ Sales = 3.646431264 + 0.044906596youtube + 0.186820254facebook + 0.003190833newspaper \]
Sales akan meningkat apabila youtube, facebook, dan newspaper meningkat juga.