diff --git a/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/execute-results/html.json b/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/execute-results/html.json index ab8aa577..a0677425 100644 --- a/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/execute-results/html.json +++ b/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "f948c3263da52b03757a5583fb9518df", + "hash": "9063815cab349d6fe24032a2ff7a4fb2", "result": { "engine": "knitr", - "markdown": "---\ntitle: \"(Pertemuan 09) ANOVA dan Chi-Squared\"\nsubtitle: \"ANOVA and Chi-Squared\"\ndescription: \"Offline di Departemen Matematika\"\ndate: 11/25/2024\npage-navigation: true\nformat: html\n---\n\n\n\n# ANOVA\n\nAnalysis of Variance (ANOVA) digunakan untuk melakukan uji hipotesis terhadap lebih dari dua populasi. Beberapa asumsi dalam anova adalah:\n\n- Sampel acak saling bebas/independen\n- Populasi berdistribusi normal\n- Populasi memiliki variansi seragam\n\n## Ukuran Sampel Seragam\n\nMisalkan populasi 1 berdistribusi $N(\\mu=1,\\sigma^2=1)$, populasi 2 berdistribusi $N(\\mu = 0.9, \\sigma^2 = 1)$, dan populasi 3 berdistrbusi $N(\\mu = 1.1, \\sigma^2 = 1)$.\n\nDilakukan pengambilan sampel acak dari ketiga populasi tersebut berukuran 10.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nn1 <- 10\nn2 <- 10\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n```\n:::\n\n\n\nSelanjutnya, akan dibuat dataframe dari sampel acak tersebut. Kolom pop.source menyatakan asal populasi (1,2,3) dan kolom pops.value menyatakan nilai sampel acak.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n```\n:::\n\n\n\nSebagai analisis pendahuluan, mari kita perhatikan mean, standar deviasi, dan boxplot dari sampel acak masing-masing populasi.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\naggregate(pops.value~pop.source, data=data, \n function(x) c(mean = mean(x),sd = sd(x)))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n pop.source pops.value.mean pops.value.sd\n1 pops.1 1.0025509 1.1154917\n2 pops.2 1.3577494 0.9804963\n3 pops.3 0.8434632 0.8088781\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nboxplot(pops.value~pop.source, data=data)\n```\n\n::: {.cell-output-display}\n![](modul9_files/figure-html/unnamed-chunk-4-1.png){width=672}\n:::\n:::\n\n\n\nBerdasarkan intuisi pengamatan terhadap sampel acak, kita dapat menebak bahwa mean ketiga populasi tersebut tidaklah berbeda signifikan secara statistik.\n\nUntuk memverifikasi, kita akan melakukan uji ANOVA satu arah. Dengan tingkat signifikansi $\\alpha=0.05$, hipotesis dari uji ini adalah:\n\n- $H_0: \\mu_1 = \\mu_2 = \\mu_3$\n- $H_1:$ setidaknya salah satu dari $\\mu_1,\\mu_2,\\mu_3$ berbeda nilainya\n\nUntuk menjalankan uji ANOVA satu arah, digunakan fungsi oneway.test()\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tOne-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.72722, num df = 2, denom df = 27, p-value = 0.4925\n```\n\n\n:::\n:::\n\n\n\nFungsi lain yang dapat digunakan adalah aov()\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 1.387 0.6933 0.727 0.492\nResiduals 27 25.740 0.9533 \n```\n\n\n:::\n:::\n\n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n- $F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}$\n- *p-value* \\< $\\alpha$.\n\nDengan $k$ adalah banyak populasi dan $n$ adalah ukuran sampel acak dalam satu populasi.\n\nKita bisa mendapatkan nilai F tabel.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nalpha = 0.05\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = 3*(10-1))\n\nF_tabel\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3.354131\n```\n\n\n:::\n:::\n\n\n\nDidapatkan $$F_\\text{hitung} = 0.18194 < 3.354131 = F_\\text{tabel}$$ dan *p-value* = 0.8347 \\> 0.05 = $\\alpha$. Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana tidak ada perbedaan yang signifikan secara statistik antara nilai $\\mu_1, \\mu_2, \\mu_3$\n\n## Ukuran Sampel Tidak Seragam\n\nUntuk kasus pengambilan sampel acak dari ketiga populasi dengan ukuran tidak seragam, kita hanya perlu mengubah nilai $n_1, n_2, n_3$.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nn1 <- 9\nn2 <- 15\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n```\n:::\n\n\n\nKita akan melakukan uji ANOVA satu arah dengan fungsi yang sama seperti sebelumnya.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tOne-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.98669, num df = 2, denom df = 31, p-value = 0.3842\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 2.17 1.085 0.987 0.384\nResiduals 31 34.09 1.100 \n```\n\n\n:::\n:::\n\n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n- $F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}$\n- *p-value* \\< $\\alpha$.\n\ndengan $$N = \\sum_1^kn_i$$\n\nMaka kita dapat F tabel.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = n1+n2+n3 - 3)\n\nF_tabel\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3.304817\n```\n\n\n:::\n:::\n\n\n\nDidapatkan $$F_\\text{hitung} = 1.3941 < 3.304817 = F_\\text{tabel}$$ dan *p-value* = 0.2632 \\> 0.05 = $\\alpha$. Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana tidak ada perbedaan yang signifikan secara statistik antara nilai $\\mu_1, \\mu_2, \\mu_3$\n\n# Uji Chi Squared\n\nUji Chi Squared (Khi Kuadrat) dibagi menjadi dua jenis, yaitu uji kecocokan model (goodness of fit) dan uji independensi.\n\n## Uji Goodness of Fit\n\nUji ini digunakan untuk mengetahui apakah suatu data memiliki distribusi probabilitas tertentu yang sudah kita duga sebelumnya.\n\n### Menggunakan built-in function\n\nMisalkan kita mempunyai data sampel acak berukuran 6 (lihat variabel \"obs\" dibawah).\n\nSampel acak tersebut berasal dari suatu populasi dengan ruang nilai diskrit. Dapatkah kita menyimpulkan bahwa populasi tersebut berdistribusi uniform?\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nobs <- c(20,22,17,18,19,24)\nprob = c(replicate(length(obs),1))/length(obs)\n```\n:::\n\n\n\nUntuk menguji hipotesis tersebut, kita bisa menggunakan uji chi-squared. Hipotesis yang digunakan adalah:\n\n- $H_0:$ populasi berdistribusi uniform\n- $H_1:$ populasi tidak berdistribusi uniform\n\nDengan tingkat signfikasi $\\alpha=0.05$, daerah kritis diberikan oleh - $\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, k-1}$ - *p-value* \\< $\\alpha$.\n\nUji chi-squared dapat dilakukan dengan fungsi chisq.test()\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(obs, p = prob)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tChi-squared test for given probabilities\n\ndata: obs\nX-squared = 1.7, df = 5, p-value = 0.8889\n```\n\n\n:::\n:::\n\n\n\ndan $\\chi^2_{\\alpha, k-1}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=15-1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 23.68479\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 1.7 < 23.68479 = \\chi^2_{\\alpha, k-1}$ dan p-value = 0.8889 \\> $0.05 = \\alpha$, maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana populasi berdistribusi uniform.\n\n### Menggunakan statistik uji\n\nMisal kita ingin menguji apakah sebuah dadu seimbang dengan pengambilan sampel acak berukuran 120 pelemparan.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nn_dadu <- 120\ndadu <- ceiling(runif(n=n_dadu, min = 0, max=6))\ndadu\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n [1] 2 2 5 6 3 2 3 4 3 4 5 3 4 4 4 1 4 4 1 5 1 6 3 1 4 4 1 2 3 5 5 5 2 6 3 4 1\n [38] 1 2 3 5 6 1 5 3 2 6 5 3 2 5 5 2 6 5 2 6 1 5 6 2 6 5 6 4 6 3 4 4 4 3 5 1 3\n [75] 2 2 3 5 2 6 3 3 5 5 4 2 4 2 1 6 1 4 3 1 3 1 2 6 4 6 1 6 2 1 1 2 3 3 4 5 1\n[112] 1 6 6 5 4 4 4 2 5\n```\n\n\n:::\n:::\n\n\n\nDengan cara yang sama, kita dapat melakukan uji chi-squared\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nprob = c(replicate(length(dadu),1))/length(dadu)\n\nchisq.test(dadu, p = prob)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in chisq.test(dadu, p = prob): Chi-squared approximation may be\nincorrect\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tChi-squared test for given probabilities\n\ndata: dadu\nX-squared = 95.429, df = 119, p-value = 0.945\n```\n\n\n:::\n:::\n\n\n\nTerdapat pesan \"Warning: Chi-squared approximation may be incorrect\". Hal ini terjadi karena terdapat beberapa pengulangan nilai pada ruang sampel, di mana masing-masing nilai tersebut dianggap sebagai observasi independen yang memiliki probabilitas $\\frac{1}{120}$. Sedangkan, kita ingin menguji apakah peluang masing-masing mata dadu muncul bernilai $\\frac{1}{6}$.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nx <- table(dadu)\nx\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\ndadu\n 1 2 3 4 5 6 \n19 20 20 22 21 18 \n```\n\n\n:::\n:::\n\n\n\nMaka, kita dapat melakukan uji chi-squared tanpa menggunakan fungsi chisq.test()\n\nKarena kita ingin menguji apakah dadu seimbang, kita akan membandingkan nilai \"observasi\" kemunculan mata dadu dengan nilai \"ekspektasi\" kemunculan mata dadu jika dadu seimbang.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nval.dadu <- names(x)\nobs.dadu <- as.vector(x)\nex.dadu <- c(replicate(6, n_dadu/6))\n\nrbind(val.dadu, obs.dadu, ex.dadu)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n [,1] [,2] [,3] [,4] [,5] [,6]\nval.dadu \"1\" \"2\" \"3\" \"4\" \"5\" \"6\" \nobs.dadu \"19\" \"20\" \"20\" \"22\" \"21\" \"18\"\nex.dadu \"20\" \"20\" \"20\" \"20\" \"20\" \"20\"\n```\n\n\n:::\n:::\n\n\n\nIngat hipotesis yang digunakan adalah\n\n- $H_0:$ dadu seimbang, hasil pelemparan dadu berdistribusi uniform\n- $H_1:$ hasil pelemparan dadu tidak berdistribusi uniform\n\nStatistik uji yang digunakan adalah $$\\chi^2 = \\sum_i^k \\frac{(o_i-e_i)^2}{e_i}$$\n\nDidapat $\\chi^2_\\text{hitung}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchi.hitung <- sum((obs.dadu-ex.dadu)**2/ex.dadu)\nchi.hitung\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 0.5\n```\n\n\n:::\n:::\n\n\n\ndan $\\chi^2_{\\alpha, k-1}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=6-1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 11.0705\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 2.8 < 11.0705 = \\chi^2_{\\alpha, k-1}$, maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana dadu seimbang.\n\n### Membandingkan dengan distribusi non-uniform\n\nMisalkan kita memiliki populasi dengan ruang nilai kontinu \\[1.45, 4.95\\], dan dilakukan pengambilan sampel acak berukuran 40 yang dibagi ke dalam 7 kelas\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlower_bound <- c()\nfor (i in 1:7) {lower_bound[i] <- 1.45+(i-1)*0.5}\n\nupper_bound <- c()\nfor (i in 1:7) {upper_bound[i] <- 1.95+(i-1)*0.5}\n\nobs_class <- c(2,1,4,15,10,5,3)\n\ndata.frame(lower_bound, upper_bound, obs_class)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n lower_bound upper_bound obs_class\n1 1.45 1.95 2\n2 1.95 2.45 1\n3 2.45 2.95 4\n4 2.95 3.45 15\n5 3.45 3.95 10\n6 3.95 4.45 5\n7 4.45 4.95 3\n```\n\n\n:::\n:::\n\n\n\nDapatkah kita menyimpulkan bahwa populasi asal sampel acak tersebut berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n\nKita dapat mulai dengan membuat kolom nilai ekspektasi masing-masing kelas jika populasi berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmu = 3.5\ns = 0.7\n\n\nprob_class <- c()\nfor (i in 1:7) {prob_class[i] <- \n pnorm(q=upper_bound[i], mean=mu, sd=s) - \n pnorm(q=lower_bound[i], mean=mu, sd=s)}\nprob_class\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 0.01170195 0.05340264 0.14921024 0.25551089 0.26831326 0.17279049 0.06820853\n```\n\n\n:::\n\n```{.r .cell-code}\nex_class <- prob_class*sum(obs_class)\nex_class\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 0.4680779 2.1361054 5.9684098 10.2204356 10.7325306 6.9116195 2.7283412\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nclass <- data.frame(lower_bound, upper_bound, obs_class,ex_class)\n\nclass\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n lower_bound upper_bound obs_class ex_class\n1 1.45 1.95 2 0.4680779\n2 1.95 2.45 1 2.1361054\n3 2.45 2.95 4 5.9684098\n4 2.95 3.45 15 10.2204356\n5 3.45 3.95 10 10.7325306\n6 3.95 4.45 5 6.9116195\n7 4.45 4.95 3 2.7283412\n```\n\n\n:::\n:::\n\n\n\nPerhatikan bahwa terdapat beberapa baris dengan nilai ekspektasi yang cukup kecil (\\<5). Maka, untuk melakukan uji chi-squared yang lebih akurat, akan dilakukan penggabungan kelas-kelas berhimpit tersebut.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ni <- 1\nwhile (i < nrow(class)){\n while (class[[4]][[i]]<5){\n class[[4]][[i]] <- class[[4]][[i]] + class[[4]][[i+1]]\n class[[3]][[i]] <- class[[3]][[i]] + class[[3]][[i+1]]\n class[[2]][[i]] <- class[[2]][[i+1]]\n class[[1]][[i]] <- class[[1]][[i+1]]\n class <- class[-c(i+1), ]\n }\n i <- i+1\n}\n```\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nif (class[[4]][[nrow(class)]]<5){\n class[[4]][[nrow(class)-1]] <- class[[4]][[nrow(class)]] + class[[4]][[nrow(class)-1]]\n class[[3]][[nrow(class)-1]] <- class[[3]][[nrow(class)]] + class[[3]][[nrow(class)-1]]\n class[[2]][[nrow(class)-1]] <- class[[2]][[nrow(class)-1]]\n class[[1]][[nrow(class)-1]] <- class[[1]][[nrow(class)-1]]\n class <- class[-c(nrow(class)), ]\n}\n\nclass\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n lower_bound upper_bound obs_class ex_class\n1 2.45 2.95 7 8.572593\n4 2.95 3.45 15 10.220436\n5 3.45 3.95 10 10.732531\n6 3.95 4.45 8 9.639961\n```\n\n\n:::\n:::\n\n\n\nTelah didapat data nilai observasi dan nilai ekspektasi yang diperbaiki.\n\nSebagai intuisi awal, kita bisa memperhatikan barplot dari nilai observasi sampel acak dibandingkan dengan nilai ekspektasinya.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npar(mfrow = c(1,2))\nbarplot(class$obs_class)\nbarplot(class$ex_class)\n```\n\n::: {.cell-output-display}\n![](modul9_files/figure-html/unnamed-chunk-26-1.png){width=672}\n:::\n:::\n\n\n\nSelanjutnya, kita bisa melakukan uji chi-squared terhadap masing-masing kelas observasi dengan metode yang sama. Hipotesis uji adalah\n\n- $H_0:$ populasi berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n- $H_1:$ populasi tidak berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchi_hitung <- sum((class$obs_class-class$ex_class)**2/class$ex_class)\nchi_hitung\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 2.852626\n```\n\n\n:::\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=7-1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 12.59159\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 2.852626 < 12.59159 = \\chi^2_{\\alpha, k-1}$, maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana populasi berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$.\n\n## Uji Independensi\n\nUji Independensi dilakukan untuk mengetahui apakah antarvariabel kategorik saling bebas (independen) atau tidak saling bebas (dependen).\n\nPertama-tama kita akan mengimport dataset \"treatment\" dari situs github.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndf <- read.csv(\"https://raw.githubusercontent.com/selva86/datasets/master/treatment.csv\")\nView(df)\n```\n:::\n\n\n\nMisal kita ingin menguji apakah ada hubungan antara variabel kategorik treatment dengan variabel kategorik improvement.\n\nKita dapat membuat tabel kontingensi berukuran 2x2 dari variabel kategorik tersebut.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntabel <- table(df$treatment, df$improvement)\ntabel\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n \n improved not-improved\n not-treated 26 29\n treated 35 15\n```\n\n\n:::\n:::\n\n\n\nIngat hipotesis yang akan diuji adalah:\n\n- $H_0$: treatment dan improvement tidak saling mempengaruhi (independen)\n- $H_1$: treatment dan improvement saling mempengaruhi (tidak independen)\n\nDengan tingkat signfikasi $\\alpha=0.05$, daerah kritis diberikan oleh\n\n- $\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, (r-1)(c-1)}$\n- *p-value* \\< $\\alpha$.\n\nKita dapat melakukan uji chi-squared terhadap tabel kontingensi yang telah dibuat.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(tabel)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tPearson's Chi-squared test with Yates' continuity correction\n\ndata: tabel\nX-squared = 4.6626, df = 1, p-value = 0.03083\n```\n\n\n:::\n:::\n\n\n\nUntuk $\\chi^2_{\\alpha, (r-1)(c-1)}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=(2-1)*(2-1))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3.841459\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 4.6626 > 3.841459 = \\chi^2_{\\alpha, k-1}$, dan p-value = 0.03083 \\< 0.05= $\\alpha$, maka hasil uji berada di dalam daerah kritis. Dengan kata lain, terdapat bukti yang cukup untuk menolak $H_0$ di mana treatment dan improvement tidak saling mempengaruhi.\n\nAkan tetapi, kita tidak bisa menyimpulkan bagaimana kedua variabel tersebut saling mempengaruhi. Jadi, kita hanya bisa mengindikasi adanya asosiasi antarvariabel tanpa mengetahui apa/bagaimana asosiasinya (perlu dilakukan uji lain untuk menjelaskan lebih lanjut)\n\n### Kasus Khusus\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndata(\"mtcars\")\nView(mtcars)\n```\n:::\n\n\n\nPerhatikan bahwa ruang nilai variabel carb dan cyl adalah bilangan asli, sehingga kita bisa menganggap bahwa kedua variabel tersebut adalah variabel kategorik.\n\nMisal kita ingin menguji apakah ada hubungan antara variabel kategorik carb dengan variabel cyl. Kita bisa mulai dengan membuat tabel kontingensi.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntabel2 <- table(mtcars$carb, mtcars$cyl)\ntabel2\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n \n 4 6 8\n 1 5 2 0\n 2 6 0 4\n 3 0 0 3\n 4 0 4 6\n 6 0 1 0\n 8 0 0 1\n```\n\n\n:::\n:::\n\n\n\nDan dengan metode yang sama, kita lakukan uji chi-squared terhadap tabel tersebut\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(tabel2)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in chisq.test(tabel2): Chi-squared approximation may be incorrect\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tPearson's Chi-squared test\n\ndata: tabel2\nX-squared = 24.389, df = 10, p-value = 0.006632\n```\n\n\n:::\n:::\n\n\n\nPerhatikan muncul pesan \"Warning: Chi-squared approximation may be incorrect\". Hal ini terjadi karena terdapat beberapa observasi yang bernilai nol, yang mengakibatkan nilai ekspektasi untuk observasi tersebut bernilai kecil (kurang dari 1).\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(tabel2)$expected\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in chisq.test(tabel2): Chi-squared approximation may be incorrect\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n \n 4 6 8\n 1 2.40625 1.53125 3.0625\n 2 3.43750 2.18750 4.3750\n 3 1.03125 0.65625 1.3125\n 4 3.43750 2.18750 4.3750\n 6 0.34375 0.21875 0.4375\n 8 0.34375 0.21875 0.4375\n```\n\n\n:::\n:::\n\n\n\nSalah satu cara untuk melakukan uji independensi untuk kasus tersebut adalah dengan Fisher Exact Test.\n\nhipotesis yang akan diuji adalah:\n\n- $H_0$: carb dan cyl tidak saling mempengaruhi (independen)\n- $H_1$: carb dan cyl saling mempengaruhi (tidak independen)\n\nDengan tingkat signfikasi $\\alpha=0.05$, daerah kritis diberikan oleh *p-value* \\< $\\alpha$.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nfisher.test(tabel2)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tFisher's Exact Test for Count Data\n\ndata: tabel2\np-value = 0.0003345\nalternative hypothesis: two.sided\n```\n\n\n:::\n:::\n\n\n\nKarena *p-value* = 0.0003345 \\< $\\alpha$, maka hasil uji berada di dalam daerah kritis. Dengan kata lain, terdapat bukti yang cukup untuk menolak $H_0$ di mana carb dan cyl tidak saling mempengaruhi.\n\n# Uji Hipotesis di Excel\n\nSilakan unduh worksheet berikut untuk melakukan uji hipotesis yang telah kita bahas di Microsoft Excel .\n\n[Worksheet Pertemuan 9](./worksheet_pertemuan9.xlsx)\n", + "markdown": "---\ntitle: \"(Pertemuan 09) ANOVA dan Uji Chi-Squared\"\nsubtitle: \"ANOVA and Chi-Squared Test\"\ndescription: \"Offline di Departemen Matematika\"\ndate: 11/25/2024\npage-navigation: true\nformat: html\n---\n\n\n\n# ANOVA\n\nAnalysis of Variance (ANOVA) digunakan untuk melakukan uji hipotesis terhadap lebih dari dua populasi. Beberapa asumsi dalam anova adalah:\n\n- Sampel acak saling bebas/independen\n- Populasi berdistribusi normal\n- Populasi memiliki variansi seragam\n\n## Ukuran Sampel Seragam\n\nMisalkan populasi 1 berdistribusi $N(\\mu=1,\\sigma^2=1)$, populasi 2 berdistribusi $N(\\mu = 0.9, \\sigma^2 = 1)$, dan populasi 3 berdistrbusi $N(\\mu = 1.1, \\sigma^2 = 1)$.\n\nDilakukan pengambilan sampel acak dari ketiga populasi tersebut berukuran 10.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nn1 <- 10\nn2 <- 10\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n```\n:::\n\n\n\nSelanjutnya, akan dibuat dataframe dari sampel acak tersebut. Kolom pop.source menyatakan asal populasi (1,2,3) dan kolom pops.value menyatakan nilai sampel acak.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n```\n:::\n\n\n\nSebagai analisis pendahuluan, mari kita perhatikan mean, standar deviasi, dan boxplot dari sampel acak masing-masing populasi.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\naggregate(pops.value~pop.source, data=data, \n function(x) c(mean = mean(x),sd = sd(x)))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n pop.source pops.value.mean pops.value.sd\n1 pops.1 0.7641406 0.9870588\n2 pops.2 0.9432723 1.2528974\n3 pops.3 0.8596178 0.6817645\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nboxplot(pops.value~pop.source, data=data)\n```\n\n::: {.cell-output-display}\n![](modul9_files/figure-html/unnamed-chunk-4-1.png){width=672}\n:::\n:::\n\n\n\nBerdasarkan intuisi pengamatan terhadap sampel acak, kita dapat menebak bahwa mean ketiga populasi tersebut tidaklah berbeda signifikan secara statistik.\n\nUntuk memverifikasi, kita akan melakukan uji ANOVA satu arah. Dengan tingkat signifikansi $\\alpha=0.05$, hipotesis dari uji ini adalah:\n\n- $H_0: \\mu_1 = \\mu_2 = \\mu_3$\n- $H_1:$ setidaknya salah satu dari $\\mu_1,\\mu_2,\\mu_3$ berbeda nilainya\n\nUntuk menjalankan uji ANOVA satu arah, digunakan fungsi oneway.test()\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tOne-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.080101, num df = 2, denom df = 27, p-value = 0.9232\n```\n\n\n:::\n:::\n\n\n\nFungsi lain yang dapat digunakan adalah aov()\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 0.161 0.0803 0.08 0.923\nResiduals 27 27.080 1.0029 \n```\n\n\n:::\n:::\n\n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n- $F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}$\n- *p-value* \\< $\\alpha$.\n\nDengan $k$ adalah banyak populasi dan $n$ adalah ukuran sampel acak dalam satu populasi.\n\nKita bisa mendapatkan nilai F tabel.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nalpha = 0.05\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = 3*(10-1))\n\nF_tabel\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3.354131\n```\n\n\n:::\n:::\n\n\n\nDidapatkan $$F_\\text{hitung} = 0.18194 < 3.354131 = F_\\text{tabel}$$ dan *p-value* = 0.8347 \\> 0.05 = $\\alpha$. Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana tidak ada perbedaan yang signifikan secara statistik antara nilai $\\mu_1, \\mu_2, \\mu_3$\n\n## Ukuran Sampel Tidak Seragam\n\nUntuk kasus pengambilan sampel acak dari ketiga populasi dengan ukuran tidak seragam, kita hanya perlu mengubah nilai $n_1, n_2, n_3$.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nn1 <- 9\nn2 <- 15\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n```\n:::\n\n\n\nKita akan melakukan uji ANOVA satu arah dengan fungsi yang sama seperti sebelumnya.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tOne-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.4461, num df = 2, denom df = 31, p-value = 0.6442\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 0.511 0.2556 0.446 0.644\nResiduals 31 17.764 0.5730 \n```\n\n\n:::\n:::\n\n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n- $F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}$\n- *p-value* \\< $\\alpha$.\n\ndengan $$N = \\sum_1^kn_i$$\n\nMaka kita dapat F tabel.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = n1+n2+n3 - 3)\n\nF_tabel\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3.304817\n```\n\n\n:::\n:::\n\n\n\nDidapatkan $$F_\\text{hitung} = 1.3941 < 3.304817 = F_\\text{tabel}$$ dan *p-value* = 0.2632 \\> 0.05 = $\\alpha$. Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana tidak ada perbedaan yang signifikan secara statistik antara nilai $\\mu_1, \\mu_2, \\mu_3$\n\n# Uji Chi Squared\n\nUji Chi Squared (Khi Kuadrat) dibagi menjadi dua jenis, yaitu uji kecocokan model (goodness of fit) dan uji independensi.\n\n## Uji Goodness of Fit\n\nUji ini digunakan untuk mengetahui apakah suatu data memiliki distribusi probabilitas tertentu yang sudah kita duga sebelumnya.\n\n### Menggunakan built-in function\n\nMisalkan kita mempunyai data sampel acak berukuran 6 (lihat variabel \"obs\" dibawah).\n\nSampel acak tersebut berasal dari suatu populasi dengan ruang nilai diskrit. Dapatkah kita menyimpulkan bahwa populasi tersebut berdistribusi uniform?\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nobs <- c(20,22,17,18,19,24)\nprob = c(replicate(length(obs),1))/length(obs)\n```\n:::\n\n\n\nUntuk menguji hipotesis tersebut, kita bisa menggunakan uji chi-squared. Hipotesis yang digunakan adalah:\n\n- $H_0:$ populasi berdistribusi uniform\n- $H_1:$ populasi tidak berdistribusi uniform\n\nDengan tingkat signfikasi $\\alpha=0.05$, daerah kritis diberikan oleh - $\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, k-1}$ - *p-value* \\< $\\alpha$.\n\nUji chi-squared dapat dilakukan dengan fungsi chisq.test()\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(obs, p = prob)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tChi-squared test for given probabilities\n\ndata: obs\nX-squared = 1.7, df = 5, p-value = 0.8889\n```\n\n\n:::\n:::\n\n\n\ndan $\\chi^2_{\\alpha, k-1}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=15-1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 23.68479\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 1.7 < 23.68479 = \\chi^2_{\\alpha, k-1}$ dan p-value = 0.8889 \\> $0.05 = \\alpha$, maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana populasi berdistribusi uniform.\n\n### Menggunakan statistik uji\n\nMisal kita ingin menguji apakah sebuah dadu seimbang dengan pengambilan sampel acak berukuran 120 pelemparan.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nn_dadu <- 120\ndadu <- ceiling(runif(n=n_dadu, min = 0, max=6))\ndadu\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n [1] 2 6 5 4 6 6 1 2 3 4 3 5 5 6 6 5 1 5 3 5 5 5 5 6 5 2 4 5 1 5 2 3 6 3 3 5 6\n [38] 3 6 6 2 4 1 4 6 3 2 3 1 6 2 6 5 4 3 4 2 5 6 6 5 4 3 1 5 3 6 1 6 4 2 4 1 4\n [75] 4 6 1 4 2 5 2 5 6 1 2 4 4 6 3 1 4 3 4 6 5 6 6 2 2 6 2 1 2 4 2 6 4 6 3 2 3\n[112] 1 6 4 1 4 3 1 4 3\n```\n\n\n:::\n:::\n\n\n\nDengan cara yang sama, kita dapat melakukan uji chi-squared\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nprob = c(replicate(length(dadu),1))/length(dadu)\n\nchisq.test(dadu, p = prob)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in chisq.test(dadu, p = prob): Chi-squared approximation may be\nincorrect\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tChi-squared test for given probabilities\n\ndata: dadu\nX-squared = 91.725, df = 119, p-value = 0.97\n```\n\n\n:::\n:::\n\n\n\nTerdapat pesan \"Warning: Chi-squared approximation may be incorrect\". Hal ini terjadi karena terdapat beberapa pengulangan nilai pada ruang sampel, di mana masing-masing nilai tersebut dianggap sebagai observasi independen yang memiliki probabilitas $\\frac{1}{120}$. Sedangkan, kita ingin menguji apakah peluang masing-masing mata dadu muncul bernilai $\\frac{1}{6}$.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nx <- table(dadu)\nx\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\ndadu\n 1 2 3 4 5 6 \n15 18 18 22 20 27 \n```\n\n\n:::\n:::\n\n\n\nMaka, kita dapat melakukan uji chi-squared tanpa menggunakan fungsi chisq.test()\n\nKarena kita ingin menguji apakah dadu seimbang, kita akan membandingkan nilai \"observasi\" kemunculan mata dadu dengan nilai \"ekspektasi\" kemunculan mata dadu jika dadu seimbang.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nval.dadu <- names(x)\nobs.dadu <- as.vector(x)\nex.dadu <- c(replicate(6, n_dadu/6))\n\nrbind(val.dadu, obs.dadu, ex.dadu)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n [,1] [,2] [,3] [,4] [,5] [,6]\nval.dadu \"1\" \"2\" \"3\" \"4\" \"5\" \"6\" \nobs.dadu \"15\" \"18\" \"18\" \"22\" \"20\" \"27\"\nex.dadu \"20\" \"20\" \"20\" \"20\" \"20\" \"20\"\n```\n\n\n:::\n:::\n\n\n\nIngat hipotesis yang digunakan adalah\n\n- $H_0:$ dadu seimbang, hasil pelemparan dadu berdistribusi uniform\n- $H_1:$ hasil pelemparan dadu tidak berdistribusi uniform\n\nStatistik uji yang digunakan adalah $$\\chi^2 = \\sum_i^k \\frac{(o_i-e_i)^2}{e_i}$$\n\nDidapat $\\chi^2_\\text{hitung}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchi.hitung <- sum((obs.dadu-ex.dadu)**2/ex.dadu)\nchi.hitung\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 4.3\n```\n\n\n:::\n:::\n\n\n\ndan $\\chi^2_{\\alpha, k-1}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=6-1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 11.0705\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 2.8 < 11.0705 = \\chi^2_{\\alpha, k-1}$, maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana dadu seimbang.\n\n### Membandingkan dengan distribusi non-uniform\n\nMisalkan kita memiliki populasi dengan ruang nilai kontinu \\[1.45, 4.95\\], dan dilakukan pengambilan sampel acak berukuran 40 yang dibagi ke dalam 7 kelas\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlower_bound <- c()\nfor (i in 1:7) {lower_bound[i] <- 1.45+(i-1)*0.5}\n\nupper_bound <- c()\nfor (i in 1:7) {upper_bound[i] <- 1.95+(i-1)*0.5}\n\nobs_class <- c(2,1,4,15,10,5,3)\n\ndata.frame(lower_bound, upper_bound, obs_class)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n lower_bound upper_bound obs_class\n1 1.45 1.95 2\n2 1.95 2.45 1\n3 2.45 2.95 4\n4 2.95 3.45 15\n5 3.45 3.95 10\n6 3.95 4.45 5\n7 4.45 4.95 3\n```\n\n\n:::\n:::\n\n\n\nDapatkah kita menyimpulkan bahwa populasi asal sampel acak tersebut berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n\nKita dapat mulai dengan membuat kolom nilai ekspektasi masing-masing kelas jika populasi berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nmu = 3.5\ns = 0.7\n\n\nprob_class <- c()\nfor (i in 1:7) {prob_class[i] <- \n pnorm(q=upper_bound[i], mean=mu, sd=s) - \n pnorm(q=lower_bound[i], mean=mu, sd=s)}\nprob_class\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 0.01170195 0.05340264 0.14921024 0.25551089 0.26831326 0.17279049 0.06820853\n```\n\n\n:::\n\n```{.r .cell-code}\nex_class <- prob_class*sum(obs_class)\nex_class\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 0.4680779 2.1361054 5.9684098 10.2204356 10.7325306 6.9116195 2.7283412\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nclass <- data.frame(lower_bound, upper_bound, obs_class,ex_class)\n\nclass\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n lower_bound upper_bound obs_class ex_class\n1 1.45 1.95 2 0.4680779\n2 1.95 2.45 1 2.1361054\n3 2.45 2.95 4 5.9684098\n4 2.95 3.45 15 10.2204356\n5 3.45 3.95 10 10.7325306\n6 3.95 4.45 5 6.9116195\n7 4.45 4.95 3 2.7283412\n```\n\n\n:::\n:::\n\n\n\nPerhatikan bahwa terdapat beberapa baris dengan nilai ekspektasi yang cukup kecil (\\<5). Maka, untuk melakukan uji chi-squared yang lebih akurat, akan dilakukan penggabungan kelas-kelas berhimpit tersebut.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ni <- 1\nwhile (i < nrow(class)){\n while (class[[4]][[i]]<5){\n class[[4]][[i]] <- class[[4]][[i]] + class[[4]][[i+1]]\n class[[3]][[i]] <- class[[3]][[i]] + class[[3]][[i+1]]\n class[[2]][[i]] <- class[[2]][[i+1]]\n class[[1]][[i]] <- class[[1]][[i+1]]\n class <- class[-c(i+1), ]\n }\n i <- i+1\n}\n```\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\nif (class[[4]][[nrow(class)]]<5){\n class[[4]][[nrow(class)-1]] <- class[[4]][[nrow(class)]] + class[[4]][[nrow(class)-1]]\n class[[3]][[nrow(class)-1]] <- class[[3]][[nrow(class)]] + class[[3]][[nrow(class)-1]]\n class[[2]][[nrow(class)-1]] <- class[[2]][[nrow(class)-1]]\n class[[1]][[nrow(class)-1]] <- class[[1]][[nrow(class)-1]]\n class <- class[-c(nrow(class)), ]\n}\n\nclass\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n lower_bound upper_bound obs_class ex_class\n1 2.45 2.95 7 8.572593\n4 2.95 3.45 15 10.220436\n5 3.45 3.95 10 10.732531\n6 3.95 4.45 8 9.639961\n```\n\n\n:::\n:::\n\n\n\nTelah didapat data nilai observasi dan nilai ekspektasi yang diperbaiki.\n\nSebagai intuisi awal, kita bisa memperhatikan barplot dari nilai observasi sampel acak dibandingkan dengan nilai ekspektasinya.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npar(mfrow = c(1,2))\nbarplot(class$obs_class)\nbarplot(class$ex_class)\n```\n\n::: {.cell-output-display}\n![](modul9_files/figure-html/unnamed-chunk-26-1.png){width=672}\n:::\n:::\n\n\n\nSelanjutnya, kita bisa melakukan uji chi-squared terhadap masing-masing kelas observasi dengan metode yang sama. Hipotesis uji adalah\n\n- $H_0:$ populasi berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n- $H_1:$ populasi tidak berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchi_hitung <- sum((class$obs_class-class$ex_class)**2/class$ex_class)\nchi_hitung\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 2.852626\n```\n\n\n:::\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=7-1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 12.59159\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 2.852626 < 12.59159 = \\chi^2_{\\alpha, k-1}$, maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak $H_0$ di mana populasi berdistribusi $N(\\mu=3.5, \\sigma^2 = 0.7^2)$.\n\n## Uji Independensi\n\nUji Independensi dilakukan untuk mengetahui apakah antarvariabel kategorik saling bebas (independen) atau tidak saling bebas (dependen).\n\nPertama-tama kita akan mengimport dataset \"treatment\" dari situs github.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndf <- read.csv(\"https://raw.githubusercontent.com/selva86/datasets/master/treatment.csv\")\nView(df)\n```\n:::\n\n\n\nMisal kita ingin menguji apakah ada hubungan antara variabel kategorik treatment dengan variabel kategorik improvement.\n\nKita dapat membuat tabel kontingensi berukuran 2x2 dari variabel kategorik tersebut.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntabel <- table(df$treatment, df$improvement)\ntabel\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n \n improved not-improved\n not-treated 26 29\n treated 35 15\n```\n\n\n:::\n:::\n\n\n\nIngat hipotesis yang akan diuji adalah:\n\n- $H_0$: treatment dan improvement tidak saling mempengaruhi (independen)\n- $H_1$: treatment dan improvement saling mempengaruhi (tidak independen)\n\nDengan tingkat signfikasi $\\alpha=0.05$, daerah kritis diberikan oleh\n\n- $\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, (r-1)(c-1)}$\n- *p-value* \\< $\\alpha$.\n\nKita dapat melakukan uji chi-squared terhadap tabel kontingensi yang telah dibuat.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(tabel)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tPearson's Chi-squared test with Yates' continuity correction\n\ndata: tabel\nX-squared = 4.6626, df = 1, p-value = 0.03083\n```\n\n\n:::\n:::\n\n\n\nUntuk $\\chi^2_{\\alpha, (r-1)(c-1)}$\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nqchisq(p=1-alpha, df=(2-1)*(2-1))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3.841459\n```\n\n\n:::\n:::\n\n\n\nKarena $\\chi^2_\\text{hitung} = 4.6626 > 3.841459 = \\chi^2_{\\alpha, k-1}$, dan p-value = 0.03083 \\< 0.05= $\\alpha$, maka hasil uji berada di dalam daerah kritis. Dengan kata lain, terdapat bukti yang cukup untuk menolak $H_0$ di mana treatment dan improvement tidak saling mempengaruhi.\n\nAkan tetapi, kita tidak bisa menyimpulkan bagaimana kedua variabel tersebut saling mempengaruhi. Jadi, kita hanya bisa mengindikasi adanya asosiasi antarvariabel tanpa mengetahui apa/bagaimana asosiasinya (perlu dilakukan uji lain untuk menjelaskan lebih lanjut)\n\n### Kasus Khusus\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndata(\"mtcars\")\nView(mtcars)\n```\n:::\n\n\n\nPerhatikan bahwa ruang nilai variabel carb dan cyl adalah bilangan asli, sehingga kita bisa menganggap bahwa kedua variabel tersebut adalah variabel kategorik.\n\nMisal kita ingin menguji apakah ada hubungan antara variabel kategorik carb dengan variabel cyl. Kita bisa mulai dengan membuat tabel kontingensi.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntabel2 <- table(mtcars$carb, mtcars$cyl)\ntabel2\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n \n 4 6 8\n 1 5 2 0\n 2 6 0 4\n 3 0 0 3\n 4 0 4 6\n 6 0 1 0\n 8 0 0 1\n```\n\n\n:::\n:::\n\n\n\nDan dengan metode yang sama, kita lakukan uji chi-squared terhadap tabel tersebut\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(tabel2)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in chisq.test(tabel2): Chi-squared approximation may be incorrect\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tPearson's Chi-squared test\n\ndata: tabel2\nX-squared = 24.389, df = 10, p-value = 0.006632\n```\n\n\n:::\n:::\n\n\n\nPerhatikan muncul pesan \"Warning: Chi-squared approximation may be incorrect\". Hal ini terjadi karena terdapat beberapa observasi yang bernilai nol, yang mengakibatkan nilai ekspektasi untuk observasi tersebut bernilai kecil (kurang dari 1).\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nchisq.test(tabel2)$expected\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nWarning in chisq.test(tabel2): Chi-squared approximation may be incorrect\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n \n 4 6 8\n 1 2.40625 1.53125 3.0625\n 2 3.43750 2.18750 4.3750\n 3 1.03125 0.65625 1.3125\n 4 3.43750 2.18750 4.3750\n 6 0.34375 0.21875 0.4375\n 8 0.34375 0.21875 0.4375\n```\n\n\n:::\n:::\n\n\n\nSalah satu cara untuk melakukan uji independensi untuk kasus tersebut adalah dengan Fisher Exact Test.\n\nhipotesis yang akan diuji adalah:\n\n- $H_0$: carb dan cyl tidak saling mempengaruhi (independen)\n- $H_1$: carb dan cyl saling mempengaruhi (tidak independen)\n\nDengan tingkat signfikasi $\\alpha=0.05$, daerah kritis diberikan oleh *p-value* \\< $\\alpha$.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nfisher.test(tabel2)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n\n\tFisher's Exact Test for Count Data\n\ndata: tabel2\np-value = 0.0003345\nalternative hypothesis: two.sided\n```\n\n\n:::\n:::\n\n\n\nKarena *p-value* = 0.0003345 \\< $\\alpha$, maka hasil uji berada di dalam daerah kritis. Dengan kata lain, terdapat bukti yang cukup untuk menolak $H_0$ di mana carb dan cyl tidak saling mempengaruhi.\n\n# Uji Hipotesis di Excel\n\nSilakan unduh worksheet berikut untuk melakukan uji hipotesis yang telah kita bahas di Microsoft Excel .\n\n[Worksheet Pertemuan 9](./worksheet_pertemuan9.xlsx)\n", "supporting": [ "modul9_files" ], diff --git a/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/figure-html/unnamed-chunk-4-1.png b/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/figure-html/unnamed-chunk-4-1.png index 9921c7de..d781317b 100644 Binary files a/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/figure-html/unnamed-chunk-4-1.png and b/_freeze/semuahalaman/modulprak/2024/ganjil/psd/modul9/figure-html/unnamed-chunk-4-1.png differ diff --git a/docs/search.json b/docs/search.json index 4aab4844..d5938c35 100644 --- a/docs/search.json +++ b/docs/search.json @@ -5604,7 +5604,7 @@ "href": "semuahalaman/modulprak/2024/ganjil/psd/psd2024.html", "title": "Pengantar Sains Data", "section": "", - "text": "Kembali ke Praktikum\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 01) Panduan Instalasi R dan Excel + Pengenalan R\n\n\n\nSep 19, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 02) Excel: Table Creation, Pivot Table, Visualizations\n\n\n\nSep 23, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 03) R: Operasi Dasar, Statistik Deskriptif, Visualisasi Frekuensi\n\n\n\nSep 30, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 04) R: Visualisasi Dua Variabel, Time Series, dan ggplot2\n\n\n\nOct 7, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 05) R: Distribusi Probabilitas Diskrit\n\n\n\nOct 21, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 06) Distribusi Kontinu di R, Distribusi di Excel\n\n\n\nOct 28, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 07) Distribusi Sampling di R\n\n\n\nNov 4, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 09) ANOVA dan Chi-Squared\n\n\n\nNov 25, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 8) Pengujian Hipotesis Menggunakan R\n\n\n\nNov 18, 2024\n\n\n\n\n\n\n\n\nNo matching items" + "text": "Kembali ke Praktikum\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 01) Panduan Instalasi R dan Excel + Pengenalan R\n\n\n\nSep 19, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 02) Excel: Table Creation, Pivot Table, Visualizations\n\n\n\nSep 23, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 03) R: Operasi Dasar, Statistik Deskriptif, Visualisasi Frekuensi\n\n\n\nSep 30, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 04) R: Visualisasi Dua Variabel, Time Series, dan ggplot2\n\n\n\nOct 7, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 05) R: Distribusi Probabilitas Diskrit\n\n\n\nOct 21, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 06) Distribusi Kontinu di R, Distribusi di Excel\n\n\n\nOct 28, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 07) Distribusi Sampling di R\n\n\n\nNov 4, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 09) ANOVA dan Uji Chi-Squared\n\n\n\nNov 25, 2024\n\n\n\n\n\n\n\n\n\n\n\n\n(Pertemuan 8) Pengujian Hipotesis Menggunakan R\n\n\n\nNov 18, 2024\n\n\n\n\n\n\n\n\nNo matching items" }, { "objectID": "semuahalaman/modulprak/2024/ganjil/strukdat/modul2.html", @@ -6673,35 +6673,35 @@ { "objectID": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html", "href": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html", - "title": "(Pertemuan 09) ANOVA dan Chi-Squared", + "title": "(Pertemuan 09) ANOVA dan Uji Chi-Squared", "section": "", - "text": "Analysis of Variance (ANOVA) digunakan untuk melakukan uji hipotesis terhadap lebih dari dua populasi. Beberapa asumsi dalam anova adalah:\n\nSampel acak saling bebas/independen\nPopulasi berdistribusi normal\nPopulasi memiliki variansi seragam\n\n\n\nMisalkan populasi 1 berdistribusi \\(N(\\mu=1,\\sigma^2=1)\\), populasi 2 berdistribusi \\(N(\\mu = 0.9, \\sigma^2 = 1)\\), dan populasi 3 berdistrbusi \\(N(\\mu = 1.1, \\sigma^2 = 1)\\).\nDilakukan pengambilan sampel acak dari ketiga populasi tersebut berukuran 10.\n\nn1 <- 10\nn2 <- 10\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\nSelanjutnya, akan dibuat dataframe dari sampel acak tersebut. Kolom pop.source menyatakan asal populasi (1,2,3) dan kolom pops.value menyatakan nilai sampel acak.\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nSebagai analisis pendahuluan, mari kita perhatikan mean, standar deviasi, dan boxplot dari sampel acak masing-masing populasi.\n\naggregate(pops.value~pop.source, data=data, \n function(x) c(mean = mean(x),sd = sd(x)))\n\n pop.source pops.value.mean pops.value.sd\n1 pops.1 1.0025509 1.1154917\n2 pops.2 1.3577494 0.9804963\n3 pops.3 0.8434632 0.8088781\n\n\n\nboxplot(pops.value~pop.source, data=data)\n\n\n\n\n\n\n\n\nBerdasarkan intuisi pengamatan terhadap sampel acak, kita dapat menebak bahwa mean ketiga populasi tersebut tidaklah berbeda signifikan secara statistik.\nUntuk memverifikasi, kita akan melakukan uji ANOVA satu arah. Dengan tingkat signifikansi \\(\\alpha=0.05\\), hipotesis dari uji ini adalah:\n\n\\(H_0: \\mu_1 = \\mu_2 = \\mu_3\\)\n\\(H_1:\\) setidaknya salah satu dari \\(\\mu_1,\\mu_2,\\mu_3\\) berbeda nilainya\n\nUntuk menjalankan uji ANOVA satu arah, digunakan fungsi oneway.test()\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.72722, num df = 2, denom df = 27, p-value = 0.4925\n\n\nFungsi lain yang dapat digunakan adalah aov()\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 1.387 0.6933 0.727 0.492\nResiduals 27 25.740 0.9533 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\nDengan \\(k\\) adalah banyak populasi dan \\(n\\) adalah ukuran sampel acak dalam satu populasi.\nKita bisa mendapatkan nilai F tabel.\n\nalpha = 0.05\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = 3*(10-1))\n\nF_tabel\n\n[1] 3.354131\n\n\nDidapatkan \\[F_\\text{hitung} = 0.18194 < 3.354131 = F_\\text{tabel}\\] dan p-value = 0.8347 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)\n\n\n\nUntuk kasus pengambilan sampel acak dari ketiga populasi dengan ukuran tidak seragam, kita hanya perlu mengubah nilai \\(n_1, n_2, n_3\\).\n\nn1 <- 9\nn2 <- 15\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nKita akan melakukan uji ANOVA satu arah dengan fungsi yang sama seperti sebelumnya.\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.98669, num df = 2, denom df = 31, p-value = 0.3842\n\n\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 2.17 1.085 0.987 0.384\nResiduals 31 34.09 1.100 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\ndengan \\[N = \\sum_1^kn_i\\]\nMaka kita dapat F tabel.\n\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = n1+n2+n3 - 3)\n\nF_tabel\n\n[1] 3.304817\n\n\nDidapatkan \\[F_\\text{hitung} = 1.3941 < 3.304817 = F_\\text{tabel}\\] dan p-value = 0.2632 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)" + "text": "Analysis of Variance (ANOVA) digunakan untuk melakukan uji hipotesis terhadap lebih dari dua populasi. Beberapa asumsi dalam anova adalah:\n\nSampel acak saling bebas/independen\nPopulasi berdistribusi normal\nPopulasi memiliki variansi seragam\n\n\n\nMisalkan populasi 1 berdistribusi \\(N(\\mu=1,\\sigma^2=1)\\), populasi 2 berdistribusi \\(N(\\mu = 0.9, \\sigma^2 = 1)\\), dan populasi 3 berdistrbusi \\(N(\\mu = 1.1, \\sigma^2 = 1)\\).\nDilakukan pengambilan sampel acak dari ketiga populasi tersebut berukuran 10.\n\nn1 <- 10\nn2 <- 10\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\nSelanjutnya, akan dibuat dataframe dari sampel acak tersebut. Kolom pop.source menyatakan asal populasi (1,2,3) dan kolom pops.value menyatakan nilai sampel acak.\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nSebagai analisis pendahuluan, mari kita perhatikan mean, standar deviasi, dan boxplot dari sampel acak masing-masing populasi.\n\naggregate(pops.value~pop.source, data=data, \n function(x) c(mean = mean(x),sd = sd(x)))\n\n pop.source pops.value.mean pops.value.sd\n1 pops.1 0.7641406 0.9870588\n2 pops.2 0.9432723 1.2528974\n3 pops.3 0.8596178 0.6817645\n\n\n\nboxplot(pops.value~pop.source, data=data)\n\n\n\n\n\n\n\n\nBerdasarkan intuisi pengamatan terhadap sampel acak, kita dapat menebak bahwa mean ketiga populasi tersebut tidaklah berbeda signifikan secara statistik.\nUntuk memverifikasi, kita akan melakukan uji ANOVA satu arah. Dengan tingkat signifikansi \\(\\alpha=0.05\\), hipotesis dari uji ini adalah:\n\n\\(H_0: \\mu_1 = \\mu_2 = \\mu_3\\)\n\\(H_1:\\) setidaknya salah satu dari \\(\\mu_1,\\mu_2,\\mu_3\\) berbeda nilainya\n\nUntuk menjalankan uji ANOVA satu arah, digunakan fungsi oneway.test()\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.080101, num df = 2, denom df = 27, p-value = 0.9232\n\n\nFungsi lain yang dapat digunakan adalah aov()\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 0.161 0.0803 0.08 0.923\nResiduals 27 27.080 1.0029 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\nDengan \\(k\\) adalah banyak populasi dan \\(n\\) adalah ukuran sampel acak dalam satu populasi.\nKita bisa mendapatkan nilai F tabel.\n\nalpha = 0.05\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = 3*(10-1))\n\nF_tabel\n\n[1] 3.354131\n\n\nDidapatkan \\[F_\\text{hitung} = 0.18194 < 3.354131 = F_\\text{tabel}\\] dan p-value = 0.8347 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)\n\n\n\nUntuk kasus pengambilan sampel acak dari ketiga populasi dengan ukuran tidak seragam, kita hanya perlu mengubah nilai \\(n_1, n_2, n_3\\).\n\nn1 <- 9\nn2 <- 15\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nKita akan melakukan uji ANOVA satu arah dengan fungsi yang sama seperti sebelumnya.\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.4461, num df = 2, denom df = 31, p-value = 0.6442\n\n\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 0.511 0.2556 0.446 0.644\nResiduals 31 17.764 0.5730 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\ndengan \\[N = \\sum_1^kn_i\\]\nMaka kita dapat F tabel.\n\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = n1+n2+n3 - 3)\n\nF_tabel\n\n[1] 3.304817\n\n\nDidapatkan \\[F_\\text{hitung} = 1.3941 < 3.304817 = F_\\text{tabel}\\] dan p-value = 0.2632 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)" }, { "objectID": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#ukuran-sampel-seragam", "href": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#ukuran-sampel-seragam", - "title": "(Pertemuan 09) ANOVA dan Chi-Squared", + "title": "(Pertemuan 09) ANOVA dan Uji Chi-Squared", "section": "", - "text": "Misalkan populasi 1 berdistribusi \\(N(\\mu=1,\\sigma^2=1)\\), populasi 2 berdistribusi \\(N(\\mu = 0.9, \\sigma^2 = 1)\\), dan populasi 3 berdistrbusi \\(N(\\mu = 1.1, \\sigma^2 = 1)\\).\nDilakukan pengambilan sampel acak dari ketiga populasi tersebut berukuran 10.\n\nn1 <- 10\nn2 <- 10\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\nSelanjutnya, akan dibuat dataframe dari sampel acak tersebut. Kolom pop.source menyatakan asal populasi (1,2,3) dan kolom pops.value menyatakan nilai sampel acak.\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nSebagai analisis pendahuluan, mari kita perhatikan mean, standar deviasi, dan boxplot dari sampel acak masing-masing populasi.\n\naggregate(pops.value~pop.source, data=data, \n function(x) c(mean = mean(x),sd = sd(x)))\n\n pop.source pops.value.mean pops.value.sd\n1 pops.1 1.0025509 1.1154917\n2 pops.2 1.3577494 0.9804963\n3 pops.3 0.8434632 0.8088781\n\n\n\nboxplot(pops.value~pop.source, data=data)\n\n\n\n\n\n\n\n\nBerdasarkan intuisi pengamatan terhadap sampel acak, kita dapat menebak bahwa mean ketiga populasi tersebut tidaklah berbeda signifikan secara statistik.\nUntuk memverifikasi, kita akan melakukan uji ANOVA satu arah. Dengan tingkat signifikansi \\(\\alpha=0.05\\), hipotesis dari uji ini adalah:\n\n\\(H_0: \\mu_1 = \\mu_2 = \\mu_3\\)\n\\(H_1:\\) setidaknya salah satu dari \\(\\mu_1,\\mu_2,\\mu_3\\) berbeda nilainya\n\nUntuk menjalankan uji ANOVA satu arah, digunakan fungsi oneway.test()\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.72722, num df = 2, denom df = 27, p-value = 0.4925\n\n\nFungsi lain yang dapat digunakan adalah aov()\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 1.387 0.6933 0.727 0.492\nResiduals 27 25.740 0.9533 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\nDengan \\(k\\) adalah banyak populasi dan \\(n\\) adalah ukuran sampel acak dalam satu populasi.\nKita bisa mendapatkan nilai F tabel.\n\nalpha = 0.05\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = 3*(10-1))\n\nF_tabel\n\n[1] 3.354131\n\n\nDidapatkan \\[F_\\text{hitung} = 0.18194 < 3.354131 = F_\\text{tabel}\\] dan p-value = 0.8347 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)" + "text": "Misalkan populasi 1 berdistribusi \\(N(\\mu=1,\\sigma^2=1)\\), populasi 2 berdistribusi \\(N(\\mu = 0.9, \\sigma^2 = 1)\\), dan populasi 3 berdistrbusi \\(N(\\mu = 1.1, \\sigma^2 = 1)\\).\nDilakukan pengambilan sampel acak dari ketiga populasi tersebut berukuran 10.\n\nn1 <- 10\nn2 <- 10\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\nSelanjutnya, akan dibuat dataframe dari sampel acak tersebut. Kolom pop.source menyatakan asal populasi (1,2,3) dan kolom pops.value menyatakan nilai sampel acak.\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nSebagai analisis pendahuluan, mari kita perhatikan mean, standar deviasi, dan boxplot dari sampel acak masing-masing populasi.\n\naggregate(pops.value~pop.source, data=data, \n function(x) c(mean = mean(x),sd = sd(x)))\n\n pop.source pops.value.mean pops.value.sd\n1 pops.1 0.7641406 0.9870588\n2 pops.2 0.9432723 1.2528974\n3 pops.3 0.8596178 0.6817645\n\n\n\nboxplot(pops.value~pop.source, data=data)\n\n\n\n\n\n\n\n\nBerdasarkan intuisi pengamatan terhadap sampel acak, kita dapat menebak bahwa mean ketiga populasi tersebut tidaklah berbeda signifikan secara statistik.\nUntuk memverifikasi, kita akan melakukan uji ANOVA satu arah. Dengan tingkat signifikansi \\(\\alpha=0.05\\), hipotesis dari uji ini adalah:\n\n\\(H_0: \\mu_1 = \\mu_2 = \\mu_3\\)\n\\(H_1:\\) setidaknya salah satu dari \\(\\mu_1,\\mu_2,\\mu_3\\) berbeda nilainya\n\nUntuk menjalankan uji ANOVA satu arah, digunakan fungsi oneway.test()\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.080101, num df = 2, denom df = 27, p-value = 0.9232\n\n\nFungsi lain yang dapat digunakan adalah aov()\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 0.161 0.0803 0.08 0.923\nResiduals 27 27.080 1.0029 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\nDengan \\(k\\) adalah banyak populasi dan \\(n\\) adalah ukuran sampel acak dalam satu populasi.\nKita bisa mendapatkan nilai F tabel.\n\nalpha = 0.05\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = 3*(10-1))\n\nF_tabel\n\n[1] 3.354131\n\n\nDidapatkan \\[F_\\text{hitung} = 0.18194 < 3.354131 = F_\\text{tabel}\\] dan p-value = 0.8347 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)" }, { "objectID": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#ukuran-sampel-tidak-seragam", "href": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#ukuran-sampel-tidak-seragam", - "title": "(Pertemuan 09) ANOVA dan Chi-Squared", + "title": "(Pertemuan 09) ANOVA dan Uji Chi-Squared", "section": "", - "text": "Untuk kasus pengambilan sampel acak dari ketiga populasi dengan ukuran tidak seragam, kita hanya perlu mengubah nilai \\(n_1, n_2, n_3\\).\n\nn1 <- 9\nn2 <- 15\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nKita akan melakukan uji ANOVA satu arah dengan fungsi yang sama seperti sebelumnya.\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.98669, num df = 2, denom df = 31, p-value = 0.3842\n\n\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 2.17 1.085 0.987 0.384\nResiduals 31 34.09 1.100 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\ndengan \\[N = \\sum_1^kn_i\\]\nMaka kita dapat F tabel.\n\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = n1+n2+n3 - 3)\n\nF_tabel\n\n[1] 3.304817\n\n\nDidapatkan \\[F_\\text{hitung} = 1.3941 < 3.304817 = F_\\text{tabel}\\] dan p-value = 0.2632 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)" + "text": "Untuk kasus pengambilan sampel acak dari ketiga populasi dengan ukuran tidak seragam, kita hanya perlu mengubah nilai \\(n_1, n_2, n_3\\).\n\nn1 <- 9\nn2 <- 15\nn3 <- 10\n\npops.1 <- rnorm(n=n1, mean=1, sd=1)\npops.2 <- rnorm(n=n2, mean=0.9, sd=1)\npops.3 <- rnorm(n=n3, mean=1.1, sd=1)\n\npop.source <- c(replicate(n1, \"pops.1\"), \n replicate(n2, \"pops.2\"), \n replicate(n3, \"pops.3\"))\n\npops.value <- c(pops.1, pops.2, pops.3)\n\ndata <- data.frame(pop.source, pops.value)\n\nKita akan melakukan uji ANOVA satu arah dengan fungsi yang sama seperti sebelumnya.\n\noneway.test(pops.value ~ pop.source,\n data = data,\n var.equal = TRUE)\n\n\n One-way analysis of means\n\ndata: pops.value and pop.source\nF = 0.4461, num df = 2, denom df = 31, p-value = 0.6442\n\n\n\nav <- aov(pops.value ~ pop.source, data = data)\nsummary(av)\n\n Df Sum Sq Mean Sq F value Pr(>F)\npop.source 2 0.511 0.2556 0.446 0.644\nResiduals 31 17.764 0.5730 \n\n\nIngat lagi bahwa daerah kritis uji ANOVA adalah:\n\n\\(F_\\text{hitung}< F_{\\alpha;(k-1);k(n-1)}\\)\np-value < \\(\\alpha\\).\n\ndengan \\[N = \\sum_1^kn_i\\]\nMaka kita dapat F tabel.\n\nF_tabel = qf(p=1-alpha, df1 = 3-1, df2 = n1+n2+n3 - 3)\n\nF_tabel\n\n[1] 3.304817\n\n\nDidapatkan \\[F_\\text{hitung} = 1.3941 < 3.304817 = F_\\text{tabel}\\] dan p-value = 0.2632 > 0.05 = \\(\\alpha\\). Maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana tidak ada perbedaan yang signifikan secara statistik antara nilai \\(\\mu_1, \\mu_2, \\mu_3\\)" }, { "objectID": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#uji-goodness-of-fit", "href": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#uji-goodness-of-fit", - "title": "(Pertemuan 09) ANOVA dan Chi-Squared", + "title": "(Pertemuan 09) ANOVA dan Uji Chi-Squared", "section": "Uji Goodness of Fit", - "text": "Uji Goodness of Fit\nUji ini digunakan untuk mengetahui apakah suatu data memiliki distribusi probabilitas tertentu yang sudah kita duga sebelumnya.\n\nMenggunakan built-in function\nMisalkan kita mempunyai data sampel acak berukuran 6 (lihat variabel “obs” dibawah).\nSampel acak tersebut berasal dari suatu populasi dengan ruang nilai diskrit. Dapatkah kita menyimpulkan bahwa populasi tersebut berdistribusi uniform?\n\nobs <- c(20,22,17,18,19,24)\nprob = c(replicate(length(obs),1))/length(obs)\n\nUntuk menguji hipotesis tersebut, kita bisa menggunakan uji chi-squared. Hipotesis yang digunakan adalah:\n\n\\(H_0:\\) populasi berdistribusi uniform\n\\(H_1:\\) populasi tidak berdistribusi uniform\n\nDengan tingkat signfikasi \\(\\alpha=0.05\\), daerah kritis diberikan oleh - \\(\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, k-1}\\) - p-value < \\(\\alpha\\).\nUji chi-squared dapat dilakukan dengan fungsi chisq.test()\n\nchisq.test(obs, p = prob)\n\n\n Chi-squared test for given probabilities\n\ndata: obs\nX-squared = 1.7, df = 5, p-value = 0.8889\n\n\ndan \\(\\chi^2_{\\alpha, k-1}\\)\n\nqchisq(p=1-alpha, df=15-1)\n\n[1] 23.68479\n\n\nKarena \\(\\chi^2_\\text{hitung} = 1.7 < 23.68479 = \\chi^2_{\\alpha, k-1}\\) dan p-value = 0.8889 > \\(0.05 = \\alpha\\), maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana populasi berdistribusi uniform.\n\n\nMenggunakan statistik uji\nMisal kita ingin menguji apakah sebuah dadu seimbang dengan pengambilan sampel acak berukuran 120 pelemparan.\n\nn_dadu <- 120\ndadu <- ceiling(runif(n=n_dadu, min = 0, max=6))\ndadu\n\n [1] 2 2 5 6 3 2 3 4 3 4 5 3 4 4 4 1 4 4 1 5 1 6 3 1 4 4 1 2 3 5 5 5 2 6 3 4 1\n [38] 1 2 3 5 6 1 5 3 2 6 5 3 2 5 5 2 6 5 2 6 1 5 6 2 6 5 6 4 6 3 4 4 4 3 5 1 3\n [75] 2 2 3 5 2 6 3 3 5 5 4 2 4 2 1 6 1 4 3 1 3 1 2 6 4 6 1 6 2 1 1 2 3 3 4 5 1\n[112] 1 6 6 5 4 4 4 2 5\n\n\nDengan cara yang sama, kita dapat melakukan uji chi-squared\n\nprob = c(replicate(length(dadu),1))/length(dadu)\n\nchisq.test(dadu, p = prob)\n\nWarning in chisq.test(dadu, p = prob): Chi-squared approximation may be\nincorrect\n\n\n\n Chi-squared test for given probabilities\n\ndata: dadu\nX-squared = 95.429, df = 119, p-value = 0.945\n\n\nTerdapat pesan “Warning: Chi-squared approximation may be incorrect”. Hal ini terjadi karena terdapat beberapa pengulangan nilai pada ruang sampel, di mana masing-masing nilai tersebut dianggap sebagai observasi independen yang memiliki probabilitas \\(\\frac{1}{120}\\). Sedangkan, kita ingin menguji apakah peluang masing-masing mata dadu muncul bernilai \\(\\frac{1}{6}\\).\n\nx <- table(dadu)\nx\n\ndadu\n 1 2 3 4 5 6 \n19 20 20 22 21 18 \n\n\nMaka, kita dapat melakukan uji chi-squared tanpa menggunakan fungsi chisq.test()\nKarena kita ingin menguji apakah dadu seimbang, kita akan membandingkan nilai “observasi” kemunculan mata dadu dengan nilai “ekspektasi” kemunculan mata dadu jika dadu seimbang.\n\nval.dadu <- names(x)\nobs.dadu <- as.vector(x)\nex.dadu <- c(replicate(6, n_dadu/6))\n\nrbind(val.dadu, obs.dadu, ex.dadu)\n\n [,1] [,2] [,3] [,4] [,5] [,6]\nval.dadu \"1\" \"2\" \"3\" \"4\" \"5\" \"6\" \nobs.dadu \"19\" \"20\" \"20\" \"22\" \"21\" \"18\"\nex.dadu \"20\" \"20\" \"20\" \"20\" \"20\" \"20\"\n\n\nIngat hipotesis yang digunakan adalah\n\n\\(H_0:\\) dadu seimbang, hasil pelemparan dadu berdistribusi uniform\n\\(H_1:\\) hasil pelemparan dadu tidak berdistribusi uniform\n\nStatistik uji yang digunakan adalah \\[\\chi^2 = \\sum_i^k \\frac{(o_i-e_i)^2}{e_i}\\]\nDidapat \\(\\chi^2_\\text{hitung}\\)\n\nchi.hitung <- sum((obs.dadu-ex.dadu)**2/ex.dadu)\nchi.hitung\n\n[1] 0.5\n\n\ndan \\(\\chi^2_{\\alpha, k-1}\\)\n\nqchisq(p=1-alpha, df=6-1)\n\n[1] 11.0705\n\n\nKarena \\(\\chi^2_\\text{hitung} = 2.8 < 11.0705 = \\chi^2_{\\alpha, k-1}\\), maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana dadu seimbang.\n\n\nMembandingkan dengan distribusi non-uniform\nMisalkan kita memiliki populasi dengan ruang nilai kontinu [1.45, 4.95], dan dilakukan pengambilan sampel acak berukuran 40 yang dibagi ke dalam 7 kelas\n\nlower_bound <- c()\nfor (i in 1:7) {lower_bound[i] <- 1.45+(i-1)*0.5}\n\nupper_bound <- c()\nfor (i in 1:7) {upper_bound[i] <- 1.95+(i-1)*0.5}\n\nobs_class <- c(2,1,4,15,10,5,3)\n\ndata.frame(lower_bound, upper_bound, obs_class)\n\n lower_bound upper_bound obs_class\n1 1.45 1.95 2\n2 1.95 2.45 1\n3 2.45 2.95 4\n4 2.95 3.45 15\n5 3.45 3.95 10\n6 3.95 4.45 5\n7 4.45 4.95 3\n\n\nDapatkah kita menyimpulkan bahwa populasi asal sampel acak tersebut berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\nKita dapat mulai dengan membuat kolom nilai ekspektasi masing-masing kelas jika populasi berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\n\nmu = 3.5\ns = 0.7\n\n\nprob_class <- c()\nfor (i in 1:7) {prob_class[i] <- \n pnorm(q=upper_bound[i], mean=mu, sd=s) - \n pnorm(q=lower_bound[i], mean=mu, sd=s)}\nprob_class\n\n[1] 0.01170195 0.05340264 0.14921024 0.25551089 0.26831326 0.17279049 0.06820853\n\nex_class <- prob_class*sum(obs_class)\nex_class\n\n[1] 0.4680779 2.1361054 5.9684098 10.2204356 10.7325306 6.9116195 2.7283412\n\n\n\nclass <- data.frame(lower_bound, upper_bound, obs_class,ex_class)\n\nclass\n\n lower_bound upper_bound obs_class ex_class\n1 1.45 1.95 2 0.4680779\n2 1.95 2.45 1 2.1361054\n3 2.45 2.95 4 5.9684098\n4 2.95 3.45 15 10.2204356\n5 3.45 3.95 10 10.7325306\n6 3.95 4.45 5 6.9116195\n7 4.45 4.95 3 2.7283412\n\n\nPerhatikan bahwa terdapat beberapa baris dengan nilai ekspektasi yang cukup kecil (<5). Maka, untuk melakukan uji chi-squared yang lebih akurat, akan dilakukan penggabungan kelas-kelas berhimpit tersebut.\n\ni <- 1\nwhile (i < nrow(class)){\n while (class[[4]][[i]]<5){\n class[[4]][[i]] <- class[[4]][[i]] + class[[4]][[i+1]]\n class[[3]][[i]] <- class[[3]][[i]] + class[[3]][[i+1]]\n class[[2]][[i]] <- class[[2]][[i+1]]\n class[[1]][[i]] <- class[[1]][[i+1]]\n class <- class[-c(i+1), ]\n }\n i <- i+1\n}\n\n\nif (class[[4]][[nrow(class)]]<5){\n class[[4]][[nrow(class)-1]] <- class[[4]][[nrow(class)]] + class[[4]][[nrow(class)-1]]\n class[[3]][[nrow(class)-1]] <- class[[3]][[nrow(class)]] + class[[3]][[nrow(class)-1]]\n class[[2]][[nrow(class)-1]] <- class[[2]][[nrow(class)-1]]\n class[[1]][[nrow(class)-1]] <- class[[1]][[nrow(class)-1]]\n class <- class[-c(nrow(class)), ]\n}\n\nclass\n\n lower_bound upper_bound obs_class ex_class\n1 2.45 2.95 7 8.572593\n4 2.95 3.45 15 10.220436\n5 3.45 3.95 10 10.732531\n6 3.95 4.45 8 9.639961\n\n\nTelah didapat data nilai observasi dan nilai ekspektasi yang diperbaiki.\nSebagai intuisi awal, kita bisa memperhatikan barplot dari nilai observasi sampel acak dibandingkan dengan nilai ekspektasinya.\n\npar(mfrow = c(1,2))\nbarplot(class$obs_class)\nbarplot(class$ex_class)\n\n\n\n\n\n\n\n\nSelanjutnya, kita bisa melakukan uji chi-squared terhadap masing-masing kelas observasi dengan metode yang sama. Hipotesis uji adalah\n\n\\(H_0:\\) populasi berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\n\\(H_1:\\) populasi tidak berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\n\n\nchi_hitung <- sum((class$obs_class-class$ex_class)**2/class$ex_class)\nchi_hitung\n\n[1] 2.852626\n\nqchisq(p=1-alpha, df=7-1)\n\n[1] 12.59159\n\n\nKarena \\(\\chi^2_\\text{hitung} = 2.852626 < 12.59159 = \\chi^2_{\\alpha, k-1}\\), maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana populasi berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)." + "text": "Uji Goodness of Fit\nUji ini digunakan untuk mengetahui apakah suatu data memiliki distribusi probabilitas tertentu yang sudah kita duga sebelumnya.\n\nMenggunakan built-in function\nMisalkan kita mempunyai data sampel acak berukuran 6 (lihat variabel “obs” dibawah).\nSampel acak tersebut berasal dari suatu populasi dengan ruang nilai diskrit. Dapatkah kita menyimpulkan bahwa populasi tersebut berdistribusi uniform?\n\nobs <- c(20,22,17,18,19,24)\nprob = c(replicate(length(obs),1))/length(obs)\n\nUntuk menguji hipotesis tersebut, kita bisa menggunakan uji chi-squared. Hipotesis yang digunakan adalah:\n\n\\(H_0:\\) populasi berdistribusi uniform\n\\(H_1:\\) populasi tidak berdistribusi uniform\n\nDengan tingkat signfikasi \\(\\alpha=0.05\\), daerah kritis diberikan oleh - \\(\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, k-1}\\) - p-value < \\(\\alpha\\).\nUji chi-squared dapat dilakukan dengan fungsi chisq.test()\n\nchisq.test(obs, p = prob)\n\n\n Chi-squared test for given probabilities\n\ndata: obs\nX-squared = 1.7, df = 5, p-value = 0.8889\n\n\ndan \\(\\chi^2_{\\alpha, k-1}\\)\n\nqchisq(p=1-alpha, df=15-1)\n\n[1] 23.68479\n\n\nKarena \\(\\chi^2_\\text{hitung} = 1.7 < 23.68479 = \\chi^2_{\\alpha, k-1}\\) dan p-value = 0.8889 > \\(0.05 = \\alpha\\), maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana populasi berdistribusi uniform.\n\n\nMenggunakan statistik uji\nMisal kita ingin menguji apakah sebuah dadu seimbang dengan pengambilan sampel acak berukuran 120 pelemparan.\n\nn_dadu <- 120\ndadu <- ceiling(runif(n=n_dadu, min = 0, max=6))\ndadu\n\n [1] 2 6 5 4 6 6 1 2 3 4 3 5 5 6 6 5 1 5 3 5 5 5 5 6 5 2 4 5 1 5 2 3 6 3 3 5 6\n [38] 3 6 6 2 4 1 4 6 3 2 3 1 6 2 6 5 4 3 4 2 5 6 6 5 4 3 1 5 3 6 1 6 4 2 4 1 4\n [75] 4 6 1 4 2 5 2 5 6 1 2 4 4 6 3 1 4 3 4 6 5 6 6 2 2 6 2 1 2 4 2 6 4 6 3 2 3\n[112] 1 6 4 1 4 3 1 4 3\n\n\nDengan cara yang sama, kita dapat melakukan uji chi-squared\n\nprob = c(replicate(length(dadu),1))/length(dadu)\n\nchisq.test(dadu, p = prob)\n\nWarning in chisq.test(dadu, p = prob): Chi-squared approximation may be\nincorrect\n\n\n\n Chi-squared test for given probabilities\n\ndata: dadu\nX-squared = 91.725, df = 119, p-value = 0.97\n\n\nTerdapat pesan “Warning: Chi-squared approximation may be incorrect”. Hal ini terjadi karena terdapat beberapa pengulangan nilai pada ruang sampel, di mana masing-masing nilai tersebut dianggap sebagai observasi independen yang memiliki probabilitas \\(\\frac{1}{120}\\). Sedangkan, kita ingin menguji apakah peluang masing-masing mata dadu muncul bernilai \\(\\frac{1}{6}\\).\n\nx <- table(dadu)\nx\n\ndadu\n 1 2 3 4 5 6 \n15 18 18 22 20 27 \n\n\nMaka, kita dapat melakukan uji chi-squared tanpa menggunakan fungsi chisq.test()\nKarena kita ingin menguji apakah dadu seimbang, kita akan membandingkan nilai “observasi” kemunculan mata dadu dengan nilai “ekspektasi” kemunculan mata dadu jika dadu seimbang.\n\nval.dadu <- names(x)\nobs.dadu <- as.vector(x)\nex.dadu <- c(replicate(6, n_dadu/6))\n\nrbind(val.dadu, obs.dadu, ex.dadu)\n\n [,1] [,2] [,3] [,4] [,5] [,6]\nval.dadu \"1\" \"2\" \"3\" \"4\" \"5\" \"6\" \nobs.dadu \"15\" \"18\" \"18\" \"22\" \"20\" \"27\"\nex.dadu \"20\" \"20\" \"20\" \"20\" \"20\" \"20\"\n\n\nIngat hipotesis yang digunakan adalah\n\n\\(H_0:\\) dadu seimbang, hasil pelemparan dadu berdistribusi uniform\n\\(H_1:\\) hasil pelemparan dadu tidak berdistribusi uniform\n\nStatistik uji yang digunakan adalah \\[\\chi^2 = \\sum_i^k \\frac{(o_i-e_i)^2}{e_i}\\]\nDidapat \\(\\chi^2_\\text{hitung}\\)\n\nchi.hitung <- sum((obs.dadu-ex.dadu)**2/ex.dadu)\nchi.hitung\n\n[1] 4.3\n\n\ndan \\(\\chi^2_{\\alpha, k-1}\\)\n\nqchisq(p=1-alpha, df=6-1)\n\n[1] 11.0705\n\n\nKarena \\(\\chi^2_\\text{hitung} = 2.8 < 11.0705 = \\chi^2_{\\alpha, k-1}\\), maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana dadu seimbang.\n\n\nMembandingkan dengan distribusi non-uniform\nMisalkan kita memiliki populasi dengan ruang nilai kontinu [1.45, 4.95], dan dilakukan pengambilan sampel acak berukuran 40 yang dibagi ke dalam 7 kelas\n\nlower_bound <- c()\nfor (i in 1:7) {lower_bound[i] <- 1.45+(i-1)*0.5}\n\nupper_bound <- c()\nfor (i in 1:7) {upper_bound[i] <- 1.95+(i-1)*0.5}\n\nobs_class <- c(2,1,4,15,10,5,3)\n\ndata.frame(lower_bound, upper_bound, obs_class)\n\n lower_bound upper_bound obs_class\n1 1.45 1.95 2\n2 1.95 2.45 1\n3 2.45 2.95 4\n4 2.95 3.45 15\n5 3.45 3.95 10\n6 3.95 4.45 5\n7 4.45 4.95 3\n\n\nDapatkah kita menyimpulkan bahwa populasi asal sampel acak tersebut berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\nKita dapat mulai dengan membuat kolom nilai ekspektasi masing-masing kelas jika populasi berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\n\nmu = 3.5\ns = 0.7\n\n\nprob_class <- c()\nfor (i in 1:7) {prob_class[i] <- \n pnorm(q=upper_bound[i], mean=mu, sd=s) - \n pnorm(q=lower_bound[i], mean=mu, sd=s)}\nprob_class\n\n[1] 0.01170195 0.05340264 0.14921024 0.25551089 0.26831326 0.17279049 0.06820853\n\nex_class <- prob_class*sum(obs_class)\nex_class\n\n[1] 0.4680779 2.1361054 5.9684098 10.2204356 10.7325306 6.9116195 2.7283412\n\n\n\nclass <- data.frame(lower_bound, upper_bound, obs_class,ex_class)\n\nclass\n\n lower_bound upper_bound obs_class ex_class\n1 1.45 1.95 2 0.4680779\n2 1.95 2.45 1 2.1361054\n3 2.45 2.95 4 5.9684098\n4 2.95 3.45 15 10.2204356\n5 3.45 3.95 10 10.7325306\n6 3.95 4.45 5 6.9116195\n7 4.45 4.95 3 2.7283412\n\n\nPerhatikan bahwa terdapat beberapa baris dengan nilai ekspektasi yang cukup kecil (<5). Maka, untuk melakukan uji chi-squared yang lebih akurat, akan dilakukan penggabungan kelas-kelas berhimpit tersebut.\n\ni <- 1\nwhile (i < nrow(class)){\n while (class[[4]][[i]]<5){\n class[[4]][[i]] <- class[[4]][[i]] + class[[4]][[i+1]]\n class[[3]][[i]] <- class[[3]][[i]] + class[[3]][[i+1]]\n class[[2]][[i]] <- class[[2]][[i+1]]\n class[[1]][[i]] <- class[[1]][[i+1]]\n class <- class[-c(i+1), ]\n }\n i <- i+1\n}\n\n\nif (class[[4]][[nrow(class)]]<5){\n class[[4]][[nrow(class)-1]] <- class[[4]][[nrow(class)]] + class[[4]][[nrow(class)-1]]\n class[[3]][[nrow(class)-1]] <- class[[3]][[nrow(class)]] + class[[3]][[nrow(class)-1]]\n class[[2]][[nrow(class)-1]] <- class[[2]][[nrow(class)-1]]\n class[[1]][[nrow(class)-1]] <- class[[1]][[nrow(class)-1]]\n class <- class[-c(nrow(class)), ]\n}\n\nclass\n\n lower_bound upper_bound obs_class ex_class\n1 2.45 2.95 7 8.572593\n4 2.95 3.45 15 10.220436\n5 3.45 3.95 10 10.732531\n6 3.95 4.45 8 9.639961\n\n\nTelah didapat data nilai observasi dan nilai ekspektasi yang diperbaiki.\nSebagai intuisi awal, kita bisa memperhatikan barplot dari nilai observasi sampel acak dibandingkan dengan nilai ekspektasinya.\n\npar(mfrow = c(1,2))\nbarplot(class$obs_class)\nbarplot(class$ex_class)\n\n\n\n\n\n\n\n\nSelanjutnya, kita bisa melakukan uji chi-squared terhadap masing-masing kelas observasi dengan metode yang sama. Hipotesis uji adalah\n\n\\(H_0:\\) populasi berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\n\\(H_1:\\) populasi tidak berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)\n\n\nchi_hitung <- sum((class$obs_class-class$ex_class)**2/class$ex_class)\nchi_hitung\n\n[1] 2.852626\n\nqchisq(p=1-alpha, df=7-1)\n\n[1] 12.59159\n\n\nKarena \\(\\chi^2_\\text{hitung} = 2.852626 < 12.59159 = \\chi^2_{\\alpha, k-1}\\), maka hasil uji berada di luar daerah kritis. Dengan kata lain, tidak terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana populasi berdistribusi \\(N(\\mu=3.5, \\sigma^2 = 0.7^2)\\)." }, { "objectID": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#uji-independensi", "href": "semuahalaman/modulprak/2024/ganjil/psd/modul9.html#uji-independensi", - "title": "(Pertemuan 09) ANOVA dan Chi-Squared", + "title": "(Pertemuan 09) ANOVA dan Uji Chi-Squared", "section": "Uji Independensi", "text": "Uji Independensi\nUji Independensi dilakukan untuk mengetahui apakah antarvariabel kategorik saling bebas (independen) atau tidak saling bebas (dependen).\nPertama-tama kita akan mengimport dataset “treatment” dari situs github.\n\ndf <- read.csv(\"https://raw.githubusercontent.com/selva86/datasets/master/treatment.csv\")\nView(df)\n\nMisal kita ingin menguji apakah ada hubungan antara variabel kategorik treatment dengan variabel kategorik improvement.\nKita dapat membuat tabel kontingensi berukuran 2x2 dari variabel kategorik tersebut.\n\ntabel <- table(df$treatment, df$improvement)\ntabel\n\n \n improved not-improved\n not-treated 26 29\n treated 35 15\n\n\nIngat hipotesis yang akan diuji adalah:\n\n\\(H_0\\): treatment dan improvement tidak saling mempengaruhi (independen)\n\\(H_1\\): treatment dan improvement saling mempengaruhi (tidak independen)\n\nDengan tingkat signfikasi \\(\\alpha=0.05\\), daerah kritis diberikan oleh\n\n\\(\\chi^2_\\text{hitung} > \\chi^2_{\\alpha, (r-1)(c-1)}\\)\np-value < \\(\\alpha\\).\n\nKita dapat melakukan uji chi-squared terhadap tabel kontingensi yang telah dibuat.\n\nchisq.test(tabel)\n\n\n Pearson's Chi-squared test with Yates' continuity correction\n\ndata: tabel\nX-squared = 4.6626, df = 1, p-value = 0.03083\n\n\nUntuk \\(\\chi^2_{\\alpha, (r-1)(c-1)}\\)\n\nqchisq(p=1-alpha, df=(2-1)*(2-1))\n\n[1] 3.841459\n\n\nKarena \\(\\chi^2_\\text{hitung} = 4.6626 > 3.841459 = \\chi^2_{\\alpha, k-1}\\), dan p-value = 0.03083 < 0.05= \\(\\alpha\\), maka hasil uji berada di dalam daerah kritis. Dengan kata lain, terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana treatment dan improvement tidak saling mempengaruhi.\nAkan tetapi, kita tidak bisa menyimpulkan bagaimana kedua variabel tersebut saling mempengaruhi. Jadi, kita hanya bisa mengindikasi adanya asosiasi antarvariabel tanpa mengetahui apa/bagaimana asosiasinya (perlu dilakukan uji lain untuk menjelaskan lebih lanjut)\n\nKasus Khusus\n\ndata(\"mtcars\")\nView(mtcars)\n\nPerhatikan bahwa ruang nilai variabel carb dan cyl adalah bilangan asli, sehingga kita bisa menganggap bahwa kedua variabel tersebut adalah variabel kategorik.\nMisal kita ingin menguji apakah ada hubungan antara variabel kategorik carb dengan variabel cyl. Kita bisa mulai dengan membuat tabel kontingensi.\n\ntabel2 <- table(mtcars$carb, mtcars$cyl)\ntabel2\n\n \n 4 6 8\n 1 5 2 0\n 2 6 0 4\n 3 0 0 3\n 4 0 4 6\n 6 0 1 0\n 8 0 0 1\n\n\nDan dengan metode yang sama, kita lakukan uji chi-squared terhadap tabel tersebut\n\nchisq.test(tabel2)\n\nWarning in chisq.test(tabel2): Chi-squared approximation may be incorrect\n\n\n\n Pearson's Chi-squared test\n\ndata: tabel2\nX-squared = 24.389, df = 10, p-value = 0.006632\n\n\nPerhatikan muncul pesan “Warning: Chi-squared approximation may be incorrect”. Hal ini terjadi karena terdapat beberapa observasi yang bernilai nol, yang mengakibatkan nilai ekspektasi untuk observasi tersebut bernilai kecil (kurang dari 1).\n\nchisq.test(tabel2)$expected\n\nWarning in chisq.test(tabel2): Chi-squared approximation may be incorrect\n\n\n \n 4 6 8\n 1 2.40625 1.53125 3.0625\n 2 3.43750 2.18750 4.3750\n 3 1.03125 0.65625 1.3125\n 4 3.43750 2.18750 4.3750\n 6 0.34375 0.21875 0.4375\n 8 0.34375 0.21875 0.4375\n\n\nSalah satu cara untuk melakukan uji independensi untuk kasus tersebut adalah dengan Fisher Exact Test.\nhipotesis yang akan diuji adalah:\n\n\\(H_0\\): carb dan cyl tidak saling mempengaruhi (independen)\n\\(H_1\\): carb dan cyl saling mempengaruhi (tidak independen)\n\nDengan tingkat signfikasi \\(\\alpha=0.05\\), daerah kritis diberikan oleh p-value < \\(\\alpha\\).\n\nfisher.test(tabel2)\n\n\n Fisher's Exact Test for Count Data\n\ndata: tabel2\np-value = 0.0003345\nalternative hypothesis: two.sided\n\n\nKarena p-value = 0.0003345 < \\(\\alpha\\), maka hasil uji berada di dalam daerah kritis. Dengan kata lain, terdapat bukti yang cukup untuk menolak \\(H_0\\) di mana carb dan cyl tidak saling mempengaruhi." } diff --git a/docs/semuahalaman/modulprak/2024/ganjil/psd/modul9.html b/docs/semuahalaman/modulprak/2024/ganjil/psd/modul9.html index c7d83239..c64ac8d4 100644 --- a/docs/semuahalaman/modulprak/2024/ganjil/psd/modul9.html +++ b/docs/semuahalaman/modulprak/2024/ganjil/psd/modul9.html @@ -9,7 +9,7 @@ -(Pertemuan 09) ANOVA dan Chi-Squared – Lab Praktikum Departemen Matematika FMIPA UI +(Pertemuan 09) ANOVA dan Uji Chi-Squared – Lab Praktikum Departemen Matematika FMIPA UI