NOMER 1

Apa yang terjadi pada interval kepercayaan ketika ukuran sampel meningkat?

Jawab: Ketika ukuran sampel meningkat, interval kepercayaan menjadi lebih sempit.

# Fungsi untuk menghitung margin of error dan interval kepercayaan
calculate_margin_of_error <- function(data, confidence_level) {
  sample_mean <- mean(data)
  sample_std <- sd(data)
  sample_size <- length(data)
  
  # Menentukan nilai t untuk tingkat kepercayaan yang diberikan
  t_value <- qt((1 + confidence_level) / 2, df = sample_size - 1)
  
  # Menghitung margin of error
  margin_of_error <- t_value * (sample_std / sqrt(sample_size))
  
  return(margin_of_error)
}

# Menentukan tingkat kepercayaan
confidence_level <- 0.95

# Data awal (sampel kecil)
data_small <- c(50, 52, 53, 55, 58)

# Data dengan sampel yang lebih besar
data_large <- c(50, 52, 53, 55, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78)

# Menghitung margin of error untuk kedua sampel
moe_small <- calculate_margin_of_error(data_small, confidence_level)
moe_large <- calculate_margin_of_error(data_large, confidence_level)

# Menampilkan hasil
cat("Margin of Error untuk sampel kecil:", moe_small, "\n")
## Margin of Error untuk sampel kecil: 3.786566
cat("Margin of Error untuk sampel besar:", moe_large, "\n")
## Margin of Error untuk sampel besar: 5.035919

NOMER 2

Apa yang dimaksud dengan margin of error dalam interval kepercayaan?

Jawab: Margin of error (MOE) dalam interval kepercayaan adalah jarak dari nilai estimasi ke batas atas atau batas bawah dari interval kepercayaan.

# Contoh data sampel
data <- c(50, 52, 53, 55, 58, 60, 62, 65, 67, 70)

# Menentukan tingkat kepercayaan (confidence level)
confidence_level <- 0.95

# Menghitung rata-rata dan standar deviasi sampel
sample_mean <- mean(data)
sample_std <- sd(data)
sample_size <- length(data)

# Menentukan nilai t untuk tingkat kepercayaan 95%
t_value <- qt((1 + confidence_level) / 2, df = sample_size - 1)

# Menghitung margin of error
margin_of_error <- t_value * (sample_std / sqrt(sample_size))

# Menampilkan hasil
cat("Margin of Error:", margin_of_error, "\n")
## Margin of Error: 4.849442

NOMER 3

Dari data rnorm(100), berapa banyak data yang berada di luar ±2 SD? Gunakan set.seed(123)

# Set seed untuk reproducibility
set.seed(123)

# Menghasilkan 100 data acak dari distribusi normal standar
data <- rnorm(100)

# Menghitung mean dan standar deviasi
mean_data <- mean(data)
sd_data <- sd(data)

# Menghitung batas atas dan bawah (±2 SD)
batas_atas <- mean_data + 2*sd_data
batas_bawah <- mean_data - 2*sd_data

# Menghitung jumlah data di luar ±2 SD
jumlah_outliers <- sum(data > batas_atas | data < batas_bawah)
print(paste("Jumlah data di luar ±2 SD:", jumlah_outliers))
## [1] "Jumlah data di luar ±2 SD: 5"
# Persentase data di luar ±2 SD
persentase_outliers <- jumlah_outliers/100 * 100
print(paste("Persentase data di luar ±2 SD:", persentase_outliers, "%"))
## [1] "Persentase data di luar ±2 SD: 5 %"

NOMER 4

Lakukan bootstrap 1000 kali terhadap sampel x <- c(5, 7, 8, 10, 12). Hitung rata-rata dari setiap bootstrap, lalu ambil rata-rata dari hasil tersebut. Nilai mendekati berapa? Gunakan set.seed(123)

# Set seed untuk hasil yang konsisten
set.seed(123)

# Sampel awal
x <- c(5, 7, 8, 10, 12)
# Lakukan bootstrap 1000 kali
bootstrap_means <- replicate(1000, mean(sample(x, replace = TRUE)))

# Tampilkan beberapa hasil awal
head(bootstrap_means)
## [1] 7.6 8.4 8.6 7.4 7.0 9.8
# Rata-rata dari semua hasil bootstrap
mean_bootstrap <- mean(bootstrap_means)
mean_bootstrap
## [1] 8.3572
round(mean_bootstrap, 2)
## [1] 8.36

NOMER 5

Dengan menggunakan fungsi rbinom, simulasikan 1000 percobaan dengan n = 10 dan p = 0.3. Berapa rata-rata jumlah sukses? Gunakan set.seed(123)

# Menetapkan seed untuk reproduksibilitas
set.seed(123)

# Mensimulasikan 1000 percobaan binomial dengan n = 10 dan p = 0.3
hasil <- rbinom(1000, size = 10, prob = 0.3)

# Menghitung rata-rata jumlah sukses
rata_rata <- mean(hasil)

# Menampilkan hasil
print(rata_rata)
## [1] 2.989

NOMER 6

Simulasikan 100 data dari distribusi uniform antara 20 sampai 80. Berapa nilai range (max - min) yang paling mendekati hasil simulasi? Gunakan set.seed(123)

# Menetapkan seed untuk reproduksibilitas
set.seed(123)
# Mensimulasikan 100 data dari distribusi uniform antara 20 sampai 80
data <- runif(100, min = 20, max = 80)

# Menghitung range (max - min)
range_value <- max(data) - min(data)

# Menampilkan nilai min, max, dan range
cat("Nilai minimum:", min(data), "\n")
## Nilai minimum: 20.03749
cat("Nilai maksimum:", max(data), "\n")
## Nilai maksimum: 79.65619
cat("Range (max - min):", range_value, "\n")
## Range (max - min): 59.6187

NOMER 7

Buat 100 data dari distribusi normal N(0,1), lalu ambil hanya data yang lebih besar dari 1. Berapa banyak data yang tersisa? Gunakan set.seed(123)

# Menetapkan seed untuk reproduksibilitas
set.seed(123)

# Membuat 100 data dari distribusi normal N(0,1)
data <- rnorm(100, mean = 0, sd = 1)

# Memfilter data yang lebih besar dari 1
data_lebih_dari_1 <- data[data > 1]

# Menghitung jumlah data yang tersisa
jumlah_data_tersisa <- length(data_lebih_dari_1)

# Menampilkan hasil
cat("Jumlah data yang lebih besar dari 1:", jumlah_data_tersisa, "\n")
## Jumlah data yang lebih besar dari 1: 17

NOMER 8

Simulasikan 50 data dari N(100,15) dan 50 data dari N(80,10), lalu gabungkan. Berapa rata-rata dari seluruh data gabungan? Gunakan set.seed(123)

# Mengatur seed untuk reproducibility
set.seed(123)

# Mensimulasikan 50 data dari N(100,15)
data1 <- rnorm(50, mean = 100, sd = 15)

# Mensimulasikan 50 data dari N(80,10)
data2 <- rnorm(50, mean = 80, sd = 10)

# Menggabungkan kedua dataset
data_gabungan <- c(data1, data2)

# Menghitung rata-rata dari data gabungan
rata_rata <- mean(data_gabungan)

# Menampilkan hasil
cat("Rata-rata dari data gabungan:", rata_rata, "\n")
## Rata-rata dari data gabungan: 90.99007
# Secara teoritis, rata-rata seharusnya mendekati (100+80)/2 = 90
# karena kita memiliki jumlah data yang sama dari kedua distribusi

NOMER 9

Buat data berikut: x <- c(5, 8, 12, 13, 15, 18, 21) Lakukan bootstrap sebanyak 10.000 kali untuk menghitung interval kepercayaan 95% dari median data. Manakah interval berikut yang paling mendekati hasil? Gunakan set.seed(123)

# Mengatur seed untuk reproducibility
set.seed(123)

# Data yang diberikan
x <- c(5, 8, 12, 13, 15, 18, 21)

# Fungsi untuk melakukan bootstrap
bootstrap_median <- function(data, R) {
  n <- length(data)
  medians <- numeric(R)
  
  for(i in 1:R) {
    # Sampling dengan pengembalian
    resampled <- sample(data, n, replace = TRUE)
    # Menghitung median dari sampel bootstrap
    medians[i] <- median(resampled)
  }
  
  return(medians)
}

# Melakukan bootstrap 10.000 kali
R <- 10000
bootstrap_medians <- bootstrap_median(x, R)

# Menghitung interval kepercayaan 95% menggunakan metode persentil
ci_lower <- quantile(bootstrap_medians, 0.025)
ci_upper <- quantile(bootstrap_medians, 0.975)

# Menampilkan hasil
cat("Interval kepercayaan 95% untuk median:", ci_lower, "sampai", ci_upper, "\n")
## Interval kepercayaan 95% untuk median: 8 sampai 18
# Melihat distribusi median bootstrap
hist(bootstrap_medians, main="Distribusi Bootstrap dari Median", xlab="Median")
abline(v=ci_lower, col="red4", lwd=2)
abline(v=ci_upper, col="red", lwd=2)

# Visualisasi interval kepercayaan
print(quantile(bootstrap_medians, c(0.025, 0.25, 0.5, 0.75, 0.975)))
##  2.5%   25%   50%   75% 97.5% 
##     8    12    13    15    18

NOMER 10

Buatlah 100 data acak dari distribusi binomial dengan n = 10 dan p = 0.3. Hitung rata-ratanya. Berapakah nilai yang paling mendekati rata-rata tersebut? Gunakan set.seed(123)

# Mengatur seed untuk reproducibility
set.seed(123)

# Membuat 100 data acak dari distribusi binomial dengan n = 10 dan p = 0.3
data_binomial <- rbinom(100, size = 10, prob = 0.3)

# Menghitung rata-rata
rata_rata <- mean(data_binomial)

# Menampilkan hasil
cat("Data binomial:", head(data_binomial), "...\n")
## Data binomial: 2 4 3 5 5 1 ...
cat("Rata-rata dari 100 data binomial:", rata_rata, "\n")
## Rata-rata dari 100 data binomial: 3.02
# Secara teoritis, rata-rata distribusi binomial adalah n*p = 10*0.3 = 3
cat("Nilai yang diharapkan secara teoritis:", 10*0.3, "\n")
## Nilai yang diharapkan secara teoritis: 3
# Histogram distribusi
hist(data_binomial, breaks=0:10, main="Histogram Data Binomial",
     xlab="Nilai", ylab="Frekuensi")
abline(v=rata_rata, col="red", lwd=2)

NOMER 11

Buatlah sebuah regresi linear sederhana dari data berikut: x <- 1:10 y <- 2 * x + rnorm(10, 0, 1) Berapa estimasi koefisien slope dari model lm(y ~ x)? Gunakan set.seed(123)

# Mengatur seed untuk reproducibility
set.seed(123)

# Membuat data
x <- 1:10
y <- 2 * x + rnorm(10, 0, 1)

# Membuat model regresi linear
model <- lm(y ~ x)

# Menampilkan ringkasan model
summary(model)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.1348 -0.5624 -0.1393  0.3854  1.6814 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.5255     0.6673   0.787    0.454    
## x             1.9180     0.1075  17.835    1e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9768 on 8 degrees of freedom
## Multiple R-squared:  0.9755, Adjusted R-squared:  0.9724 
## F-statistic: 318.1 on 1 and 8 DF,  p-value: 1e-07
# Mengambil koefisien slope
slope <- coef(model)[2]
cat("Koefisien slope dari model adalah:", slope, "\n")
## Koefisien slope dari model adalah: 1.918029
# Visualisasi data dan garis regresi
plot(x, y, main="Regresi Linear Sederhana", xlab="x", ylab="y")
abline(model, col="red")

NOMER 12

Simulasikan 100 data dari distribusi Poisson dengan λ = 4. Berapa nilai modus dari data yang dihasilkan? Gunakan set.seed(123)

# Menetapkan seed untuk reproduksibilitas
set.seed(123)

# Mensimulasikan 100 data dari distribusi Poisson dengan λ = 4
data <- rpois(100, lambda = 4)

# Menghitung frekuensi kemunculan setiap nilai
tabel_frekuensi <- table(data)

# Menampilkan tabel frekuensi
print(tabel_frekuensi)
## data
##  0  1  2  3  4  5  6  7  8  9 10 
##  1  4 19 19 18 16 11  7  3  1  1
# Mencari nilai modus (nilai dengan frekuensi tertinggi)
modus <- as.numeric(names(tabel_frekuensi)[which.max(tabel_frekuensi)])

# Menampilkan modus
cat("Nilai modus:", modus, "\n")
## Nilai modus: 2
cat("Frekuensi:", max(tabel_frekuensi), "\n")
## Frekuensi: 19

NOMER 13

Diberikan data:x <- rnorm(100)y <- 2*x + rnorm(100). Manakah kode berikut yang benar untuk melihat ringkasan dari model regresi?

summary(lm(y ~ x))
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.1348 -0.5624 -0.1393  0.3854  1.6814 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.5255     0.6673   0.787    0.454    
## x             1.9180     0.1075  17.835    1e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9768 on 8 degrees of freedom
## Multiple R-squared:  0.9755, Adjusted R-squared:  0.9724 
## F-statistic: 318.1 on 1 and 8 DF,  p-value: 1e-07

Nomer 14

Simulasikan 100 data dari distribusi eksponensial dengan rate = 1. Berapakah nilai median dari data tersebut? Gunakan set.seed(123)

# Set seed untuk reproduksibilitas
set.seed(123)

# Simulasikan 100 data dari distribusi eksponensial dengan rate = 1
data_expo <- rexp(100, rate = 1)

# Tampilkan beberapa nilai sampel pertama
head(data_expo)
## [1] 0.84345726 0.57661027 1.32905487 0.03157736 0.05621098 0.31650122
# Hitung statistik ringkasan
summary(data_expo)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.004599 0.314050 0.847754 1.045719 1.468794 7.211008
# Hitung median dengan fungsi median()
median_value <- median(data_expo)
print(paste("Nilai median:", median_value))
## [1] "Nilai median: 0.847754047467821"

NOMER 15

Buatlah simulasi data dengan 3 variabel prediktorx1 <- rnorm(100) x2 <- x1 + rnorm(100, 0, 0.01) x3 <- rnorm(100) y <- 3 + 2x1 - 1x3 + rnorm(100) Buat model lm(y ~ x1 + x2 + x3). Berdasarkan output model, manakah pernyataan berikut yang paling tepat? Gunakan set.seed(42)

# Set seed untuk reproduksibilitas
set.seed(42)

# Simulasi data
x1 <- rnorm(100)
x2 <- x1 + rnorm(100, 0, 0.01)  # x2 sangat berkorelasi dengan x1
x3 <- rnorm(100)
y <- 3 + 2*x1 - 1*x3 + rnorm(100)

# Lihat korelasi antar variabel
cor_matrix <- cor(cbind(x1, x2, x3))
print("Matriks Korelasi:")
## [1] "Matriks Korelasi:"
print(cor_matrix)
##            x1         x2         x3
## x1  1.0000000  0.9999624 -0.1447773
## x2  0.9999624  1.0000000 -0.1441143
## x3 -0.1447773 -0.1441143  1.0000000
# Buat model regresi
model <- lm(y ~ x1 + x2 + x3)
summary_model <- summary(model)
print(summary_model)
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.7944 -0.5867 -0.1038  0.6188  2.3280 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.03150    0.08914  34.007   <2e-16 ***
## x1           1.17483    9.89434   0.119    0.906    
## x2           0.88292    9.89031   0.089    0.929    
## x3          -1.03161    0.08882 -11.614   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8867 on 96 degrees of freedom
## Multiple R-squared:  0.8927, Adjusted R-squared:  0.8893 
## F-statistic: 266.2 on 3 and 96 DF,  p-value: < 2.2e-16
# Cek Variance Inflation Factor (VIF)
library(car)
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.4.3
vif_values <- vif(model)
print("Nilai VIF:")
## [1] "Nilai VIF:"
print(vif_values)
##           x1           x2           x3 
## 13366.880011 13364.265465     1.027438

NOMER 16

Buat 100 data acak dari distribusi normal dengan mean 50 dan sd 10. Hitung standar deviasi dari data tersebut. Gunakan set.seed(123)

# Set seed untuk reproducibility
set.seed(123)

# Menghasilkan 100 data acak dari distribusi normal dengan mean=50 dan sd=10
data <- rnorm(100, mean=50, sd=10)

# Menghitung standar deviasi dari data
sd_hasil <- sd(data)
print(paste("Standar deviasi dari data:", round(sd_hasil, 2)))
## [1] "Standar deviasi dari data: 9.13"

NOMER 17

Manakah kode berikut yang benar untuk membuat model regresi linear dari y terhadap x?

set.seed(123)
x <- rnorm(100, mean = 50, sd = 10)
y <- 5 + 0.7 * x + rnorm(100, mean = 0, sd = 5)
reg <- lm(y ~ x)
summary(reg)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.5367 -3.4175 -0.4375  2.9032 16.4520 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.79778    2.76324   2.098   0.0385 *  
## x            0.67376    0.05344  12.608   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.854 on 98 degrees of freedom
## Multiple R-squared:  0.6186, Adjusted R-squared:  0.6147 
## F-statistic:   159 on 1 and 98 DF,  p-value: < 2.2e-16
plot(x, y, main = "Scatterplot dengan Garis Regresi", pch = 19, col = "blue")
abline(reg, col = "red", lwd = 2)

NOMER 18

Dari data rnorm(100, mean=70, sd=5), berapakah nilai maksimum dari data tersebut? Gunakan set.seed(123)

# Set seed untuk reproducibility
set.seed(123)

# Menghasilkan 100 data acak dari distribusi normal dengan mean=70 dan sd=5
data <- rnorm(100, mean=70, sd=5)

# Menghitung nilai maksimum
max_value <- max(data)
print(paste("Nilai maksimum:", round(max_value, 2)))
## [1] "Nilai maksimum: 80.94"
# Melihat beberapa nilai tertinggi dari data
sorted_data <- sort(data, decreasing = TRUE)
print("Lima nilai tertinggi:")
## [1] "Lima nilai tertinggi:"
print(head(sorted_data, 5))
## [1] 80.93666 80.84478 80.25042 78.93457 78.57532

NOMER 19

Manakah kode berikut yang benar untuk mensimulasikan 100 nilai dari distribusi normal dengan mean = 70 dan sd = 15?

data3 <- rnorm(100, 70, 15)
head(data3)
## [1] 59.34390 73.85326 66.29962 64.78686 55.72572 69.32458
# Sintaks yang salah (tidak dijalankan)
# rnorm(n = 100, mu = 70, sigma = 15) 
# rnorm(100, sd = 70, mean = 15)
# rnorm(70, 15, 100)

NOMER 20

Gunakan sample() untuk membuat 100 data kategorik (“A”, “B”, “C”) dengan probabilitas masing-masing 0.2, 0.3, 0.5. Berapa banyak kategori “B”? Gunakan set.seed(123)

# Set seed untuk reproducibility
set.seed(123)

# Membuat 100 data kategorik dengan fungsi sample()
kategori <- c("A", "B", "C")
probabilitas <- c(0.2, 0.3, 0.5)
data_kategorik <- sample(kategori, size = 100, replace = TRUE, prob = probabilitas)

# Menghitung frekuensi masing-masing kategori
tabel_frekuensi <- table(data_kategorik)
print(tabel_frekuensi)
## data_kategorik
##  A  B  C 
## 18 29 53
# Menghitung jumlah kategori "B"
jumlah_B <- sum(data_kategorik == "B")
print(paste("Jumlah kategori B:", jumlah_B))
## [1] "Jumlah kategori B: 29"