Marvel Cinematic Universe
Siapa sih yang gak pernah nonton minimal satu film dari Marvel Cinematic Universe?
Dimulai dari film Iron Man pertama dan diakhiri sampai Spiderman Far From Home yang release di tahun ini.
Dari sekian banyak film tersebut, pasti ada sekian film yang menjadi favorit banyak orang. Salah satu parameternya adalah tingginya pendapatan yang diterima oleh film tersebut.
Disadari atau tidak, film yang bagus biasanya dibuat dengan serius juga. Salah satu parameter suatu film digarap dengan serius dapat dilihat dari budget pembuatan film tersebut.
Budget vs Box Office
Dari data yang di- scrap dari the-numbers.com, mari kita lihat hubungan dan apakah mungkin dibuat model antara budget dan box office dari film-film di MCU?
data=read.csv('/cloud/project/Materi Training/GIZ/Latihan SOAL/Marvel Cinematic Universe.csv')
data
## X release_date title production_budget
## 1 1 Jul 2, 2019 Spider-Man: Far From Home 160000000
## 2 2 Apr 26, 2019 Avengers: Endgame 400000000
## 3 3 Mar 8, 2019 Captain Marvel 175000000
## 4 4 Jul 6, 2018 Ant-Man and the Wasp 130000000
## 5 5 Apr 27, 2018 Avengers: Infinity War 300000000
## 6 6 Feb 16, 2018 Black Panther 200000000
## 7 7 Nov 3, 2017 Thor: Ragnarok 180000000
## 8 8 Jul 7, 2017 Spider-Man: Homecoming 175000000
## 9 9 May 5, 2017 Guardians of the Galaxy Vol 2 200000000
## 10 10 Nov 4, 2016 Doctor Strange 165000000
## 11 11 May 6, 2016 Captain America: Civil War 250000000
## 12 12 Jul 17, 2015 Ant-Man 130000000
## 13 13 May 1, 2015 Avengers: Age of Ultron 330600000
## 14 14 Aug 1, 2014 Guardians of the Galaxy 170000000
## 15 15 Apr 4, 2014 Captain America: The Winter… 170000000
## 16 16 Nov 8, 2013 Thor: The Dark World 150000000
## 17 17 May 3, 2013 Iron Man 3 200000000
## 18 18 May 4, 2012 The Avengers 225000000
## 19 19 Jul 22, 2011 Captain America: The First … 140000000
## 20 20 May 6, 2011 Thor 150000000
## 21 21 May 7, 2010 Iron Man 2 170000000
## 22 22 Jun 13, 2008 The Incredible Hulk 137500000
## 23 23 May 2, 2008 Iron Man 186000000
## worldwide_box_office
## 1 1131723455
## 2 2797800564
## 3 1126129839
## 4 623144660
## 5 2048359754
## 6 1348258224
## 7 853958289
## 8 880166350
## 9 869113101
## 10 676404566
## 11 1153284349
## 12 518858449
## 13 1403013963
## 14 772772112
## 15 714401889
## 16 644602516
## 17 1215392272
## 18 1517935897
## 19 370569776
## 20 449326618
## 21 621156389
## 22 265573859
## 23 585171547
str(data)
## 'data.frame': 23 obs. of 5 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ release_date : Factor w/ 23 levels "Apr 26, 2019",..: 7 1 12 9 2 5 21 10 17 22 ...
## $ title : Factor w/ 23 levels "Ant-Man","Ant-Man and the Wasp",..: 17 4 10 2 5 6 22 18 13 11 ...
## $ production_budget : int 160000000 400000000 175000000 130000000 300000000 200000000 180000000 175000000 200000000 165000000 ...
## $ worldwide_box_office: num 1.13e+09 2.80e+09 1.13e+09 6.23e+08 2.05e+09 ...
Kalau kita lihat, dari dataset terdapat variabel-variabel berikut ini:
X
: nomor urutrelease_date
: tanggal release filmtitle
: judul film MCUproduction_budget
: budget produksi filmworldwide_box_office
: pendapatan film worldwide
Nah, sebenarnya tidak semua data ini kita butuhkan yah. Minimal kita hanya butuh judul film dan dua variabel yang akan kita buat modelnya.
So, mari kita bebersih dulu.
library(dplyr)
data =
data %>% mutate(X=NULL,release_date=NULL)
colnames(data) = c('judul','budget','box_office')
head(data)
## judul budget box_office
## 1 Spider-Man: Far From Home 160000000 1131723455
## 2 Avengers: Endgame 400000000 2797800564
## 3 Captain Marvel 175000000 1126129839
## 4 Ant-Man and the Wasp 130000000 623144660
## 5 Avengers: Infinity War 300000000 2048359754
## 6 Black Panther 200000000 1348258224
summary(data)
## judul budget box_office
## Ant-Man : 1 Min. :130000000 Min. :2.656e+08
## Ant-Man and the Wasp : 1 1st Qu.:155000000 1st Qu.:6.222e+08
## Avengers: Age of Ultron: 1 Median :175000000 Median :8.540e+08
## Avengers: Endgame : 1 Mean :195395652 Mean :9.820e+08
## Avengers: Infinity War : 1 3rd Qu.:200000000 3rd Qu.:1.184e+09
## Black Panther : 1 Max. :400000000 Max. :2.798e+09
## (Other) :17
Statistika deskripsi
Sebelum mulai bagian serunya, kita akan liat statistika deskripsi dari
variabel budget
dan box_office
yuk.
Budget
Mari kita lihat sebaran dari variabel budget
.
library(ggplot2)
#histogram dengan ggplot2
data %>%
ggplot(aes(x=budget)) +
geom_histogram(aes(y=..density..)) +
geom_density() +
labs(title='Histogram + Density Plot using ggplot2',
subtitle='source: Budget MCU movies') +
theme_minimal() +
theme(axis.text = element_blank())
#histogram dengan base
hist(data$budget)
#boxplot dengan base
data %>% ggplot(aes(y=budget)) + geom_boxplot()
Dari sebaran datanya, terlihat bahwa budget
agak miring ke kiri. Ada
tiga film yang memiliki budget sangat tinggi yang berada di luar
jangkauan boxplot-nya.
Apakah budget
berdistribusi normal? Kita lakukan uji shapiro-wilk
stat_uji = shapiro.test(data$budget)
ifelse(stat_uji$p.value < 0.05,
'Tolak H0 -- tidak normal',
'H0 tidak ditolak -- normal')
## [1] "Tolak H0 -- tidak normal"
Ternyata didapatkan bahwa variabel budget
tidak berdistribusi
normal.
Box Office
Sekarang giliran kita lihat sebaran dari variabel Box Office
.
library(ggplot2)
#histogram dengan ggplot2
data %>%
ggplot(aes(x=box_office)) +
geom_histogram(aes(y=..density..)) +
geom_density() +
labs(title='Histogram + Density Plot using ggplot2',
subtitle='source: Box Office MCU movies') +
theme_minimal() +
theme(axis.text = element_blank())
#histogram dengan base
hist(data$box_office)
#boxplot dengan base
data %>% ggplot(aes(y=box_office)) + geom_boxplot()
Dari sebaran datanya, terlihat bahwa box_office
agak miring ke kiri.
Ada dua film yang memiliki box_office sangat tinggi yang berada di
luar jangkauan boxplot-nya. Menarique, ternyata ada dua yang
tinggi sedangkan tadi pas budget ada tiga film.
Apakah box_office
berdistribusi normal? Kita lakukan uji
shapiro-wilk
stat_uji = shapiro.test(data$box_office)
ifelse(stat_uji$p.value < 0.05,
'Tolak H0 -- tidak normal',
'H0 tidak ditolak -- normal')
## [1] "Tolak H0 -- tidak normal"
Ternyata didapatkan bahwa variabel box_office
tidak berdistribusi
normal.
Korelasi Antara Budget dan Box Office
Sekarang, kita akan hitung korelasi antara keduanya yah. Karena kita tahu bahwa kedua variabel tersebut tidak berdistribusi normal, maka kita akan gunakan korelasi spearman.
korel = cor(data$budget,data$box_office,method = 'spearman')
korel
## [1] 0.8476623
Ternyata didapatkan angka korelasi yang kuat dan positif. Yakni sebesar
0.8476623
. Apa sih artinya?
Model Kausalitas Budget dan Box Office
Perlu diingat bahwa korelasi hanya menghitung hubungan linear antara dua
variabel saja. Jika kita ingin mencari tahu apakah budget
menyebabkan
box_office
, dinotasikan: (box_office~budget)
, maka perlu dibuat
modelnya.
Model paling mudah untuk tipe data numerik - numerik adalah model regresi linear.
y = a*x + b + error
biasa ditulis dengan simpel sebagai: y = a*x +
b
.
Oh iya, apakah model regresi linear mengharusnya variabel X dan Y berdistribusi normal? Kindly komen yah…
Yuk kita buat model regresi linearnya!
#membuat modelnya
model_reg = lm(box_office~budget,data = data)
# memanggil modelnya
model_reg
##
## Call:
## lm(formula = box_office ~ budget, data = data)
##
## Coefficients:
## (Intercept) budget
## -5.245e+08 7.710e+00
# melihat keseluruhan model
summary(model_reg)
##
## Call:
## lm(formula = box_office ~ budget, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -621459620 -173906794 -9389925 218048707 422575157
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.245e+08 1.699e+08 -3.087 0.00558 **
## budget 7.710e+00 8.240e-01 9.357 6.12e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 259700000 on 21 degrees of freedom
## Multiple R-squared: 0.8065, Adjusted R-squared: 0.7973
## F-statistic: 87.55 on 1 and 21 DF, p-value: 6.122e-09
Model fitness
Ada beberapa parameter yang bisa digunakan untuk melihat apakah model kita fit atau tidak, yakni:
- R squared
- P-value
- MAE ( mean absolut error )
- Lainnya
R squared
Nilainya bisa diambil dari nilai multiple R-squared pada model atau bisa juga dihitung menggunakan:
r_squared = modelr::rsquare(model_reg,data)
r_squared
## [1] 0.8065491
Perlu diperhatikan, bahwa nilai R squared bisa dihitung juga dari nilai korelasi yang dikuadratkan. Namun ternyata untuk kali ini tidak bisa dilakukan.
r_squared == korel^2
## [1] FALSE
Ada yang tahu kenapa?
Jawabnya karena korelasi yang digunakan adalah spearman. Jika digunakan dengan pearson maka pasti nilainya sama.
Oh iya, ada yang tahu gak apa arti dari R-squared? R-squared bisa diartikan sebagai:
Berapa persen variabel X meng- explain variabel Y.
P-value
Nilai P-value didapatkan dari summary(model_reg)
, yakni mendekati nol
(sangat kecil). Oleh karena p-value < 0.05
bisa diambil kesimpulan
bahwa model berpengaruh terhadap box_office
.
MAE
Mean absolut error dapat diartikan sebagai rata-rata nilai mutlak error yang dapat kita terima. Tidak ada angka pasti harus berapa, tapi semakin kecil error, berarti semakin baik model kita.
mean_absolut_error = modelr::mae(model_reg,data)
mean_absolut_error
## [1] 201077629
Kesimpulan
Berhubung dari p-value dan R squared menghasilkan nilai yang baik, dapat
disimpulkan bahwa budget
film MCU mempengaruhi dan mengakibatkan
box_office
secara positif dan kuat.
Cara lain
Sebenarnya ada cara lain untuk melakukan analisa regresi linear
menggunakan R, yakni dengan memanfaatkan library ggplot2
dan
ggpubr
.
library(ggplot2)
library(ggpubr)
data %>% ggplot(aes(x=budget,y=box_office)) +
geom_point() +
geom_text(aes(label=judul),alpha=.4,size=2) +
geom_smooth(method='lm') +
theme_pubclean() +
stat_regline_equation(label.y = 7,aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~~"))) +
labs(title = 'Model Regresi Linear',
subtitle = 'Data budget vs box office',
caption = 'Created using R',
x = 'Budget',
y = 'Box Office') +
theme(axis.text = element_blank(),
axis.ticks = element_blank(),
plot.title = element_text(size=25,face='bold.italic'),
plot.caption = element_text(size=10,face='italic'))