Midterm Exam

Sales Dataset

Logo


1 Pendahuluan

Dalam lanskap bisnis yang didorong oleh data, memahami faktor-faktor yang memengaruhi kinerja penjualan adalah sebuah keharusan strategis. Laporan ini menyajikan analisis mendalam terhadap “Sales Dataset” sebagai pemenuhan Ujian Tengah Semester. Fokus utama analisis ini adalah untuk mengidentifikasi pola dan hubungan antara berbagai variabel bisnis seperti, AdBudget, Price, dan Region, dengan variabel target utama, yaitu kinerja penjualan (Sales). Tujuan akhirnya adalah untuk mengekstrak wawasan yang dapat ditindaklanjuti dari data yang tersedia.

Metodologi analisis akan dimulai dengan visualisasi data. Kami akan memanfaatkan berbagai teknik grafik dasar, termasuk Box Plot, Bar Chart, Histogram, Line Chart dan Scatter Plot. Alat-alat ini akan digunakan untuk memetakan distribusi data, membandingkan kinerja antar kategori yang berbeda, dan mengidentifikasi secara visual adanya potensi korelasi antar variabel.

Setelah pola visual teridentifikasi, kami akan beralih ke analisis statistik deskriptif untuk memberikan pembuktian kuantitatif. laporan ini akan mengkaji tendensi sentral (ukuran pemusatan data). Dengan menghitung nilai Mean (rata-rata), Median (nilai tengah), dan Modus (nilai yang paling sering muncul), kami akan menentukan di mana titik pusat dari variabel-variabel kunci berada. Analisis ini penting untuk memahami nilai “tipikal” dari setiap atribut, seperti penjualan atau harga rata-rata.

Terakhir, kami akan menganalisis ukuran penyebaran (measures of dispersion). Melalui perhitungan Range, Varian, dan Standar Deviasi, kami akan mengukur tingkat variabilitas atau konsistensi dalam data. Memahami seberapa tersebar data tersebut sangat penting untuk menilai tingkat stabilitas atau volatilitas dalam kinerja penjualan dan faktor-faktor terkait lainnya. Laporan ini bertujuan untuk memberikan kesimpulan yang tajam dan berbasis data, yang dapat menjadi landasan untuk rekomendasi strategis yang cerdas dan dapat dipertanggungjawabkan.

2 Data Mentah (Raw Data)

Data mentah (raw data) adalah data yang baru saja dikumpulkan dan belum diproses, diorganisir, atau dianalisis. Ini adalah bentuk dasar dari data yang belum dimodifikasi atau dimanipulasi dengan cara apa pun. Data mentah seringkali masih berantakan, tidak terstruktur, dan mungkin mengandung kesalahan atau ketidakkonsistenan

2.1 Sales Dataset

Dalam dataset berikut terdapat data yang terstruktur dengan 2000 baris dan 9 kolom. struktur data ini terdiri dari gabungan antara variable kategorikal dan numerik. Secara spesifik, ada 3 kolom kategorikal yaitu Region, Product Category, Sales Channel yang mendesekripsikan non-numerik sementara ada 6 kategori numerik yaitu AdBudget, Price, Store Size, Experience, Costumer Satisfaction, dan Sales.

Berikut adalah data yang akan di proses dengan beberapa Visualisasi dasar:

# Check the structure of the data

if ("X" %in% names(dataset)) {
dataset <- dataset |> select(-X)
}
datatable(dataset,
          caption = htmltools::tags$caption(
            style = 'caption-side: top; text-align: center; font-weight: bold; font-size: 16px; color: #2C3E50;',
            'Sales Dataset'
            ),
          rownames = FALSE,
          options = list(
            pageLength = 10,
            autoWidth = TRUE,
            dom = 'Bfrtip',
            buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
            initComplete = JS(
              "function(settings, json) {",
              "$(this.api().table().header()).css({'background-color': '#2C3E50', 'color': '#fff'});",
              "}"
              )
            )
          )

2.2 Menentukan Tipe Data

untuk menentukan visualisasi yang cocok, penting untuk mengetahui tipe data baik itu tipe kategorikal maupun numerik dengan menggunakan perintah str( ).

str(dataset)
## 'data.frame':    2000 obs. of  9 variables:
##  $ Region              : Factor w/ 4 levels "East","North",..: 2 4 4 3 2 1 3 1 3 2 ...
##  $ ProductCategory     : Factor w/ 4 levels "Clothing","Electronics",..: 3 3 4 4 4 4 4 1 2 2 ...
##  $ SalesChannel        : Factor w/ 2 levels "Offline","Online": 1 1 1 1 2 2 1 1 1 1 ...
##  $ AdBudget            : num  131.6 70.7 160.5 148.3 121.3 ...
##  $ Price               : num  5.1 8.2 13.6 9.5 14.2 6.7 6.1 10.5 9.2 11.3 ...
##  $ StoreSize           : int  384 392 222 90 157 309 262 285 240 269 ...
##  $ Experience          : num  8.8 3.1 6.4 3.4 3.5 4.2 4.3 3.5 3 5.1 ...
##  $ CustomerSatisfaction: int  71 65 66 77 80 95 82 56 77 74 ...
##  $ Sales               : num  165.2 84.9 165.9 149.5 124.6 ...

2.3 Menentukan Nilai Data

hal ini diperlukan untuk mengetahui nilai agar nilai pada data jelas dan meminimalisir kesalahan dalam pemrosesan data dengan menggunakan perintah summary ( ).

data_set = summary(dataset)
kable(data_set)
Region ProductCategory SalesChannel AdBudget Price StoreSize Experience CustomerSatisfaction Sales
East :487 Clothing :504 Offline: 815 Min. : 50.5 Min. : 5.000 Min. : 40.0 Min. : 1.000 Min. : 46.00 Min. : 53.0
North:483 Electronics:492 Online :1185 1st Qu.: 88.5 1st Qu.: 7.400 1st Qu.:210.0 1st Qu.: 3.200 1st Qu.: 69.00 1st Qu.:111.6
South:528 Home :492 NA Median :125.0 Median :10.000 Median :252.0 Median : 5.400 Median : 75.00 Median :144.4
West :502 Sports :512 NA Mean :125.0 Mean : 9.977 Mean :250.8 Mean : 5.487 Mean : 75.38 Mean :144.8
NA NA NA 3rd Qu.:162.7 3rd Qu.:12.500 3rd Qu.:290.0 3rd Qu.: 7.800 3rd Qu.: 82.00 3rd Qu.:178.1
NA NA NA Max. :200.0 Max. :15.000 Max. :486.0 Max. :10.000 Max. :109.00 Max. :243.3

3 Visualisasi Data

Visualisasi data bertujuan untuk mengubah data mentah menjadi informasi yang jelas, bermakna, dan dapat ditindaklanjuti. Sebelum melakukan visualisasi, penting untuk memahami secara menyeluruh karakteristik data tersebut. Pemahaman dasar diperlukan untuk memastikan bahwa visualisasi secara akurat mewakili data dan secara efektif menyampaikan pesan yang diinginkan, sehingga meminimalkan risiko kesalahpahaman.

Dalam kasus Sales Dataset, diberikan data mentah dan memprosesnya menggunakan beberapa visualisasi, yaitu:

  • Box plot
  • Bar Chart
  • Histogram
  • Scatter Plot
  • Line Chart

3.1 Sales Distribution by Region

Visualisasi box plot bertujuan untuk membandingkan distribusi atau sebaran data sales diantara empat Product Category yang berbeda.

Setiap box plot mewakili semua data sales untuk satu kategori produk yaitu:

  • Garis di dalam kotak menunjukkan nilai Median : ini menyatakan bahwa 50% dari penjualan di kategori tersebut berada di atas garis dan 50%b berada di Bawah.

  • Box : hal ini adalah badan Utama data yang berisi 50% data di bagian tengah (IQR). Terdapat Q3 yang berarti batas atas adalah kurang dari 75% data yang berada di Bawah nilai ini. Sementara Q1 atau batas Bawah adalah kurang dari 25% data yang berada di Bawah nilai ini

  • Garis Whiskers: Garis ini adalah garis yang memanjang dari box plot yang menunjukkan jangkauan data dianggap “Normal”

# 1. Sales Distribution by Region
ggplot(dataset, aes(x = Region, y = Sales, fill = Region)) +
  geom_boxplot(outlier.colour = "red",    # warna titik outlier
               outlier.shape = 16,        # bentuk titik (16 = bulat solid)
               outlier.size = 3,          # ukuran titik outlier
               outlier.alpha = 0.8) +     # transparansi
  labs(title = "Sales Distribution by Region",
       x = "Region",
       y = "Sales") +
  theme_minimal()

3.2 Sales by Product Category

Visualisasi berikut menggunakan box plot yang membandingkan distribusi nilai atau sebaran data Sales diantara 4 Product Category yang berbeda. Garis yang ada dalam box plot berikut terdapat nilai Median yaitu 50% penjualan kategori berada di atas garis dan 50% berada di Bawah garis. sementara Box nya mewakili 50% data penjualan dengan kotak yang lebih “pendek” berarti variasinya lebih kecil. Garis Whiskers berfungsi untuk menunjukkan data penjualan yang dianggap “Normal”.

# 2. Sales by Product Category
ggplot(dataset, aes(x = ProductCategory, y = Sales, fill = ProductCategory)) +
  geom_boxplot() +
  labs(title = "Sales Distribution by Product Category",
       x = "Product Category", y = "Sales") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Kesimpulan Penjualan untuk Electronics, home, dan sports memiliki nilai tengah yang serupa. Namun, clothing secara umum memiliki nilai penjualan yang rendah dan lebih konsisten (dengan variasi rendah). Electronics juga menonjol karena memiliki beberapa penjualan dengan nilai yang sangat tinggi.

3.3 Average Sales per Product Category

Visualisasi berikut menjelaskan tentang tren ProductCategory dengan menggunakan Line Chart yang menghubungkan titik rata-rata Sales untuk tiap ProductCategory dimana sumbu X adalah ProductCategory (Home, Sports, Clothing, Electronics) dan sumbu y menyatakan rata-rata Sales dengan garis biru yang menandakan tren dan titik merah sebagai penanda nilai.

# Hitung rata-rata Sales per ProductCategory
avg_sales <- dataset %>%
  group_by(ProductCategory) %>%
  summarise(AvgSales = mean(Sales, na.rm = TRUE))

# Urutkan kategori untuk line chart
avg_sales$ProductCategory <- factor(avg_sales$ProductCategory, levels = c("Home", "Sports", "Clothing", "Electronics"))

# Buat line chart
ggplot(avg_sales, aes(x = ProductCategory, y = AvgSales, group = 1)) +
  geom_line(color = "blue", size = 1.2) +
  geom_point(size = 3, color = "red") +
  labs(title = "Rata-rata Penjualan Berdasarkan Kategori Produk",
       x = "Kategori Produk",
       y = "Rata-rata Penjualan") +
  theme_minimal()

Kesimpulan: Dalam distribusi Sales, rata-rata berkisar 140 sampai 180 untuk setiap unit per entri dengan variasi yang signifikan tergantung terhadap kategori produk dan region. Dalam ProductCategory, Electronics dan Home menunjukkan performa yang tinggi sedangkan Clothing dan Sports lebih rendah, yang menunjukkan bahwa preferensi konsumen terhadap produk elektronik dan rumah tangga mungkin lebih mahal atau esensial.

3.4 Advertising Budget vs Sales

Dalam grafik AdBudget vs Sales, grafik ini menunjukkan pola yang naik dari kiri Bawah ke kanan atas, yang berarti indikasi korelasi positif kuat antara AdBudget (X) dan Sales (Y). Artinya adalah semakin besar anggaran iklan, semakin tinggi juga angka penjualan.

TItik data juga terlihat cukup rapat untuk membentuk jalur linear yang menegaskan konsistensi hubungan antara dua variable. Walau ada beberapa variasi, tapi tren keseluruhannya jelas.

Pengaruh Sales Channel adalah dari visualisasi ini, kedua warna tampak tersebar merata di sepanjang tren kenaikan. Tidak terlihat adanya pengelompokkan ekstrem di mana satu saluran jauh lebih dominan pada tingkat anggaran secara visual.

# 3. Advertising Budget vs Sales
ggplot(dataset, aes(x = AdBudget, y = Sales)) +
  geom_point(alpha = 0.6, color = "steelblue") +
  geom_smooth(method = "lm", color = "red") +
  labs(title = "Relationship between Advertising Budget and Sales",
       x = "Advertising Budget", y = "Sales") +
  theme_minimal() 

3.5 Price vs Sales by Product Category

Visualisasi ini menampilkan hubungan antara Price dengan Sales untuk setiap kategori produk. Tiap panel mewakili untuk setiap satu kategori produk yang dimana titik-titik merepresentasikan data transaksi dengan warna sesuai dengan kategori tiap produk.

Secara umum, harga tidak menunjukkan korelasi kuat dengan penjualan pada tiap kategori. Titik-titik yang tersebar cukup merata tanpa pola menaik maupun menurun.

Produk Electronics dan Home memiliki rentang harga penjualan yang sedikit lebih luas disbanding Clothing dan Sports. Hal ini mengindikasikan bahwa harga bukanlah faktor utama dalam dataset ini.

# 4. Price vs Sales by Product Category
ggplot(dataset, aes(x = Price, y = Sales, color = ProductCategory)) +
  geom_point(alpha = 0.6) +
  facet_wrap(~ProductCategory) +
  labs(title = "Relationship between Price and Sales by Product Category",
       x = "Price", y = "Sales") +
  theme_minimal()

Kesimpulan: Sehingga dari grafik tersebut dapat dilihat bahwa grafik menunjukkan hubungan antar harga barang dan jumlah barang dengan penjualan untuk masing-masing jenis produk. Tetapi dapat diketahui bahwa semakin mahalnya sebuah barang, tidak terlihat semakin banyak atau sedikit yang terjual, sehingga dapat disimpulkan bahwa harga bukan faktor utama yang mempengaruhi seberapa banyak produk yang berhasil di jual.

3.6 Store Size vs Sales

Scatter plot menggambarkan tentang hubungan antara ukuran toko (Store Size) dengan nilai penjualan (Sales). Dalam scatter plot tersebut, titik yang tersebar cukup merata namun ada tren positif walau lemah. Garis merah yang melengkung adalah garis regresi lokal untuk menunjukkan kecenderungan bahwa semakin besar toko, penjualan meningkat. Namun karena penyebaran data sangat luas dan tidak ada pola kuat, dapat dilihat bahwa korelasi tampak lemah.

# 7 Store Size vs Sales
ggplot(dataset, aes(x = StoreSize, y = Sales)) +
  geom_point(alpha = 0.6, color = "darkgreen") +
  geom_smooth(method = "lm", color = "red") +
  labs(title = "Relationship between Store Size and Sales",
       x = "Store Size", y = "Sales") +
  theme_minimal()

Kesimpulan: Grafik memperlihatkan tentang apakah ukuran toko bisa mempengaruhi besar kecilnya penjualan. Secara umum, toko yang besar cenderung punya penjualan yang lebih banyak namun perbedaannya tidak terlalu besar

Ada toko kecil yang memiliki penjualan besar walaupun ukuran nya kecil dan juga ada toko besar yang penjualannya biasa saja. Sehingga ukuran toko bukanlah satu-satunya faktor untuk menentukan penjualan.

3.7 Customer Satisfaction Distribution

Visualisasi ini menunjukkan seberapa sering nilai Customer Satisfaction muncul dalam dataset. Dengan menghitung kepuasan pelanggan yang berkisar 40 hingga 105 dan mayoritas data berkumpul diantara 65 hingga 90 sehingga membentuk kurva yang mendekati distribusi Normal.

Puncak pada grafik ini ada pada kisaran 75-80 yang menunjukkan bahwa sebagian besar pelanggan memberi skor dengan tingkat kepuasan di level menengah ke tinggi. Tetapi ada uga data dengan kepuasan sangat rendah atau sangat tinggi, namun jumlahnya sedikit.

# 5. Customer Satisfaction Distribution
ggplot(dataset, aes(x = CustomerSatisfaction)) +
  geom_histogram(binwidth = 5, fill = "lightblue", color = "black") +
  labs(title = "Customer Satisfaction Distribution",
       x = "Customer Satisfaction", y = "Frequency") +
  theme_minimal()

Kesimpulan: Dalam grafik ini diperlihatkan bagaimana nilai kepuasan dari pelanggan tersebar dalam semua transaksi dan kebanyakan memberi nilai kepuasa di angka 75-80 dari 100. Artinya pelangga cukup puas dengan pelayanan dan produk yang dijual sehingga perusahaan secara umum berhasil untuk membuat pelanggan senang.

3.8 Sales Trend by Region and Channel

Bar Chart berfungsi mengelompokkan total penjualan berdasarkan wilayah (Region) dan saluran penjualan (Online vs Offline) dengan setiap wilayah memiliki dua bar yang berdampingan dengan keterangan merah untuk Offline dan biru untuk Online.

Total penjualan online selalu lebih tinggi disbanding offline pada semua Region, dengan perbedaan yang cukup signifikan yaitu Region South menunjukkan total penjualan tertinggi yang di ikuti West,East, dan North.

# 6. Sales Trend by Region and Channel
region_channel_sales <- dataset %>%
  group_by(Region, SalesChannel) %>%
  summarise(TotalSales = sum(Sales), .groups = 'drop')

ggplot(region_channel_sales, aes(x = Region, y = TotalSales, fill = SalesChannel)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Total Sales by Region and Sales Channel",
       x = "Region", y = "Total Sales", fill = "Sales Channel") +
  theme_minimal()

Kesimpulan: Dapat diketahui bahwa grafik menunjukkan total penjualan produk yang terjadi di beerbagai wilayah yang dilakukan dengan Offline maupun Online. Dari visualisasi tersebut,dapat dilihat bahwa penjualan lewat internet lebih banyak dibandingkan dengan toko yang ada di semua wilayah.

4 Central Tendency Analysis

Central Tendency Analysis adalah proses memahami nilai pusat dari suatu distribusi data yang memiliki tujuan untuk mencari tahu berapa nilai sebaran data.

Central Tendency Analysis penting untuk mengolah data. Berikut adalah kepentingan dari Central Tendency Analysis:

  • Meringkas dataset yang besar ke dalam satu atau beberapa angka representatif

  • Membandingkan kelompok data

  • Menjadi dasar analisis lanjutan.

Terdapat 3 ukuran Utama dalam analysis Central Tendency yaitu:

  • Mean: berfungsi untuk menunjukkan nilai rata-rata keseluruhan namun sangat sensitive terhadap outlier

  • Median: berfungsi untuk menunjukkan nilai tengah dari data yang di urutkan dan sebagai representatif saat data tidak simetris. Median lebih stabil terhadap outlier daripada Mean

  • Modus: Berfungsi untuk menunjukkan nilai yang paling sering muncul yang membuat hal ini cocok untuk data dengan tipe kategorikal. Dalam modus dapat ditemukan lebih dari satu nilai modus.

Dalam kasus Sales Dataset, digunakan Histogram untuk melihat data dari Sales, AdBudget, Experience, dan Price

4.1 Sales

Dalam histogram berikut, terdapat grafik Sales dengan garis density yang menunjukkan frekuensi dari nilai Sales dari dataset dengan nilai :

  • Mean = 144.8
  • Median = 144.0
  • Modus = berada di sekitar 147.9

Ketiga ukuran pusat tersebut memiliki nilai yang berdekatan satu sama lain yang menunjukkan distribusi penjualan relatif simetris dan hampir mendekati distribusi normal. Distribusi ini menunjukkan bahwa Sebagian besar penjualan berkisar antara 100 sampai 200 tanpa terlalu banyak nilai outlier yang mencolok.

Sebagian besar penjualan produk ada di angka sekitar 145 unit yang artinya bisa dijadikan acuan untuk standar penjualan. Bentuk grafik yang simetris memiliki arti penjualan tidak banyak yang rendah atau tinggi sehingga penjualan rata-rata adalah gambaran yang baik tentang kondisi sebenarnya.

# --- Fungsi Tambahan untuk Mencari Modus (Puncak Densitas) ---
get_density_mode <- function(v) {
  dens <- density(v, na.rm = TRUE)
  return(dens$x[which.max(dens$y)])
}

# 1. HISTOGRAM SALES

# Menghitung nilai-nilai sentral
mean_sales <- mean(dataset$Sales, na.rm = TRUE)
median_sales <- median(dataset$Sales, na.rm = TRUE)
mode_sales <- get_density_mode(dataset$Sales)

# Membuat Plot Sales
plot_sales_complete <- ggplot(dataset, aes(x = Sales)) +
  geom_histogram(aes(y = ..density..), binwidth = 10, fill = "skyblue", color = "white", alpha = 0.7) +
  geom_density(color = "blue", size = 1) +
  # Menambahkan 3 garis: Mean, Median, Modus
  geom_vline(aes(xintercept = mean_sales, color = "Mean", linetype = "Mean"), size = 1) +
  geom_vline(aes(xintercept = median_sales, color = "Median", linetype = "Median"), size = 1) +
  geom_vline(aes(xintercept = mode_sales, color = "Modus", linetype = "Modus"), size = 1) +
  # Mengatur warna dan tipe garis untuk legenda
  scale_color_manual(name = "Ukuran Sentral",
                     values = c("Mean" = "red", "Median" = "green", "Modus" = "orange")) +
  scale_linetype_manual(name = "Ukuran Sentral",
                        values = c("Mean" = "dashed", "Median" = "solid", "Modus" = "dotted")) +
  labs(title = "Distribusi Sales (Penjualan)",
       subtitle = paste0("Mean=", round(mean_sales,1), " | Median=", round(median_sales,1), " | Modus (Puncak)≈",
                         round(mode_sales,1)),
       x = "Sales", y = "Density") +
  theme_minimal() +
  theme(legend.position = c(0.95, 0.95), legend.justification = c("right", "top"),
        legend.box.background = element_rect(color="gray", size=0.5),
        legend.margin = margin(6, 6, 6, 6))

print(plot_sales_complete)

Kesimpulan: Sales mempunyai distribusi yang cukup stabil dan simetris dengan nilai rata-rata 145 unit yang bisa dijadikan patokan performa penjualan sebuah perusahaan.

4.2 AdBudget

Histogram memiliki garis density yang menampilkan distribusi anggara iklan yang digunakan di seluruh dataset. Terdapat nilai distribusi dengan ukuran sentral yang terlihat:

-Mean = 125 -Median = 125 -Modus ≈ 89.7

Distribusi anggaran tampak tidak normal karena historgamnya lebih datar dan tidak membentuk puncak yang tajam, sehingga menunjukkan sebaran yang relatif seragam dengan beberapa puncak kecil. Terdapat Modus yang lebih rendah (~89.7) menunjukkan bahwa anggaran iklan yang sering digunakan cenderung dibawah rata-rata dengan pengeluaran yang berada pada level tinggi sehingga menaikkan rata-rata ke 125 artinya perusahaan mencoba banyak cara dengan uang yang berbeda-beda untuk iklan, kadang sedikit dan kadang banyak.

# 2. HISTOGRAM ADBUDGET  


mean_ad <- mean(dataset$AdBudget, na.rm = TRUE)
median_ad <- median(dataset$AdBudget, na.rm = TRUE)
mode_ad <- get_density_mode(dataset$AdBudget)

plot_ad_complete <- ggplot(dataset, aes(x = AdBudget)) +
  geom_histogram(aes(y = ..density..), binwidth = 8, fill = "orange", color = "white", alpha = 0.7) +
  geom_density(color = "blue", size = 1) +
  geom_vline(aes(xintercept = mean_ad, color = "Mean", linetype = "Mean"), size = 1) +
  geom_vline(aes(xintercept = median_ad, color = "Median", linetype = "Median"), size = 1) +
  geom_vline(aes(xintercept = mode_ad, color = "Modus", linetype = "Modus"), size = 1) +
  scale_color_manual(name = "Ukuran Sentral",
                     values = c("Mean" = "red", "Median" = "green", "Modus" = "purple")) +
  scale_linetype_manual(name = "Ukuran Sentral",
                        values = c("Mean" = "dashed", "Median" = "solid", "Modus" = "dotted")) +
  labs(title = "Distribusi AdBudget (Anggaran Iklan)",
       subtitle = paste0("Mean=", round(mean_ad,1), " | Median=", round(median_ad,1), " | Modus (Puncak)≈",
                         round(mode_ad,1)),
       x = "AdBudget", y = "Density") +
  theme_minimal() +
  theme(legend.position = c(0.95, 0.95), legend.justification = c("right", "top"),
        legend.box.background = element_rect(color="gray", size=0.5),
        legend.margin = margin(6, 6, 6, 6))

print(plot_ad_complete)

Kesimpulan: AdBudget memiliki variasi yang lebih besar dengan kecenderungan pembagian anggaran yang beragam dari rendah sampai tinggi. Variasi ini penting untuk menunjukkan sebelumnya ada korelasi positif antara anggaran iklan dengan penjualan, yaitu semakin tinggi anggaran maka bisa membantu untuk meningkatkan penjualan.

# Fungsi untuk menghitung modus
get_mode <- function(v) {
  uniq_v <- unique(v)
  freq <- tabulate(match(v, uniq_v))
  modes <- uniq_v[freq == max(freq)]
  if (length(modes) > 3) {
    return(paste("Multiple modes (", length(modes), " values)"))
  } else {
    return(paste(modes, collapse = ", "))
  }}

4.3 Experience & Price

1. Perhitungan Ukuran Pemusatan Data

# Untuk Experience
experience_data <- dataset$Experience
exp_mean <- mean(experience_data, na.rm = TRUE)
exp_median <- median(experience_data, na.rm = TRUE)
exp_mode <- get_mode(experience_data)

# Untuk Price  
price_data <- dataset$Price
price_mean <- mean(price_data, na.rm = TRUE)
price_median <- median(price_data, na.rm = TRUE)
price_mode <- get_mode(price_data)

# Membuat tabel khusus untuk Experience dan Price
special_results <- data.frame(
  Variabel = c("Experience", "Price"),
  Mean = c(round(exp_mean, 2), round(price_mean, 2)),
  Median = c(round(exp_median, 2), round(price_median, 2)),
  Modus = c(exp_mode, price_mode),
  stringsAsFactors = FALSE
)

# Menampilkan dalam DT 
datatable(
  special_results,
  caption = htmltools::tags$caption(
    style = 'caption-side: top; text-align: center; font-weight: bold; font-size: 16px; color: #2C3E50;',
    'Mean, Median, dan Modus untuk Experience dan Price'
  ),
  rownames = FALSE,
  options = list(
    pageLength = 10,
    autoWidth = TRUE,
    dom = 'Bfrtip',
    buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
  ))

2. Interpretasi dan Perbandingan

# Analisis tambahan: skewness dan interpretasi
calculate_skewness <- function(x) {
  x <- x[!is.na(x)]
  n <- length(x)
  mean_x <- mean(x)
  sd_x <- sd(x)
  skew <- sum((x - mean_x)^3) / (n * sd_x^3)
  return(skew)
}

# Menghitung skewness
exp_skewness <- calculate_skewness(experience_data)
price_skewness <- calculate_skewness(price_data)

# Interpretasi skewness
interpret_skewness <- function(skew) {
  if (abs(skew) < 0.5) {
    return("Simetris (mendekati normal)")
  } else if (skew > 0.5) {
    return("Menceng kanan (positif)")
  } else if (skew < -0.5) {
    return("Menceng kiri (negatif)")
  }}

# Tabel dengan skewness dan modus
skewness_results <- data.frame(
  Variabel = c("Experience", "Price"),
  Mean = c(round(exp_mean, 2), round(price_mean, 2)),
  Median = c(round(exp_median, 2), round(price_median, 2)),
  Modus = c(exp_mode, price_mode),
  Skewness = c(round(exp_skewness, 3), round(price_skewness, 3)),
  Interpretasi = c(interpret_skewness(exp_skewness), interpret_skewness(price_skewness)),
  stringsAsFactors = FALSE)

kable(skewness_results, caption = "Analisis Ukuran Pemusatan dan Skewness untuk Experience dan Price")
Analisis Ukuran Pemusatan dan Skewness untuk Experience dan Price
Variabel Mean Median Modus Skewness Interpretasi
Experience 5.49 5.4 8.5 0.023 Simetris (mendekati normal)
Price 9.98 10.0 5.1, 7.6 0.038 Simetris (mendekati normal)

Variabel Experience

  • Mean ≈ Median (5.49 ≈ 5.4) menunjukkan distribusi yang hampir simetris.
  • Namun terdapat perbedaan dengan modus (8.5) yang cukup signifikan dari mean dan median.
  • Nilai skewness 0.023 yang mendekati nol mengkonfirmasi distribusi simetris secara keseluruhan.
  • Perbedaan yang kecil antara mean dan median (hanya 0.09) menunjukkan keseimbangan distribusi.
  • Adanya perbedaan dengan modus mengindikasikan kemungkinan multiple peaks dalam distribusi.

Variabel Price

  • Mean ≈ Median (9.98 ≈ 10.0) menunjukkan distribusi yang simetris.
  • Modus ganda (5.1 dan 7.6) menunjukkan beberapa nilai yang sering muncul dalam data.
  • Nilai skewness 0.038 yang mendekati nol mengindikasikan distribusi normal.
  • Perbedaan minimal antara mean dan median (hanya 0.02) mencerminkan sebaran data yang seimbang.
  • Modus yang lebih rendah dari mean/median mengindikasikan beberapa konsentrasi data di harga lebih rendah.

Perbandingan Kedua Variabel:

  • Kedua variabel memiliki skewness yang sangat rendah (< 0.05) menunjukkan kesimetrisan.
  • Experience dan Price sama-sama menunjukkan kedekatan antara mean dan median.
  • Experience memiliki modus tunggal sedangkan Price memiliki modus ganda.
  • Distribusi data kedua variabel tergolong simetris dan cocok untuk analisis statistik parametrik.
  • Meskipun terdapat perbedaan modus dengan ukuran pemusatan lainnya, pola distribusi secara keseluruhan tetap simetris.

3. Analisis Kemencengan (Skewness)

# Fungsi untuk mendapatkan nilai modus (jika multiple, ambil yang pertama)
get_mode_value <- function(x) {
  uniq_x <- unique(x)
  uniq_x[which.max(tabulate(match(x, uniq_x)))]
}

exp_mode_value <- get_mode_value(experience_data)
price_mode_value <- get_mode_value(price_data)

# Histogram untuk Experience dengan modus dan legend
hist_exp <- ggplot(dataset, aes(x = Experience)) +
  geom_histogram(aes(y = ..density..), bins = 30, fill = "lightblue", alpha = 0.7) +
  geom_density(alpha = 0.8, color = "red", fill = NA, size = 1) +  # KDE garis saja
  geom_vline(aes(xintercept = exp_mean, color = "Mean"), linetype = "solid", size = 1) +
  geom_vline(aes(xintercept = exp_median, color = "Median"), linetype = "dashed", size = 1) +
  geom_vline(aes(xintercept = exp_mode_value, color = "Modus"), linetype = "dotdash", size = 1) +
  scale_color_manual(name = "Ukuran Pemusatan",
                     values = c("Mean" = "red", "Median" = "blue", "Modus" = "green")) +
  labs(title = paste("Distribusi Experience\nSkewness =", round(exp_skewness, 3)),
       x = "Experience", y = "Density") +
  theme_minimal() +
  theme(legend.position = "bottom")

# Histogram untuk Price dengan modus dan legend
hist_price <- ggplot(dataset, aes(x = Price)) +
  geom_histogram(aes(y = ..density..), bins = 30, fill = "lightgreen", alpha = 0.7) +
  geom_density(alpha = 0.8, color = "red", fill = NA, size = 1) +  # KDE garis saja
  geom_vline(aes(xintercept = price_mean, color = "Mean"), linetype = "solid", size = 1) +
  geom_vline(aes(xintercept = price_median, color = "Median"), linetype = "dashed", size = 1) +
  geom_vline(aes(xintercept = price_mode_value, color = "Modus"), linetype = "dotdash", size = 1) +
  scale_color_manual(name = "Ukuran Pemusatan",
                     values = c("Mean" = "red", "Median" = "blue", "Modus" = "orange")) +
  labs(title = paste("Distribusi Price\nSkewness =", round(price_skewness, 3)),
       x = "Price", y = "Density") +
  theme_minimal() +
  theme(legend.position = "bottom")

# Menampilkan kedua histogram
grid.arrange(hist_exp, hist_price, ncol = 2)

Untuk kedua variabel:

  • Mean ≈ Median → Distribusi mendekati simetris.
  • Tidak terdapat kemencengan (skewness) yang signifikan.
  • Data cenderung terdistribusi normal.

Interpretasi Histogram (Berdasarkan nilai statistik):

Experience menunjukkan:

  • Puncak distribusi di sekitar nilai 5-6 dengan modus pada 5.0-5.5.
  • Garis mean (merah), median (biru), dan modus (hijau) yang saling berdekatan di sekitar nilai 5.0-5.5.
  • Sebaran yang relatif simetris ke kiri dan kanan dengan ekor distribusi yang seimbang.
  • Rentang data Experience dari sekitar 2.5 hingga 10.0.
  • Pola distribusi yang mendekati normal dengan skewness minimal (0.023).

Price menunjukkan:

  • Puncak distribusi di sekitar nilai 10.0 dengan modus pada 10.0.
  • Garis mean (merah), median (biru), dan modus (hijau) yang hampir berhimpitan di sekitar nilai 10.0.
  • Sebaran yang merata dari harga rendah (sekitar 5.0) hingga tinggi (sekitar 15.0).
  • Rentang data Price dari sekitar 5.0 hingga 15.0.
  • Distribusi yang mendekati normal dengan skewness sangat kecil (0.038).

Kesimpulan untuk kedua variabel:

  • Ketiga ukuran pemusatan (mean, median, modus) saling berdekatan → distribusi simetris.
  • Tidak terdapat kemencengan (skewness) yang signifikan.
  • Data kedua variabel cenderung terdistribusi normal.
  • Pola distribusi yang seimbang menunjukkan karakteristik data yang homogen.

5 Measures of Dispersion

5.1 Perhitungan Ukuran Penyebaran

# Memilih variabel numerik yang akan dianalisis
variables <- (dataset[, c("Experience", "Price", "Sales", "AdBudget")])

# Membuat fungsi untuk menghitung semua ukuran penyebaran
calculate_dispersion <- function(x) {
  c(
    Range = max(x) - min(x),
    Variance = var(x),
    Std_Dev = sd(x),
    IQR = IQR(x),
    Min = min(x),
    Max = max(x),
    Q1 = quantile(x, 0.25),
    Q3 = quantile(x, 0.75)
  )
}

# Menghitung ukuran penyebaran untuk setiap variabel
results <- lapply(variables, calculate_dispersion)

# Mengubah hasil menjadi data frame
results_df <- as.data.frame(do.call(rbind, results))

# Format tabel yang lebih rapi
formatted_table <- round(results_df[, c("Range", "Variance", "Std_Dev", "IQR")], 2)

# Menampilkan dengan kable untuk tampilan yang lebih baik
formatted_table %>%
  kbl(caption = "TABEL UKURAN PENYEBARAN DATA") %>%
  kable_classic(
    full_width = FALSE, 
    html_font = "Cambria"
  ) %>%
  row_spec(0, bold = TRUE) %>%  # Membuat header tabel bold
  column_spec(1, bold = TRUE) %>%  # Membuat nama variabel bold
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    font_size = 12,
    position = "center"
  ) %>%
  add_header_above(
    c(" " = 1, "Ukuran Penyebaran" = 4),
    bold = TRUE,
    color = "white",
    background = "#2C3E50",
    align = "c"
  ) %>%
  footnote(
    general = "Sumber: Data Midterm Exam.csv",
    general_title = "Keterangan:",
    footnote_as_chunk = TRUE
  )
TABEL UKURAN PENYEBARAN DATA
Ukuran Penyebaran
Range Variance Std_Dev IQR
Experience 9.00 6.81 2.61 4.60
Price 10.00 8.61 2.93 5.10
Sales 190.27 1686.61 41.07 66.47
AdBudget 149.50 1867.96 43.22 74.20
Keterangan: Sumber: Data Midterm Exam.csv

5.2 Interpretasi Nilai

a. Experience

Variabel Experience memiliki range 9.00 dan standar deviasi 2.61, menunjukkan bahwa data pengalaman karyawan tersebar dalam rentang yang relatif sempit. Nilai IQR sebesar 4.60 mengindikasikan bahwa 50% data tengah hanya berbeda sekitar 4.6 tahun. Hal ini menggambarkan variabilitas rendah hingga sedang, dimana pengalaman karyawan relatif homogen dan terkonsentrasi di sekitar nilai rata-ratanya.

b. Price

Price menunjukkan range 10.00 dengan standar deviasi 2.93, lebih tinggi daripada Experience. Nilai IQR 5.10 mengonfirmasi bahwa setengah dari harga produk memiliki rentang variasi yang cukup berarti. Variabilitas ini mencerminkan kemungkinan adanya perbedaan strategi pricing atau segmentasi produk dalam portofolio perusahaan.

c. Sales

Sales mencatat range yang sangat lebar (190.27) dengan standar deviasi tinggi (41.07). IQR sebesar 66.47 menunjukkan bahwa 50% data penjualan tengah tersebar sangat luas. Variabilitas ekstrem ini mengindikasikan bahwa penjualan dipengaruhi oleh banyak faktor, seperti variasi musiman, efektivitas pemasaran, atau perbedaan karakteristik wilayah.

d. AdBudget

AdBudget memiliki variabilitas tertinggi dengan standar deviasi 43.22 dan range 149.50. IQR yang sangat lebar (74.20) menunjukkan perbedaan yang signifikan dalam alokasi anggaran iklan untuk 50% data tengah. Hal ini merefleksikan strategi pemasaran yang sangat terdiferensiasi, dimana perusahaan mengalokasikan anggaran secara tidak merata berdasarkan prioritas produk, wilayah, atau jenis kampanye tertentu.

5.3 Variabel dengan Variabilitas Terbesar

# Memilih variabel numerik yang akan dianalisis
variables <- dataset[, c("Experience", "Price", "Sales", "AdBudget")]

# Membuat fungsi untuk menghitung semua ukuran penyebaran
calculate_dispersion <- function(x) {
  c(
    Range = max(x) - min(x),
    Variance = var(x),
    Std_Dev = sd(x),
    IQR = IQR(x),
    CV = sd(x)/mean(x) * 100  # Coefficient of Variation dalam persen
  )
}

# Menghitung ukuran penyebaran untuk setiap variabel
results <- lapply(variables, calculate_dispersion)

# Mengubah hasil menjadi data frame dan mengurutkan berdasarkan Variance (terbesar ke terkecil)
results_df <- as.data.frame(do.call(rbind, results))
results_df$Variable <- rownames(results_df)
rownames(results_df) <- NULL

# Mengurutkan berdasarkan Variance descending
results_df <- results_df[order(-results_df$Variance), ]

# Format tabel ukuran penyebaran
dispersion_table <- results_df[, c("Variable", "Range", "Variance", "Std_Dev", "IQR", "CV")]
dispersion_table[, -1] <- round(dispersion_table[, -1], 2)

# Membuat tabel analisis variabilitas
variability_analysis <- data.frame(
  Variable = results_df$Variable,
  Rank = 1:nrow(results_df),
  Variability_Level = c("Sangat Tinggi", "Tinggi", "Sedang", "Rendah")[1:nrow(results_df)])

# Menampilkan tabel ukuran penyebaran
kable(dispersion_table, caption = "Analisis Variabilitas Terbesar")
Analisis Variabilitas Terbesar
Variable Range Variance Std_Dev IQR CV
4 AdBudget 149.50 1867.96 43.22 74.20 34.56
3 Sales 190.27 1686.61 41.07 66.47 28.37
2 Price 10.00 8.61 2.93 5.10 29.42
1 Experience 9.00 6.81 2.61 4.60 47.54
# Menampilkan tabel analisis variabilitas
kable(variability_analysis, caption = "Analisis Variabilitas Terbesar")
Analisis Variabilitas Terbesar
Variable Rank Variability_Level
AdBudget 1 Sangat Tinggi
Sales 2 Tinggi
Price 3 Sedang
Experience 4 Rendah

Variabel dengan Variabilitas Terbesar

Data menunjukkan bahwa Anggaran Iklan (Ad Budget) dan Penjualan (Sales) adalah variabel yang memiliki penyebaran (keragaman) data paling luas. Hal ini terlihat dari tingginya angka Standar Deviasi yang mencapai 43.22 untuk Ad Budget, yang tertinggi di antara semua variabel. Intinya, data Anggaran Iklan dan Penjualan adalah yang paling tidak seragam atau tidak konsisten. Angka penyebaran yang besar ini wajar terjadi karena Ad Budget dan Sales adalah data keuangan yang diukur dalam jumlah besar, sehingga perbedaan nilai antar unit data secara otomatis akan terlihat sangat besar.

Penyebab Variabilitas Tinggi pada AdBudget

Variabilitas yang sangat tinggi pada Anggaran Iklan (Ad Budget) berarti dana iklan tidak dialokasikan secara merata karena alasan berikut:

  • Beda Strategi Wilayah: Anggaran dibuat sangat berbeda-beda karena disesuaikan dengan tingkat persaingan atau potensi pasar di tiap daerah.
  • Beda Kategori Produk: Biaya pemasaran sangat bervariasi tergantung jenis produk (misalnya, produk baru butuh biaya iklan lebih besar).
  • Kampanye Khusus: Adanya kegiatan iklan besar yang hanya sesekali atau tidak merata di semua tempat, membuat nilai anggaran melonjak ekstrem pada waktu tertentu.

Penyebab Variabilitas Tinggi pada Sales

Data penjualan yang sangat berubah-ubah menunjukkan bahwa sales sangat peka terhadap berbagai faktor. Penyebabnya:

  • Terpengaruh Banyak Hal, Sales langsung terdampak ketika harga, tim sales, atau budget iklan berubah.
  • Konsumen Tiap Daerah Beda, Daya beli, tren, dan kebiasaan belanja yang berbeda membuat sales tiap wilayah tidak sama.
  • Efek Promosi vs Hari Biasa, Saat promo, sales melonjak sedangkan hari biasa kembali normal. Kontras inilah yang membuat data tampak sangat beragam.

5.4 Visualisasi

5.4.1 BOXPLOT

# Boxplot untuk semua variabel
boxplot_list <- list()

for(i in 1:length(variables)) {
  var_name <- names(variables)[i]
  boxplot_list[[i]] <- ggplot(data = dataset, aes(y = variables[[i]])) +
    geom_boxplot(fill = "lightblue", color = "darkblue", alpha = 0.7) +
    labs(title = paste("Boxplot", var_name),
         y = var_name) +
    theme_minimal() +
    theme(plot.title = element_text(hjust = 0.5, face = "bold"))
}

# Arrange boxplots dalam grid
grid.arrange(grobs = boxplot_list, ncol = 2, 
             top = "BOXPLOT UNTUK SEMUA VARIABEL NUMERIK")

Keempat variabel numerik (Experience, Price, Sales, dan AdBudget) menunjukkan distribusi statistik yang sangat identik dalam dataset ini. Semua variabel memiliki median yang sama, yaitu di sekitar 125, dengan jangkauan data (range) yang seragam, berkisar antara 50 hingga 200. Selain itu, kesamaan pada Interquartile Range (IQR) lebar kotakmenunjukkan tingkat variabilitas yang konsisten di antara 50% data tengah. Karena median berada tepat di tengah kotak, ini mengindikasikan bahwa distribusi keempat variabel tersebut cenderung simetris. Singkatnya, karakteristik nilai dan sebaran dari pengalaman, harga, penjualan, dan anggaran iklan dalam data ini adalah hampir tidak dapat dibedakan satu sama lain.

5.4.2 HISTOGRAM

# HISTOGRAM untuk semua variabel
histogram_list <- list()

for(i in 1:length(variables)) {
  var_name <- names(variables)[i]
  histogram_list[[i]] <- ggplot(data = dataset, aes(x = variables[[i]])) +
    geom_histogram(aes(y = ..density..), 
                   fill = "lightgreen", 
                   color = "darkgreen", 
                   alpha = 0.7, 
                   bins = 15) +
    geom_density(color = "red", size = 1) +
    labs(title = paste("Histogram", var_name),
         x = var_name,
         y = "Density") +
    theme_minimal() +
    theme(plot.title = element_text(hjust = 0.5, face = "bold"))
}

# Arrange histograms dalam grid
grid.arrange(grobs = histogram_list, ncol = 2,
             top = "HISTOGRAM DENGAN DENSITY CURVE")

Keempat diagram histogram yang memuat variabel Experience, Price, Sales, dan AdBudget menunjukkan pola distribusi frekuensi yang sangat seragam dan identik di antara semua variabel. Data untuk keempat atribut ini tersebar dalam rentang yang sama, yaitu dari sekitar 50 hingga 200. Kurva kepadatan (garis merah) pada setiap histogram tidak menunjukkan bentuk lonceng tunggal yang ideal (normal), melainkan cenderung multimodal, ditandai dengan beberapa puncak (mode) yang terlihat jelas di sekitar nilai 90, 150, dan 175. Pola yang konsisten dan berulang pada keempat diagram ini menunjukkan bahwa nilai-nilai untuk Pengalaman, Harga, Penjualan, dan Anggaran Iklan dalam dataset ini memiliki karakteristik penyebaran dan konsentrasi nilai yang sama di beberapa area sepanjang rentangnya.

5.4.3 SCATTER PLOT

# SCATTER PLOT untuk melihat hubungan antar variabel
# Scatter plot: Experience vs Sales
p1 <- ggplot(dataset, aes(x = Experience, y = Sales)) +
  geom_point(color = "blue", alpha = 0.7) +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(title = "Scatter Plot: Experience vs Sales",
       x = "Experience",
       y = "Sales") +
  theme_minimal()

# Scatter plot: Price vs Sales
p2 <- ggplot(dataset, aes(x = Price, y = Sales)) +
  geom_point(color = "darkgreen", alpha = 0.7) +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(title = "Scatter Plot: Price vs Sales",
       x = "Price",
       y = "Sales") +
  theme_minimal()

# Scatter plot: AdBudget vs Sales
p3 <- ggplot(dataset, aes(x = AdBudget, y = Sales)) +
  geom_point(color = "purple", alpha = 0.7) +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(title = "Scatter Plot: AdBudget vs Sales",
       x = "AdBudget",
       y = "Sales") +
  theme_minimal()

# Scatter plot: Experience vs Price
p4 <- ggplot(dataset, aes(x = Experience, y = Price)) +
  geom_point(color = "orange", alpha = 0.7) +
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  labs(title = "Scatter Plot: Experience vs Price",
       x = "Experience",
       y = "Price") +
  theme_minimal()

# Arrange semua scatter plot
grid.arrange(p1, p2, p3, p4, ncol = 2,
             top = "SCATTER PLOT MATRIX - HUBUNGAN ANTAR VARIABEL")

Keempat grafik hubungan antar variabel ini adalah bahwa Anggaran Iklan (AdBudget) adalah penentu utama Penjualan (Sales). Hubungan antara AdBudget dan Sales sangat kuat, positif, dan jelas, dan kekuatan hubungan ini tidak dipengaruhi oleh tingkat Pengalaman. Sebaliknya, faktor Pengalaman (Experience) menunjukkan korelasi nol atau tidak ada hubungan linier sama sekali baik dengan Penjualan maupun Harga, bahkan ketika diperiksa berdasarkan faktor Harga. Sementara itu, Harga (Price) hanya memiliki dampak negatif yang sangat kecil pada Penjualan. Kesimpulannya, dalam data ini, investasi AdBudget adalah pendorong utama bisnis, menjadikan faktor Experience dan Price relatif tidak relevan secara statistik.

5.4.4 VISUALISASI KHUSUS UNTUK VARIABEL DENGAN VARIABILITAS TERTINGGI

# VISUALISASI KHUSUS UNTUK VARIABEL DENGAN VARIABILITAS TERTINGGI
# Identifikasi variabel dengan variance tertinggi dari results_df
highest_var_variable <- results_df$Variable[1]

# Visualisasi khusus untuk variabel dengan variabilitas tertinggi
if(highest_var_variable == "Experience") {
  data_vector <- dataset$Experience
} else if(highest_var_variable == "Price") {
  data_vector <- dataset$Price
} else if(highest_var_variable == "Sales") {
  data_vector <- dataset$Sales
} else {
  data_vector <- dataset$AdBudget
}

# Boxplot untuk variabel dengan variabilitas tertinggi
bp_high_var <- ggplot(data = dataset, aes(y = data_vector)) +
  geom_boxplot(fill = "red", color = "darkred", alpha = 0.7) +
  labs(title = paste("Boxplot -", highest_var_variable),
       subtitle = "Variabel dengan Variabilitas Tertinggi",
       y = highest_var_variable) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", color = "red"),
        plot.subtitle = element_text(hjust = 0.5))

# Histogram untuk variabel dengan variabilitas tertinggi
hist_high_var <- ggplot(data = dataset, aes(x = data_vector)) +
  geom_histogram(aes(y = ..density..), 
                 fill = "red", 
                 color = "darkred", 
                 alpha = 0.7, 
                 bins = 15) +
  geom_density(color = "darkred", size = 1.5) +
  labs(title = paste("Histogram -", highest_var_variable),
       subtitle = "Variabel dengan Variabilitas Tertinggi",
       x = highest_var_variable,
       y = "Density") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", color = "red"),
        plot.subtitle = element_text(hjust = 0.5))

# Tampilkan visualisasi khusus
grid.arrange(bp_high_var, hist_high_var, ncol = 2,
             top = paste("ANALISIS DETAIL: ", highest_var_variable," - VARIABEL DENGAN VARIABILITAS TERTINGGI"))

Analisis detail variabel AdBudget (Anggaran Iklan) menunjukkan bahwa meskipun diidentifikasi memiliki variabilitas tertinggi dengan sebaran penuh dari sekitar 50 hingga 200, distribusi statistiknya cenderung simetris dengan median yang kuat di angka 125. Namun, histogram dan kurva kepadatan mengungkapkan bahwa distribusi ini bersifat multimodal, yang berarti bahwa anggaran iklan tidak terpusat pada satu rata-rata, melainkan memiliki beberapa kelompok nilai yang sering muncul, terutama di sekitar 90, 150, dan 180. Singkatnya, AdBudget memiliki variabilitas nilai yang luas namun terdistribusi secara simetris dan bervariasi dalam kelompok-kelompok nilai yang berbeda.

6 Summary and Interpretation

Berdasarkan hasil analisis pada Sales Dataset, dapat disimpulkan bahwa dari keempat variabel numerik — Experience, Price, Sales, dan AdBudget — variabel yang paling konsisten adalah Experience, karena memiliki penyebaran data paling kecil. Artinya, tingkat pengalaman karyawan relatif seragam di seluruh data. Sebaliknya, variabel yang menunjukkan penyebaran paling besar adalah AdBudget (Anggaran Iklan). Hal ini menunjukkan bahwa perusahaan memberikan dana iklan yang sangat bervariasi, tergantung wilayah, jenis produk, atau strategi kampanye yang digunakan.

Dari sisi pola visualisasi, terlihat bahwa semakin besar anggaran iklan (AdBudget), semakin tinggi pula penjualan (Sales). Ini menandakan adanya hubungan positif yang kuat antara keduanya. Sementara itu, harga (Price dan ukuran toko (StoreSize) tidak menunjukkan pengaruh besar terhadap tingkat penjualan.

Secara keseluruhan, data menggambarkan bahwa perusahaan cenderung sukses meningkatkan penjualan melalui strategi pemasaran yang agresif, bukan semata dari harga atau ukuran toko. Selain itu, distribusi data yang cukup seimbang menunjukkan kondisi bisnis yang stabil dengan variabilitas yang wajar antar variabel.