Nama: Lusiana
NIM: 2611018017
Mata Kuliah: Biostatistika Intermediete
Program Studi: Magister Kesehatan Masyarakat Universitas Mulawarman

Metode

Data mencakup tiga kelompok dan empat pengukuran kadar asam urat per peserta. Analisis meliputi repeated-measures ANOVA satu arah pada kelompok DASH+AF, mixed ANOVA kelompok x waktu, koreksi Greenhouse-Geisser, pendekatan multivariat, post hoc, kontras interaksi, alternatif nonparametrik, dan linear mixed model (LMM). Baseline, minggu ke-4, minggu ke-8 dan minggu ke-12 berjarak sama. Sumber: data_asam_urat_wide.xlsx, sheet Data Asam Urat. Satuan pengukuran dan status asal data tidak dicantumkan dalam workbook.

analisis_asam_urat <- function() {
  paket <- c("dplyr", "tidyr", "ggplot2", "afex", "emmeans", "rstatix",
             "car", "effectsize", "lme4", "lmerTest", "pbkrtest",
             "performance", "ggpubr", "WRS2", "htmltools", "base64enc")
  belum <- paket[!vapply(paket, requireNamespace, logical(1), quietly = TRUE)]
  if (length(belum)) install.packages(belum, repos = "https://cloud.r-project.org")
  gagal <- paket[!vapply(paket, requireNamespace, logical(1), quietly = TRUE)]
  if (length(gagal)) stop("Paket belum tersedia: ", paste(gagal, collapse = ", "))
  suppressPackageStartupMessages({
    library(dplyr); library(tidyr); library(ggplot2)
  })
  opsi_lama <- options(contrasts = c("contr.sum", "contr.poly"), width = 120)
  on.exit(options(opsi_lama), add = TRUE)
  afex::afex_options(emmeans_model = "multivariate")
  theme_set(theme_bw(base_size = 12))
  set.seed(2026)
  folder <- file.path(getwd(), "Hasil_Analisis_Asam_Urat")
  dir.create(folder, recursive = TRUE, showWarnings = FALSE)
  hasil <- list(); isi <- list(); grafik <- list()
  teks <- function(judul, x) {
    cat("\n", judul, "\n", sep = "")
    cat(x, "\n")
    isi[[length(isi) + 1L]] <<- htmltools::tagList(
      htmltools::tags$h2(judul), htmltools::tags$p(x))
  }
  tampil <- function(nama, x) {
    hasil[[nama]] <<- x
    cat("\n", gsub("_", " ", nama), "\n", sep = "")
    print(x)
    cetak <- capture.output(print(x))
    writeLines(cetak, file.path(folder, paste0(nama, ".txt")))
    if (is.data.frame(x)) write.csv(x, file.path(folder, paste0(nama, ".csv")), row.names = FALSE)
    isi[[length(isi) + 1L]] <<- htmltools::tagList(
      htmltools::tags$h2(gsub("_", " ", nama)),
      htmltools::tags$pre(paste(cetak, collapse = "\n")))
    invisible(x)
  }
  gambar <- function(nama, p, lebar = 11, tinggi = 6) {
    print(p)
    berkas <- file.path(folder, paste0(nama, ".png"))
    ggsave(berkas, plot = p, width = lebar, height = tinggi, dpi = 300, bg = "white")
    grafik[[nama]] <<- p
    isi[[length(isi) + 1L]] <<- htmltools::tagList(
      htmltools::tags$h2(gsub("_", " ", nama)),
      htmltools::tags$img(src = base64enc::dataURI(file = berkas, mime = "image/png"),
                         style = "max-width:100%;height:auto;"))
    invisible(p)
  }
  opsional <- function(nama, ekspresi) {
    tryCatch(tampil(nama, ekspresi), error = function(e) {
      teks(nama, paste("Analisis tidak dapat diestimasi:", conditionMessage(e)))
      invisible(NULL)
    })
  }
  fp <- function(p) ifelse(is.na(p), "NA", ifelse(p < .001, "< 0,001",
                          paste0("= ", formatC(p, digits = 3, format = "f", decimal.mark = ","))))

  csv_asli <- 'id,kelompok,usia,jk,AU_M0,AU_M4,AU_M8,AU_M12
P001,Kontrol,42,L,6.7,7.2,6.4,6.5
P002,Kontrol,43,L,7.0,6.3,7.0,6.8
P003,Kontrol,62,P,5.1,5.2,4.7,6.3
P004,Kontrol,40,P,6.6,6.4,6.0,7.0
P005,Kontrol,53,P,6.1,5.8,6.6,6.2
P006,Kontrol,42,L,7.1,6.6,6.9,6.5
P007,Kontrol,60,P,7.7,7.4,8.5,7.0
P008,Kontrol,63,L,6.5,6.7,6.2,5.9
P009,Kontrol,53,P,6.1,5.9,5.5,6.4
P010,Kontrol,62,P,7.3,7.4,7.2,6.2
P011,Kontrol,57,P,5.5,5.2,5.4,5.5
P012,Kontrol,52,P,6.9,6.9,5.5,6.9
P013,Kontrol,63,L,8.9,9.1,9.2,8.6
P014,Kontrol,50,P,4.6,4.5,3.6,5.8
P015,Kontrol,57,P,6.7,7.5,6.4,6.4
P016,Kontrol,39,P,6.6,7.1,6.8,6.7
P017,Kontrol,54,P,7.1,7.3,7.1,6.4
P018,Kontrol,38,P,6.7,6.3,7.0,7.2
P019,Kontrol,42,P,7.1,6.9,7.0,7.2
P020,Kontrol,41,L,8.7,8.7,8.9,9.2
P021,Kontrol,57,L,5.0,5.0,5.4,5.6
P022,Kontrol,62,P,8.5,8.1,8.3,9.4
P023,Kontrol,45,P,7.0,6.8,6.4,7.1
P024,Kontrol,51,L,6.4,6.2,6.6,6.2
P025,Kontrol,65,P,7.4,7.4,7.1,7.0
P026,Kontrol,56,P,7.3,7.9,7.4,6.8
P027,Kontrol,54,P,6.6,6.6,6.6,6.6
P028,Kontrol,42,P,5.5,5.8,5.3,5.1
P029,Kontrol,41,L,8.7,9.0,8.5,8.3
P030,Kontrol,50,P,6.0,6.2,5.7,5.6
P031,DASH,36,P,6.5,6.8,5.7,5.6
P032,DASH,61,L,7.4,7.7,7.1,6.4
P033,DASH,64,L,5.4,5.7,4.6,4.8
P034,DASH,36,L,5.9,5.1,5.4,5.3
P035,DASH,35,L,6.6,6.4,6.2,5.4
P036,DASH,60,L,6.8,5.9,6.3,6.1
P037,DASH,54,L,7.6,6.9,6.4,7.0
P038,DASH,44,P,7.8,7.5,7.4,7.3
P039,DASH,47,P,6.1,6.1,6.4,5.3
P040,DASH,48,L,6.7,6.1,6.1,5.6
P041,DASH,39,L,7.0,6.9,6.7,6.2
P042,DASH,39,P,5.3,5.2,4.6,4.6
P043,DASH,54,P,6.9,6.3,6.4,5.8
P044,DASH,39,P,6.4,5.9,6.3,5.3
P045,DASH,45,L,9.2,8.7,8.7,8.9
P046,DASH,57,L,8.8,8.9,8.1,7.5
P047,DASH,63,L,7.4,6.5,6.2,6.6
P048,DASH,53,P,5.5,5.6,4.9,4.7
P049,DASH,39,L,8.8,8.8,8.2,8.0
P050,DASH,45,P,5.9,5.9,5.7,4.8
P051,DASH,62,P,7.3,6.3,7.4,6.6
P052,DASH,45,P,7.1,6.9,6.7,6.6
P053,DASH,56,L,7.1,6.6,7.4,7.0
P054,DASH,59,L,7.5,7.3,6.2,6.4
P055,DASH,39,L,8.1,8.0,7.6,7.2
P056,DASH,63,L,6.2,6.3,5.9,6.1
P057,DASH,48,L,7.4,6.5,6.1,6.3
P058,DASH,62,L,6.5,6.3,6.3,5.1
P059,DASH,40,P,7.9,7.1,7.2,7.6
P060,DASH,59,L,5.9,6.2,5.4,5.2
P061,DASH+AF,60,P,8.2,8.8,7.2,7.5
P062,DASH+AF,44,L,8.1,7.7,7.7,8.2
P063,DASH+AF,48,P,4.4,4.0,3.2,3.6
P064,DASH+AF,39,L,7.7,7.7,6.9,6.6
P065,DASH+AF,50,P,7.9,7.7,7.7,7.0
P066,DASH+AF,59,P,5.3,4.7,4.4,4.3
P067,DASH+AF,56,L,7.6,7.2,5.8,5.7
P068,DASH+AF,57,L,8.6,7.9,8.7,7.6
P069,DASH+AF,45,L,7.7,7.4,7.2,6.6
P070,DASH+AF,42,P,5.4,5.4,4.2,3.8
P071,DASH+AF,47,L,6.5,5.9,6.1,5.8
P072,DASH+AF,53,L,6.0,5.6,5.4,5.6
P073,DASH+AF,44,P,6.7,6.8,6.1,5.8
P074,DASH+AF,47,P,5.9,5.3,4.8,4.4
P075,DASH+AF,46,P,7.4,7.2,7.4,6.6
P076,DASH+AF,36,P,6.2,6.0,5.8,5.6
P077,DASH+AF,39,L,6.9,6.7,5.9,6.0
P078,DASH+AF,63,P,5.9,5.5,5.1,5.0
P079,DASH+AF,59,L,7.8,7.2,7.0,6.1
P080,DASH+AF,43,P,7.1,7.7,6.0,5.9
P081,DASH+AF,57,L,9.1,8.8,8.6,8.1
P082,DASH+AF,44,P,6.1,5.4,5.3,4.6
P083,DASH+AF,41,P,6.7,6.1,5.2,5.9
P084,DASH+AF,41,L,6.8,5.8,6.4,5.3
P085,DASH+AF,64,L,6.9,5.9,5.6,6.3
P086,DASH+AF,44,P,6.2,5.9,5.8,4.9
P087,DASH+AF,47,L,6.5,6.3,6.0,6.6
P088,DASH+AF,64,P,6.5,5.6,5.4,4.7
P089,DASH+AF,46,P,6.7,6.5,6.0,6.0
P090,DASH+AF,48,L,6.1,5.3,5.6,5.0'
  dat_wide <- read.csv(text = csv_asli, stringsAsFactors = FALSE)
  kolom <- c("id", "kelompok", "usia", "jk", "AU_M0", "AU_M4", "AU_M8", "AU_M12")
  stopifnot(all(kolom %in% names(dat_wide)), !anyDuplicated(dat_wide$id))
  minggu <- c(0, 4, 8, 12)
  kolom_au <- c("AU_M0", "AU_M4", "AU_M8", "AU_M12")
  kelompok <- c("Kontrol", "DASH", "DASH+AF")
  stopifnot(setequal(unique(dat_wide$kelompok), kelompok),
            all(vapply(dat_wide[kolom_au], is.numeric, logical(1))),
            all(is.finite(as.matrix(dat_wide[kolom_au]))))
  dat_wide <- dat_wide |> mutate(id = factor(id), kelompok = factor(kelompok, levels = c("Kontrol", "DASH", "DASH+AF")))
  dat_long <- dat_wide |>
    pivot_longer(all_of(kolom_au), names_to = "waktu", values_to = "asam_urat") |>
    mutate(waktu = factor(waktu, levels = kolom_au, labels = c("M0", "M4", "M8", "M12")),
           minggu = minggu[as.integer(waktu)]) |> arrange(id, waktu)
  teks("Identitas", paste("Nama: Lusiana | NIM: 2611018017 |",
       "Mata Kuliah: Biostatistika Intermediete | Magister Kesehatan Masyarakat Universitas Mulawarman"))
  teks("Desain", paste(nrow(dat_wide), "peserta; tiga kelompok; empat pengukuran berulang.",
                      "Tanpa nilai hilang. Satuan kadar asam urat tidak dicantumkan dalam workbook."))
  tampil("01_Jumlah_Peserta", dat_wide |> count(kelompok, name = "n"))
  tampil("01a_Usia", dat_wide |> group_by(kelompok) |> summarise(n = n(), mean = mean(usia), sd = sd(usia), min = min(usia), max = max(usia), .groups = "drop"))
  tampil("01b_Jenis_Kelamin", dat_wide |> count(kelompok, jk))
  teks("Sumber data", "Analisis dihitung dari sheet Data Asam Urat. Sheet Ringkasan hanya berisi statistik agregat. Satuan pengukuran dan status data asli/simulasi tidak dicantumkan; interpretasi menggunakan skala numerik dalam workbook.")
  tampil("02_Data_Wide", head(dat_wide))
  tampil("03_Data_Long", head(dat_long, 12))
  desk <- dat_long |> group_by(kelompok, waktu, minggu) |>
    summarise(n = n(), mean = mean(asam_urat), sd = sd(asam_urat), median = median(asam_urat),
              min = min(asam_urat), max = max(asam_urat), se = sd / sqrt(n),
              lower = mean - qt(.975, n - 1) * se,
              upper = mean + qt(.975, n - 1) * se, .groups = "drop")
  tampil("04_Deskriptif", desk)
  tampil("05_Kovarians", cov(dat_wide[kolom_au]))
  tampil("06_Korelasi", cor(dat_wide[kolom_au]))
  pasangan <- combn(kolom_au, 2)
  tampil("07_Varians_Selisih", data.frame(
    pasangan = apply(pasangan, 2, paste, collapse = " - "),
    varians = apply(pasangan, 2, function(p) var(dat_wide[[p[1]]] - dat_wide[[p[2]]]))))
  gambar("G01_Profil_Rerata_CI95", ggplot(desk, aes(minggu, mean, color = kelompok, group = kelompok)) +
    geom_line(linewidth = 1) + geom_point(size = 3) +
    geom_errorbar(aes(ymin = lower, ymax = upper), width = .5) +
    scale_x_continuous(breaks = minggu) +
    labs(title = "Profil rerata kadar asam urat dan interval kepercayaan 95%", x = "Minggu", y = "Kadar asam urat", color = "Kelompok") +
    theme(legend.position = "bottom"))
  gambar("G02_Lintasan_Individu", ggplot(dat_long, aes(minggu, asam_urat, group = id)) +
    geom_line(alpha = .25) + stat_summary(aes(group = kelompok), fun = mean,
      geom = "line", color = "firebrick", linewidth = 1.2) +
    facet_wrap(~ kelompok) + scale_x_continuous(breaks = minggu) +
    labs(title = "Lintasan individu dan rerata kelompok", x = "Minggu", y = "Kadar asam urat"))
  gambar("G03_Boxplot", ggplot(dat_long, aes(waktu, asam_urat, fill = kelompok)) +
    geom_boxplot() + labs(title = "Distribusi kadar asam urat berdasarkan kelompok dan waktu", x = "Waktu", y = "Kadar asam urat", fill = "Kelompok") +
    theme(legend.position = "bottom"))

  d1 <- droplevels(filter(dat_long, kelompok == "DASH+AF"))
  tampil("08_Outlier_Satu_Kelompok", d1 |> group_by(waktu) |> rstatix::identify_outliers(asam_urat))
  tampil("09_Shapiro_Satu_Kelompok", d1 |> group_by(waktu) |> rstatix::shapiro_test(asam_urat))
  gambar("G04_QQ_Satu_Kelompok", ggpubr::ggqqplot(d1, "asam_urat", facet.by = "waktu"))
  aov1_rs <- rstatix::anova_test(data = d1, dv = asam_urat, wid = id, within = waktu, effect.size = "pes")
  tampil("10_ANOVA_Rstatix_Satu_Kelompok", aov1_rs)
  aov1 <- afex::aov_ez(id = "id", dv = "asam_urat", data = d1, within = "waktu",
                       anova_table = list(es = c("ges", "pes"), correction = "GG"))
  tampil("11_RM_ANOVA", aov1)
  tampil("12_Sferisitas_dan_Koreksi_RM", summary(aov1))
  tampil("13_Multivariat_RM", aov1$Anova)
  tampil("14_Eta_Kuadrat_RM", effectsize::eta_squared(aov1, partial = TRUE))
  em1 <- emmeans::emmeans(aov1, ~ waktu)
  tampil("15_EMM_RM", as.data.frame(em1))
  tampil("16_Posthoc_RM_Bonferroni", as.data.frame(pairs(em1, adjust = "bonferroni")))
  tampil("17_RM_vs_Baseline_Holm", as.data.frame(emmeans::contrast(em1, "trt.vs.ctrl", ref = 1, adjust = "holm")))
  tampil("18_Tren_Polinomial_RM", as.data.frame(emmeans::contrast(em1, "poly")))
  tampil("19_Friedman", rstatix::friedman_test(d1, asam_urat ~ waktu | id))
  tampil("20_Kendall_W", rstatix::friedman_effsize(d1, asam_urat ~ waktu | id))
  tampil("21_Wilcoxon_Berpasangan", d1 |> arrange(waktu, id) |>
           rstatix::wilcox_test(asam_urat ~ waktu, paired = TRUE, p.adjust.method = "bonferroni"))
  opsional("22_Robust_RM_Trim20", WRS2::rmanova(d1$asam_urat, d1$waktu, d1$id, tr = .2))

  tampil("23_Outlier_Mixed", dat_long |> group_by(kelompok, waktu) |> rstatix::identify_outliers(asam_urat))
  tampil("24_Shapiro_Mixed", dat_long |> group_by(kelompok, waktu) |> rstatix::shapiro_test(asam_urat))
  gambar("G05_QQ_Mixed", ggpubr::ggqqplot(dat_long, "asam_urat", ggtheme = theme_bw()) +
           facet_grid(waktu ~ kelompok), tinggi = 9)
  tampil("25_Levene", dat_long |> group_by(waktu) |> rstatix::levene_test(asam_urat ~ kelompok))
  tampil("26_Box_M", rstatix::box_m(dat_wide[kolom_au], dat_wide$kelompok))
  aov2 <- afex::aov_ez(id = "id", dv = "asam_urat", data = dat_long, between = "kelompok", within = "waktu",
                       anova_table = list(es = c("ges", "pes"), correction = "GG"))
  tampil("27_Mixed_ANOVA", aov2)
  tampil("28_Sferisitas_dan_Koreksi_Mixed", summary(aov2))
  tampil("29_Multivariat_Mixed", aov2$Anova)
  tampil("30_Eta_Kuadrat_Mixed", effectsize::eta_squared(aov2, partial = TRUE))
  gambar("G06_Profil_Mixed_ANOVA", afex::afex_plot(aov2, x = "waktu", trace = "kelompok",
           error = "within", mapping = c("colour", "shape", "linetype")) +
           labs(title = "Profil mixed ANOVA", x = "Waktu", y = "Kadar asam urat"))
  teks("Interval grafik mixed ANOVA", "Interval within-subject pada grafik afex berbeda dari interval kepercayaan rerata biasa pada grafik profil deskriptif.")
  tampil("31_Efek_Waktu_per_Kelompok", as.data.frame(emmeans::joint_tests(aov2, by = "kelompok")))
  tampil("32_Efek_Kelompok_per_Waktu", as.data.frame(emmeans::joint_tests(aov2, by = "waktu")))
  em2 <- emmeans::emmeans(aov2, ~ waktu | kelompok)
  em2b <- emmeans::emmeans(aov2, ~ kelompok | waktu)
  tampil("33_EMM_Waktu_per_Kelompok", as.data.frame(em2))
  tampil("34_Waktu_vs_Baseline_Holm", as.data.frame(emmeans::contrast(em2, "trt.vs.ctrl", ref = 1, adjust = "holm")))
  tampil("35_Antarkelompok_Tukey", as.data.frame(pairs(em2b, adjust = "tukey")))
  em_full <- emmeans::emmeans(aov2, ~ waktu * kelompok)
  ki <- emmeans::contrast(em_full, interaction = list(
    waktu = list("M12-M0" = c(-1, 0, 0, 1)), kelompok = "pairwise"), adjust = "holm")
  tampil("36_Kontras_Perbedaan_Perubahan", as.data.frame(ki))
  tren <- as.data.frame(emmeans::contrast(em_full,
    interaction = c(waktu = "poly", kelompok = "pairwise"), adjust = "none"))
  tren_lin <- subset(tren, waktu_poly == "linear")
  tren_lin$p.holm <- p.adjust(tren_lin$p.value, "holm")
  tampil("37_Kontras_Tren_Linear", tren_lin)
  teks("Koreksi perbandingan", "Holm untuk waktu versus baseline berlaku dalam tiap kelompok; Tukey berlaku dalam tiap waktu. Kontras perbedaan perubahan dan tren linear memakai Holm pada masing-masing keluarga kontras.")
  tabel_gg <- as.data.frame(afex::nice(aov2, correction = "GG", es = "pes"))
  tampil("38_Tabel_ANOVA_GG", tabel_gg)
  tab_num <- as.data.frame(aov2$anova_table)
  if ("kelompok:waktu" %in% rownames(tab_num)) {
    r <- tab_num["kelompok:waktu", , drop = FALSE]
    teks("Interpretasi interaksi", paste0("Mixed ANOVA dengan koreksi Greenhouse-Geisser menghasilkan interaksi kelompok x waktu: F(",
      round(r[["num Df"]], 2), ", ", round(r[["den Df"]], 2), ") = ", round(r[["F"]], 3),
      "; p ", fp(r[["Pr(>F)"]]), ". ",
      if (r[["Pr(>F)"]] < .05) "Pola perubahan kadar asam urat berbeda secara statistik antar kelompok."
      else "Belum ditemukan bukti statistik perbedaan pola perubahan kadar asam urat antar kelompok.",
      " Arah dan besarnya perbedaan dinilai dari rerata serta kontras perubahan M12-M0."))
  }

  kontrol <- lme4::lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 200000))
  lmm1 <- lmerTest::lmer(asam_urat ~ kelompok * waktu + (1 | id), data = dat_long, REML = TRUE, control = kontrol)
  lmm2 <- lmerTest::lmer(asam_urat ~ kelompok * waktu + (1 + minggu | id), data = dat_long, REML = TRUE, control = kontrol)
  tampil("39_LMM_Intersep", summary(lmm1))
  tampil("40_LMM_Intersep_Slope", summary(lmm2))
  tampil("41_Perbandingan_LMM_REML", anova(lmm1, lmm2, refit = FALSE))
  teks("Perbandingan model", "Kedua model mempunyai fixed effects yang sama. Perbandingan REML mengikuti materi; nilai p likelihood-ratio bersifat pendekatan karena varians acak diuji pada batas ruang parameter.")
  tampil("42_Singularitas_LMM", data.frame(model = c("Intersep", "Intersep dan slope"),
         singular = c(lme4::isSingular(lmm1), lme4::isSingular(lmm2))))
  opsional("43_LMM_Kenward_Roger", anova(lmm2, ddf = "Kenward-Roger"))
  opsional("44_ICC", performance::icc(lmm1))
  rd <- data.frame(prediksi = fitted(lmm2), residual = resid(lmm2))
  gambar("G07_QQ_Residual_LMM", ggplot(rd, aes(sample = residual)) + stat_qq() + stat_qq_line() +
         labs(title = "Q-Q residual LMM", x = "Kuantil teoretis", y = "Kuantil residual"))
  ra <- data.frame(intersep = lme4::ranef(lmm2)$id[, 1])
  gambar("G08_QQ_Intersep_Acak", ggplot(ra, aes(sample = intersep)) + stat_qq() + stat_qq_line() +
         labs(title = "Q-Q intersep acak LMM", x = "Kuantil teoretis", y = "Kuantil intersep acak"))
  gambar("G09_Residual_vs_Prediksi", ggplot(rd, aes(prediksi, residual)) + geom_point(alpha = .5) +
         geom_hline(yintercept = 0, linetype = 2) + labs(title = "Residual versus nilai prediksi LMM", x = "Prediksi kadar asam urat", y = "Residual"))
  em_lmm <- emmeans::emmeans(lmm2, ~ waktu | kelompok, lmer.df = "kenward-roger")
  tampil("45_EMM_LMM", as.data.frame(em_lmm))

  set.seed(1)
  dat_miss <- dat_long
  indeks_hilang <- sample(which(dat_miss$waktu != "M0"), 30)
  dat_miss$asam_urat[indeks_hilang] <- NA_real_
  teks("Demonstrasi data hilang", "Sebanyak 30 pengukuran pascabaseline dihapus secara acak hanya pada salinan demonstrasi. Analisis utama tetap menggunakan seluruh data yang dilampirkan; demonstrasi ini mengikuti bagian LMM data hilang dalam materi.")
  lmm_miss <- lmerTest::lmer(asam_urat ~ kelompok * waktu + (1 + minggu | id), data = dat_miss,
                            REML = TRUE, control = kontrol, na.action = na.omit)
  opsional("46_LMM_Data_Hilang_KR", anova(lmm_miss, ddf = "Kenward-Roger"))
  tampil("47_Ringkasan_Data_Hilang", data.frame(pengukuran_hilang = sum(is.na(dat_miss$asam_urat)),
    peserta_terdampak = n_distinct(dat_miss$id[is.na(dat_miss$asam_urat)]),
    peserta_lengkap = n_distinct(dat_miss$id) - n_distinct(dat_miss$id[is.na(dat_miss$asam_urat)]),
    pengukuran_dianalisis_LMM = nobs(lmm_miss)))
  tampil("48_Informasi_Sesi", sessionInfo())
  write.csv(dat_wide, file.path(folder, "Data_Asam_Urat_Wide.csv"), row.names = FALSE)
  write.csv(dat_long, file.path(folder, "Data_Asam_Urat_Long.csv"), row.names = FALSE)
  write.csv(dat_miss, file.path(folder, "Data_Demonstrasi_Missing.csv"), row.names = FALSE)
  saveRDS(list(hasil = hasil, data_wide = dat_wide, data_long = dat_long,
    aov1 = aov1, aov2 = aov2, lmm1 = lmm1, lmm2 = lmm2, lmm_miss = lmm_miss),
    file.path(folder, "Objek_Analisis_Asam_Urat.rds"))
  laporan <- htmltools::tags$html(lang = "id",
    htmltools::tags$head(htmltools::tags$meta(charset = "UTF-8"),
      htmltools::tags$title("Analisis Kadar Asam Urat: 3 x 4"),
      htmltools::tags$style("body{font-family:Arial,sans-serif;max-width:1100px;margin:40px auto;padding:20px;line-height:1.6;color:#17342e}h1,h2{color:#0b6b4f}h2{border-bottom:1px solid #d9e4e0;padding-top:24px}pre{background:#f3f7f5;padding:16px;overflow:auto;font-size:13px}img{display:block;margin:15px auto}")),
    htmltools::tags$body(htmltools::tags$h1("Analisis Pengukuran Berulang Kadar Asam Urat: 3 x 4"), isi))
  htmltools::save_html(laporan, file.path(folder, "Laporan_Analisis_Asam_Urat.html"))
  cat("\nHasil analisis: ", normalizePath(folder), "\n", sep = "")
  invisible(list(hasil = hasil, grafik = grafik, data_wide = dat_wide,
                 data_long = dat_long, aov1 = aov1, aov2 = aov2,
                 lmm1 = lmm1, lmm2 = lmm2, lmm_miss = lmm_miss))
}

hasil_asam_urat <- analisis_asam_urat()
## Registered S3 method overwritten by 'lme4':
##   method           from
##   na.action.merMod car
## 
## Identitas
## Nama: Lusiana | NIM: 2611018017 | Mata Kuliah: Biostatistika Intermediete | Magister Kesehatan Masyarakat Universitas Mulawarman 
## 
## Desain
## 90 peserta; tiga kelompok; empat pengukuran berulang. Tanpa nilai hilang. Satuan kadar asam urat tidak dicantumkan dalam workbook. 
## 
## 01 Jumlah Peserta
##   kelompok  n
## 1  Kontrol 30
## 2     DASH 30
## 3  DASH+AF 30
## 
## 01a Usia
## # A tibble: 3 × 6
##   kelompok     n  mean    sd   min   max
##   <fct>    <int> <dbl> <dbl> <int> <int>
## 1 Kontrol     30  51.2  8.60    38    65
## 2 DASH        30  49.7  9.79    35    64
## 3 DASH+AF     30  49.1  8.07    36    64
## 
## 01b Jenis Kelamin
##   kelompok jk  n
## 1  Kontrol  L  9
## 2  Kontrol  P 21
## 3     DASH  L 19
## 4     DASH  P 11
## 5  DASH+AF  L 14
## 6  DASH+AF  P 16
## 
## Sumber data
## Analisis dihitung dari sheet Data Asam Urat. Sheet Ringkasan hanya berisi statistik agregat. Satuan pengukuran dan status data asli/simulasi tidak dicantumkan; interpretasi menggunakan skala numerik dalam workbook. 
## 
## 02 Data Wide
##     id kelompok usia jk AU_M0 AU_M4 AU_M8 AU_M12
## 1 P001  Kontrol   42  L   6.7   7.2   6.4    6.5
## 2 P002  Kontrol   43  L   7.0   6.3   7.0    6.8
## 3 P003  Kontrol   62  P   5.1   5.2   4.7    6.3
## 4 P004  Kontrol   40  P   6.6   6.4   6.0    7.0
## 5 P005  Kontrol   53  P   6.1   5.8   6.6    6.2
## 6 P006  Kontrol   42  L   7.1   6.6   6.9    6.5
## 
## 03 Data Long
## # A tibble: 12 × 7
##    id    kelompok  usia jk    waktu asam_urat minggu
##    <fct> <fct>    <int> <chr> <fct>     <dbl>  <dbl>
##  1 P001  Kontrol     42 L     M0          6.7      0
##  2 P001  Kontrol     42 L     M4          7.2      4
##  3 P001  Kontrol     42 L     M8          6.4      8
##  4 P001  Kontrol     42 L     M12         6.5     12
##  5 P002  Kontrol     43 L     M0          7        0
##  6 P002  Kontrol     43 L     M4          6.3      4
##  7 P002  Kontrol     43 L     M8          7        8
##  8 P002  Kontrol     43 L     M12         6.8     12
##  9 P003  Kontrol     62 P     M0          5.1      0
## 10 P003  Kontrol     62 P     M4          5.2      4
## 11 P003  Kontrol     62 P     M8          4.7      8
## 12 P003  Kontrol     62 P     M12         6.3     12
## 
## 04 Deskriptif
## # A tibble: 12 × 12
##    kelompok waktu minggu     n  mean    sd median   min   max    se lower upper
##    <fct>    <fct>  <dbl> <int> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 Kontrol  M0         0    30  6.78 1.07    6.7    4.6   8.9 0.194  6.38  7.18
##  2 Kontrol  M4         4    30  6.78 1.12    6.75   4.5   9.1 0.205  6.36  7.20
##  3 Kontrol  M8         8    30  6.64 1.25    6.6    3.6   9.2 0.228  6.17  7.11
##  4 Kontrol  M12       12    30  6.75 1.01    6.55   5.1   9.4 0.185  6.37  7.13
##  5 DASH     M0         0    30  6.97 1.00    6.95   5.3   9.2 0.183  6.59  7.34
##  6 DASH     M4         4    30  6.68 0.982   6.45   5.1   8.9 0.179  6.31  7.05
##  7 DASH     M8         8    30  6.45 1.01    6.3    4.6   8.7 0.184  6.08  6.83
##  8 DASH     M12       12    30  6.18 1.07    6.15   4.6   8.9 0.195  5.78  6.58
##  9 DASH+AF  M0         0    30  6.83 1.04    6.7    4.4   9.1 0.190  6.44  7.22
## 10 DASH+AF  M4         4    30  6.47 1.18    6.2    4     8.8 0.215  6.03  6.91
## 11 DASH+AF  M8         8    30  6.08 1.24    5.95   3.2   8.7 0.227  5.62  6.55
## 12 DASH+AF  M12       12    30  5.84 1.17    5.85   3.6   8.2 0.214  5.40  6.27
## 
## 05 Kovarians
##            AU_M0    AU_M4    AU_M8    AU_M12
## AU_M0  1.0548077 1.041194 1.104733 0.9831161
## AU_M4  1.0411935 1.193703 1.131793 1.0251386
## AU_M8  1.1047328 1.131793 1.394433 1.1479476
## AU_M12 0.9831161 1.025139 1.147948 1.2955506
## 
## 06 Korelasi
##            AU_M0     AU_M4     AU_M8    AU_M12
## AU_M0  1.0000000 0.9278904 0.9109022 0.8409903
## AU_M4  0.9278904 1.0000000 0.8772430 0.8243417
## AU_M8  0.9109022 0.8772430 1.0000000 0.8540750
## AU_M12 0.8409903 0.8243417 0.8540750 1.0000000
## 
## 07 Varians Selisih
##         pasangan   varians
## 1  AU_M0 - AU_M4 0.1661236
## 2  AU_M0 - AU_M8 0.2397753
## 3 AU_M0 - AU_M12 0.3841261
## 4  AU_M4 - AU_M8 0.3245506
## 5 AU_M4 - AU_M12 0.4389763
## 6 AU_M8 - AU_M12 0.3940886

## 
## 08 Outlier Satu Kelompok
## [1] waktu      id         kelompok   usia       jk         asam_urat  minggu     is.outlier is.extreme
## <0 rows> (or 0-length row.names)
## 
## 09 Shapiro Satu Kelompok
## # A tibble: 4 × 4
##   waktu variable  statistic     p
##   <fct> <chr>         <dbl> <dbl>
## 1 M0    asam_urat     0.986 0.956
## 2 M4    asam_urat     0.965 0.424
## 3 M8    asam_urat     0.973 0.612
## 4 M12   asam_urat     0.979 0.808

## 
## 10 ANOVA Rstatix Satu Kelompok
## ANOVA Table (type III tests)
## 
## $ANOVA
##   Effect DFn DFd      F        p p<.05   pes
## 1  waktu   3  87 45.869 7.15e-18     * 0.613
## 
## $`Mauchly's Test for Sphericity`
##   Effect     W     p p<.05
## 1  waktu 0.694 0.072      
## 
## $`Sphericity Corrections`
##   Effect   GGe      DF[GG]    p[GG] p[GG]<.05   HFe     DF[HF]    p[HF] p[HF]<.05
## 1  waktu 0.845 2.54, 73.54 1.84e-15         * 0.933 2.8, 81.18 7.88e-17         *
## 
## 
## 11 RM ANOVA
## Anova Table (Type 3 tests)
## 
## Response: asam_urat
##   Effect          df  MSE         F  ges  pes p.value
## 1  waktu 2.54, 73.54 0.15 45.87 *** .099 .613   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG 
## 
## 12 Sferisitas dan Koreksi RM
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##             Sum Sq num Df Error SS den Df F value    Pr(>F)    
## (Intercept) 4769.1      1  144.965     29 954.048 < 2.2e-16 ***
## waktu         17.1      3   10.816     87  45.869 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##       Test statistic  p-value
## waktu        0.69402 0.071917
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##        GG eps Pr(>F[GG])    
## waktu 0.84532  1.839e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##          HF eps   Pr(>F[HF])
## waktu 0.9330749 7.880193e-17
## 
## 13 Multivariat RM
## 
## Type III Repeated Measures MANOVA Tests: Pillai test statistic
##             Df test stat approx F num Df den Df    Pr(>F)    
## (Intercept)  1   0.97050   954.05      1     29 < 2.2e-16 ***
## waktu        1   0.85808    54.42      3     27 1.416e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 14 Eta Kuadrat RM
## # Effect Size for ANOVA (Type III)
## 
## Parameter | Eta2 (partial) |       95% CI
## -----------------------------------------
## waktu     |           0.61 | [0.50, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
## 15 EMM RM
##  waktu   emmean        SE df lower.CL upper.CL
##  M0    6.830000 0.1897457 29 6.441926 7.218074
##  M4    6.466667 0.2147082 29 6.027539 6.905794
##  M8    6.083333 0.2265221 29 5.620044 6.546623
##  M12   5.836667 0.2136429 29 5.399718 6.273615
## 
## Confidence level used: 0.95 
## 
## 16 Posthoc RM Bonferroni
##  contrast  estimate         SE df t.ratio p.value
##  M0 - M4  0.3633333 0.07038210 29   5.162 <0.0001
##  M0 - M8  0.7466667 0.07874494 29   9.482 <0.0001
##  M0 - M12 0.9933333 0.08800906 29  11.287 <0.0001
##  M4 - M8  0.3833333 0.10732734 29   3.572  0.0076
##  M4 - M12 0.6300000 0.10138693 29   6.214 <0.0001
##  M8 - M12 0.2466667 0.09501764 29   2.596  0.0879
## 
## P value adjustment: bonferroni method for 6 tests 
## 
## 17 RM vs Baseline Holm
##  contrast   estimate         SE df t.ratio p.value
##  M4 - M0  -0.3633333 0.07038210 29  -5.162 <0.0001
##  M8 - M0  -0.7466667 0.07874494 29  -9.482 <0.0001
##  M12 - M0 -0.9933333 0.08800906 29 -11.287 <0.0001
## 
## P value adjustment: holm method for 3 tests 
## 
## 18 Tren Polinomial RM
##  contrast   estimate        SE df t.ratio p.value
##  linear    -3.363333 0.2978653 29 -11.291 <0.0001
##  quadratic  0.116667 0.1058174 29   1.103  0.2793
##  cubic      0.156667 0.3223721 29   0.486  0.6306
## 
## 
## 19 Friedman
## # A tibble: 1 × 6
##   .y.           n statistic    df        p method       
## * <chr>     <int>     <dbl> <dbl>    <dbl> <chr>        
## 1 asam_urat    30      55.6     3 5.20e-12 Friedman test
## 
## 20 Kendall W
## # A tibble: 1 × 5
##   .y.           n effsize method    magnitude
## * <chr>     <int>   <dbl> <chr>     <ord>    
## 1 asam_urat    30   0.617 Kendall W large    
## 
## 21 Wilcoxon Berpasangan
## # A tibble: 6 × 9
##   .y.       group1 group2    n1    n2 statistic             p        p.adj p.adj.signif
## * <chr>     <chr>  <chr>  <int> <int>     <dbl>         <dbl>        <dbl> <chr>       
## 1 asam_urat M0     M4        30    30      413  0.0000558     0.000335     ***         
## 2 asam_urat M0     M8        30    30      462  0.00000000745 0.0000000447 ****        
## 3 asam_urat M0     M12       30    30      462  0.00000000931 0.0000000559 ****        
## 4 asam_urat M4     M8        30    30      390. 0.000587      0.00352      **          
## 5 asam_urat M4     M12       30    30      442. 0.00000114    0.00000686   ****        
## 6 asam_urat M8     M12       30    30      349  0.0147        0.0880       ns          
## 
## 22 Robust RM Trim20
## Call:
## WRS2::rmanova(y = d1$asam_urat, groups = d1$waktu, blocks = d1$id, 
##     tr = 0.2)
## 
## Test statistic: F = 23.6353 
## Degrees of freedom 1: 2.97 
## Degrees of freedom 2: 50.55 
## p-value: 0 
## 
## 
## 23 Outlier Mixed
## # A tibble: 10 × 9
##    kelompok waktu id     usia jk    asam_urat minggu is.outlier is.extreme
##    <fct>    <fct> <fct> <int> <chr>     <dbl>  <dbl> <lgl>      <lgl>     
##  1 Kontrol  M0    P013     63 L           8.9      0 TRUE       FALSE     
##  2 Kontrol  M8    P013     63 L           9.2      8 TRUE       FALSE     
##  3 Kontrol  M8    P014     50 P           3.6      8 TRUE       FALSE     
##  4 Kontrol  M12   P013     63 L           8.6     12 TRUE       FALSE     
##  5 Kontrol  M12   P020     41 L           9.2     12 TRUE       FALSE     
##  6 Kontrol  M12   P022     62 P           9.4     12 TRUE       TRUE      
##  7 Kontrol  M12   P029     41 L           8.3     12 TRUE       FALSE     
##  8 DASH     M4    P045     45 L           8.7      4 TRUE       FALSE     
##  9 DASH     M4    P046     57 L           8.9      4 TRUE       FALSE     
## 10 DASH     M4    P049     39 L           8.8      4 TRUE       FALSE     
## 
## 24 Shapiro Mixed
## # A tibble: 12 × 5
##    kelompok waktu variable  statistic       p
##    <fct>    <fct> <chr>         <dbl>   <dbl>
##  1 Kontrol  M0    asam_urat     0.960 0.309  
##  2 Kontrol  M4    asam_urat     0.980 0.825  
##  3 Kontrol  M8    asam_urat     0.969 0.524  
##  4 Kontrol  M12   asam_urat     0.896 0.00680
##  5 DASH     M0    asam_urat     0.973 0.624  
##  6 DASH     M4    asam_urat     0.929 0.0459 
##  7 DASH     M8    asam_urat     0.971 0.555  
##  8 DASH     M12   asam_urat     0.962 0.355  
##  9 DASH+AF  M0    asam_urat     0.986 0.956  
## 10 DASH+AF  M4    asam_urat     0.965 0.424  
## 11 DASH+AF  M8    asam_urat     0.973 0.612  
## 12 DASH+AF  M12   asam_urat     0.979 0.808

## 
## 25 Levene
## # A tibble: 4 × 5
##   waktu   df1   df2 statistic     p
##   <fct> <int> <int>     <dbl> <dbl>
## 1 M0        2    87   0.00953 0.991
## 2 M4        2    87   0.959   0.387
## 3 M8        2    87   0.505   0.605
## 4 M12       2    87   0.634   0.533
## 
## 26 Box M
## # A tibble: 1 × 4
##   statistic p.value parameter method                                             
##       <dbl>   <dbl>     <dbl> <chr>                                              
## 1      27.2   0.129        20 Box's M-test for Homogeneity of Covariance Matrices
## 
## 27 Mixed ANOVA
## Anova Table (Type 3 tests)
## 
## Response: asam_urat
##           Effect           df  MSE         F  ges  pes p.value
## 1       kelompok        2, 87 4.42      1.29 .026 .029    .280
## 2          waktu 2.42, 210.37 0.17 48.14 *** .044 .356   <.001
## 3 kelompok:waktu 4.84, 210.37 0.17 10.13 *** .019 .189   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG 
## 
## 28 Sferisitas dan Koreksi Mixed
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                 Sum Sq num Df Error SS den Df   F value    Pr(>F)    
## (Intercept)    15382.1      1   384.78     87 3477.9614 < 2.2e-16 ***
## kelompok          11.4      2   384.78     87    1.2903    0.2804    
## waktu             19.5      3    35.15    261   48.1420 < 2.2e-16 ***
## kelompok:waktu     8.2      6    35.15    261   10.1306 4.522e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic    p-value
## waktu                 0.57481 4.5869e-09
## kelompok:waktu        0.57481 4.5869e-09
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## waktu          0.80601  < 2.2e-16 ***
## kelompok:waktu 0.80601   1.62e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps   Pr(>F[HF])
## waktu          0.8306986 5.013127e-21
## kelompok:waktu 0.8306986 1.026115e-08
## 
## 29 Multivariat Mixed
## 
## Type III Repeated Measures MANOVA Tests: Pillai test statistic
##                Df test stat approx F num Df den Df    Pr(>F)    
## (Intercept)     1   0.97560   3478.0      1     87 < 2.2e-16 ***
## kelompok        2   0.02881      1.3      2     87    0.2804    
## waktu           1   0.76354     91.5      3     85 < 2.2e-16 ***
## kelompok:waktu  2   0.57739     11.6      6    172 6.387e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 30 Eta Kuadrat Mixed
## # Effect Size for ANOVA (Type III)
## 
## Parameter      | Eta2 (partial) |       95% CI
## ----------------------------------------------
## kelompok       |           0.03 | [0.00, 1.00]
## waktu          |           0.36 | [0.28, 1.00]
## kelompok:waktu |           0.19 | [0.11, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
## Warning: Panel(s) show a mixed within-between-design.
## Error bars do not allow comparisons across all means.
## Suppress error bars with: error = "none"

## 
## Interval grafik mixed ANOVA
## Interval within-subject pada grafik afex berbeda dari interval kepercayaan rerata biasa pada grafik profil deskriptif. 
## 
## 31 Efek Waktu per Kelompok
## kelompok = Kontrol:
##  model term df1 df2 F.ratio p.value
##  waktu        3  87   1.110  0.3494
## 
## kelompok = DASH:
##  model term df1 df2 F.ratio p.value
##  waktu        3  87  47.894 <0.0001
## 
## kelompok = DASH+AF:
##  model term df1 df2 F.ratio p.value
##  waktu        3  87  82.977 <0.0001
## 
## 
## 32 Efek Kelompok per Waktu
## waktu = M0:
##  model term df1 df2 F.ratio p.value
##  kelompok     2  87   0.261  0.7708
## 
## waktu = M4:
##  model term df1 df2 F.ratio p.value
##  kelompok     2  87   0.639  0.5305
## 
## waktu = M8:
##  model term df1 df2 F.ratio p.value
##  kelompok     2  87   1.756  0.1787
## 
## waktu = M12:
##  model term df1 df2 F.ratio p.value
##  kelompok     2  87   5.378  0.0063
## 
## 
## 33 EMM Waktu per Kelompok
## kelompok = Kontrol:
##  waktu   emmean        SE df lower.CL upper.CL
##  M0    6.780000 0.1890870 87 6.404169 7.155831
##  M4    6.780000 0.2002897 87 6.381903 7.178097
##  M8    6.640000 0.2137857 87 6.215078 7.064922
##  M12   6.746667 0.1982858 87 6.352552 7.140781
## 
## kelompok = DASH:
##  waktu   emmean        SE df lower.CL upper.CL
##  M0    6.966667 0.1890870 87 6.590836 7.342498
##  M4    6.680000 0.2002897 87 6.281903 7.078097
##  M8    6.453333 0.2137857 87 6.028411 6.878256
##  M12   6.176667 0.1982858 87 5.782552 6.570781
## 
## kelompok = DASH+AF:
##  waktu   emmean        SE df lower.CL upper.CL
##  M0    6.830000 0.1890870 87 6.454169 7.205831
##  M4    6.466667 0.2002897 87 6.068569 6.864764
##  M8    6.083333 0.2137857 87 5.658411 6.508256
##  M12   5.836667 0.1982858 87 5.442552 6.230781
## 
## Confidence level used: 0.95 
## 
## 34 Waktu vs Baseline Holm
## kelompok = Kontrol:
##  contrast   estimate         SE df t.ratio p.value
##  M4 - M0   0.0000000 0.06943762 87   0.000  1.0000
##  M8 - M0  -0.1400000 0.07761121 87  -1.804  0.2241
##  M12 - M0 -0.0333333 0.08494382 87  -0.392  1.0000
## 
## kelompok = DASH:
##  contrast   estimate         SE df t.ratio p.value
##  M4 - M0  -0.2866667 0.06943762 87  -4.128 <0.0001
##  M8 - M0  -0.5133333 0.07761121 87  -6.614 <0.0001
##  M12 - M0 -0.7900000 0.08494382 87  -9.300 <0.0001
## 
## kelompok = DASH+AF:
##  contrast   estimate         SE df t.ratio p.value
##  M4 - M0  -0.3633333 0.06943762 87  -5.233 <0.0001
##  M8 - M0  -0.7466667 0.07761121 87  -9.621 <0.0001
##  M12 - M0 -0.9933333 0.08494382 87 -11.694 <0.0001
## 
## P value adjustment: holm method for 3 tests 
## 
## 35 Antarkelompok Tukey
## waktu = M0:
##  contrast              estimate        SE df t.ratio p.value
##  Kontrol - DASH      -0.1866667 0.2674094 87  -0.698  0.7653
##  Kontrol - (DASH+AF) -0.0500000 0.2674094 87  -0.187  0.9809
##  DASH - (DASH+AF)     0.1366667 0.2674094 87   0.511  0.8662
## 
## waktu = M4:
##  contrast              estimate        SE df t.ratio p.value
##  Kontrol - DASH       0.1000000 0.2832524 87   0.353  0.9337
##  Kontrol - (DASH+AF)  0.3133333 0.2832524 87   1.106  0.5129
##  DASH - (DASH+AF)     0.2133333 0.2832524 87   0.753  0.7325
## 
## waktu = M8:
##  contrast              estimate        SE df t.ratio p.value
##  Kontrol - DASH       0.1866667 0.3023387 87   0.617  0.8110
##  Kontrol - (DASH+AF)  0.5566667 0.3023387 87   1.841  0.1624
##  DASH - (DASH+AF)     0.3700000 0.3023387 87   1.224  0.4424
## 
## waktu = M12:
##  contrast              estimate        SE df t.ratio p.value
##  Kontrol - DASH       0.5700000 0.2804184 87   2.033  0.1105
##  Kontrol - (DASH+AF)  0.9100000 0.2804184 87   3.245  0.0047
##  DASH - (DASH+AF)     0.3400000 0.2804184 87   1.212  0.4491
## 
## P value adjustment: tukey method for comparing a family of 3 estimates 
## 
## 36 Kontras Perbedaan Perubahan
##  waktu_custom kelompok_pairwise    estimate        SE df t.ratio p.value
##  M12-M0       Kontrol - DASH      0.7566667 0.1201287 87   6.299 <0.0001
##  M12-M0       Kontrol - (DASH+AF) 0.9600000 0.1201287 87   7.991 <0.0001
##  M12-M0       DASH - (DASH+AF)    0.2033333 0.1201287 87   1.693  0.0941
## 
## P value adjustment: holm method for 3 tests 
## 
## 37 Kontras Tren Linear
##   waktu_poly   kelompok_pairwise  estimate        SE df  t.ratio      p.value       p.holm
## 1     linear      Kontrol - DASH 2.3566667 0.4004321 87 5.885309 7.260002e-08 1.452000e-07
## 4     linear Kontrol - (DASH+AF) 3.1233333 0.4004321 87 7.799908 1.259894e-11 3.779683e-11
## 7     linear    DASH - (DASH+AF) 0.7666667 0.4004321 87 1.914599 5.883019e-02 5.883019e-02
## 
## Koreksi perbandingan
## Holm untuk waktu versus baseline berlaku dalam tiap kelompok; Tukey berlaku dalam tiap waktu. Kontras perbedaan perubahan dan tren linear memakai Holm pada masing-masing keluarga kontras. 
## 
## 38 Tabel ANOVA GG
##           Effect           df  MSE         F  pes p.value
## 1       kelompok        2, 87 4.42      1.29 .029    .280
## 2          waktu 2.42, 210.37 0.17 48.14 *** .356   <.001
## 3 kelompok:waktu 4.84, 210.37 0.17 10.13 *** .189   <.001
## 
## Interpretasi interaksi
## Mixed ANOVA dengan koreksi Greenhouse-Geisser menghasilkan interaksi kelompok x waktu: F(4.84, 210.37) = 10.131; p < 0,001. Pola perubahan kadar asam urat berbeda secara statistik antar kelompok. Arah dan besarnya perbedaan dinilai dari rerata serta kontras perubahan M12-M0.
## boundary (singular) fit: see help('isSingular')
## 
## 39 LMM Intersep
## Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
## Formula: asam_urat ~ kelompok * waktu + (1 | id)
##    Data: dat_long
## Control: kontrol
## 
## REML criterion at convergence: 651.6
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.70490 -0.54912 -0.01823  0.52179  2.99938 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  id       (Intercept) 1.0720   1.035   
##  Residual             0.1347   0.367   
## Number of obs: 360, groups:  id, 90
## 
## Fixed effects:
##                    Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)        6.536667   0.110839  86.999996  58.974  < 2e-16 ***
## kelompok1          0.200000   0.156751  86.999996   1.276  0.20538    
## kelompok2          0.032500   0.156751  86.999996   0.207  0.83623    
## waktu1             0.322222   0.033500 261.000001   9.619  < 2e-16 ***
## waktu2             0.105556   0.033500 261.000001   3.151  0.00182 ** 
## waktu3            -0.144444   0.033500 261.000001  -4.312 2.30e-05 ***
## kelompok1:waktu1  -0.278889   0.047376 261.000001  -5.887 1.21e-08 ***
## kelompok2:waktu1   0.075278   0.047376 261.000001   1.589  0.11329    
## kelompok1:waktu2  -0.062222   0.047376 261.000001  -1.313  0.19021    
## kelompok2:waktu2   0.005278   0.047376 261.000001   0.111  0.91138    
## kelompok1:waktu3   0.047778   0.047376 261.000001   1.008  0.31416    
## kelompok2:waktu3   0.028611   0.047376 261.000001   0.604  0.54643    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) klmpk1 klmpk2 waktu1 waktu2 waktu3 klm1:1 klm2:1 klm1:2 klm2:2 klm1:3
## kelompok1    0.000                                                                      
## kelompok2    0.000 -0.500                                                               
## waktu1       0.000  0.000  0.000                                                        
## waktu2       0.000  0.000  0.000 -0.333                                                 
## waktu3       0.000  0.000  0.000 -0.333 -0.333                                          
## klmpk1:wkt1  0.000  0.000  0.000  0.000  0.000  0.000                                   
## klmpk2:wkt1  0.000  0.000  0.000  0.000  0.000  0.000 -0.500                            
## klmpk1:wkt2  0.000  0.000  0.000  0.000  0.000  0.000 -0.333  0.167                     
## klmpk2:wkt2  0.000  0.000  0.000  0.000  0.000  0.000  0.167 -0.333 -0.500              
## klmpk1:wkt3  0.000  0.000  0.000  0.000  0.000  0.000 -0.333  0.167 -0.333  0.167       
## klmpk2:wkt3  0.000  0.000  0.000  0.000  0.000  0.000  0.167 -0.333  0.167 -0.333 -0.500
## 
## 40 LMM Intersep Slope
## Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
## Formula: asam_urat ~ kelompok * waktu + (1 + minggu | id)
##    Data: dat_long
## Control: kontrol
## 
## REML criterion at convergence: 651.4
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.69257 -0.55505 -0.03363  0.51123  3.05558 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. Corr 
##  id       (Intercept) 1.048e+00 1.023765      
##           minggu      3.757e-06 0.001938 1.00 
##  Residual             1.346e-01 0.366839      
## Number of obs: 360, groups:  id, 90
## 
## Fixed effects:
##                    Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)        6.536667   0.110839  86.999934  58.974  < 2e-16 ***
## kelompok1          0.200000   0.156751  86.999935   1.276  0.20538    
## kelompok2          0.032500   0.156751  86.999935   0.207  0.83623    
## waktu1             0.322222   0.033510 260.429159   9.616  < 2e-16 ***
## waktu2             0.105556   0.033490 261.064188   3.152  0.00181 ** 
## waktu3            -0.144444   0.033490 261.064188  -4.313 2.29e-05 ***
## kelompok1:waktu1  -0.278889   0.047390 260.429159  -5.885 1.22e-08 ***
## kelompok2:waktu1   0.075278   0.047390 260.429159   1.588  0.11340    
## kelompok1:waktu2  -0.062222   0.047362 261.064188  -1.314  0.19008    
## kelompok2:waktu2   0.005278   0.047362 261.064188   0.111  0.91136    
## kelompok1:waktu3   0.047778   0.047362 261.064188   1.009  0.31402    
## kelompok2:waktu3   0.028611   0.047362 261.064188   0.604  0.54631    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) klmpk1 klmpk2 waktu1 waktu2 waktu3 klm1:1 klm2:1 klm1:2 klm2:2 klm1:3
## kelompok1    0.000                                                                      
## kelompok2    0.000 -0.500                                                               
## waktu1      -0.036  0.000  0.000                                                        
## waktu2      -0.012  0.000  0.000 -0.333                                                 
## waktu3       0.012  0.000  0.000 -0.334 -0.333                                          
## klmpk1:wkt1  0.000 -0.036  0.018  0.000  0.000  0.000                                   
## klmpk2:wkt1  0.000  0.018 -0.036  0.000  0.000  0.000 -0.500                            
## klmpk1:wkt2  0.000 -0.012  0.006  0.000  0.000  0.000 -0.333  0.166                     
## klmpk2:wkt2  0.000  0.006 -0.012  0.000  0.000  0.000  0.166 -0.333 -0.500              
## klmpk1:wkt3  0.000  0.012 -0.006  0.000  0.000  0.000 -0.334  0.167 -0.333  0.167       
## klmpk2:wkt3  0.000 -0.006  0.012  0.000  0.000  0.000  0.167 -0.334  0.167 -0.333 -0.500
## optimizer (bobyqa) convergence code: 0 (OK)
## boundary (singular) fit: see help('isSingular')
## 
## 
## 41 Perbandingan LMM REML
## Data: dat_long
## Models:
## lmm1: asam_urat ~ kelompok * waktu + (1 | id)
## lmm2: asam_urat ~ kelompok * waktu + (1 + minggu | id)
##      npar    AIC    BIC  logLik -2*log(L) Chisq Df Pr(>Chisq)
## lmm1   14 679.57 733.97 -325.78    651.57                    
## lmm2   16 683.38 745.55 -325.69    651.38 0.189  2     0.9098
## 
## Perbandingan model
## Kedua model mempunyai fixed effects yang sama. Perbandingan REML mengikuti materi; nilai p likelihood-ratio bersifat pendekatan karena varians acak diuji pada batas ruang parameter. 
## 
## 42 Singularitas LMM
##                model singular
## 1           Intersep    FALSE
## 2 Intersep dan slope     TRUE
## 
## 43 LMM Kenward Roger
## Type III Analysis of Variance Table with Kenward-Roger's method
##                 Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
## kelompok        0.3473  0.1736     2  87.00  1.2903    0.2804    
## waktu          19.4072  6.4691     3 185.37 47.8514 < 2.2e-16 ***
## kelompok:waktu  8.1681  1.3614     6 206.40 10.0587 9.554e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 44 ICC
## # Intraclass Correlation Coefficient
## 
##     Adjusted ICC: 0.888
##   Unadjusted ICC: 0.815

## 
## 45 EMM LMM
## kelompok = Kontrol:
##  waktu   emmean        SE     df lower.CL upper.CL
##  M0    6.780000 0.1985502  93.20 6.385730 7.174270
##  M4    6.780000 0.1998832 102.10 6.383537 7.176463
##  M8    6.640000 0.2012174 101.88 6.240881 7.039119
##  M12   6.746667 0.2025527  92.95 6.344434 7.148899
## 
## kelompok = DASH:
##  waktu   emmean        SE     df lower.CL upper.CL
##  M0    6.966667 0.1985502  93.20 6.572397 7.360937
##  M4    6.680000 0.1998832 102.10 6.283537 7.076463
##  M8    6.453333 0.2012174 101.88 6.054214 6.852453
##  M12   6.176667 0.2025527  92.95 5.774434 6.578899
## 
## kelompok = DASH+AF:
##  waktu   emmean        SE     df lower.CL upper.CL
##  M0    6.830000 0.1985502  93.20 6.435730 7.224270
##  M4    6.466667 0.1998832 102.10 6.070204 6.863129
##  M8    6.083333 0.2012174 101.88 5.684214 6.482453
##  M12   5.836667 0.2025527  92.95 5.434434 6.238899
## 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## 
## Demonstrasi data hilang
## Sebanyak 30 pengukuran pascabaseline dihapus secara acak hanya pada salinan demonstrasi. Analisis utama tetap menggunakan seluruh data yang dilampirkan; demonstrasi ini mengikuti bagian LMM data hilang dalam materi.
## boundary (singular) fit: see help('isSingular')
## 
## 46 LMM Data Hilang KR
## Type III Analysis of Variance Table with Kenward-Roger's method
##                 Sum Sq Mean Sq NumDF   DenDF F value    Pr(>F)    
## kelompok        0.3146  0.1573     2  87.001  1.2176    0.3009    
## waktu          18.4655  6.1552     3 167.832 47.4175 < 2.2e-16 ***
## kelompok:waktu  7.0931  1.1822     6 185.520  9.0966 1.007e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 47 Ringkasan Data Hilang
##   pengukuran_hilang peserta_terdampak peserta_lengkap pengukuran_dianalisis_LMM
## 1                30                25              65                       330
## 
## 48 Informasi Sesi
## R version 4.6.1 (2026-06-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=English_Indonesia.utf8  LC_CTYPE=English_Indonesia.utf8    LC_MONETARY=English_Indonesia.utf8
## [4] LC_NUMERIC=C                       LC_TIME=English_Indonesia.utf8    
## 
## time zone: Asia/Makassar
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] ggplot2_4.0.3 tidyr_1.3.2   dplyr_1.2.1  
## 
## loaded via a namespace (and not attached):
##  [1] gtable_0.3.6        xfun_0.60           bslib_0.12.0        bayestestR_0.19.0   insight_1.5.4      
##  [6] rstatix_1.1.0       lattice_0.22-9      numDeriv_2016.8-1.1 vctrs_0.7.3         tools_4.6.1        
## [11] Rdpack_2.6.6        generics_0.1.4      pbkrtest_0.5.5      datawizard_1.4.0    parallel_4.6.1     
## [16] tibble_3.3.1        pkgconfig_2.0.3     Matrix_1.7-5        WRS2_1.1-7          RColorBrewer_1.1-3 
## [21] S7_0.2.2            afex_1.5-1          lifecycle_1.0.5     compiler_4.6.1      farver_2.1.2       
## [26] stringr_1.6.0       lmerTest_3.2-1      carData_3.0-6       htmltools_0.5.9     sass_0.4.10        
## [31] yaml_2.3.12         Formula_1.2-6       ggpubr_1.0.0        pillar_1.11.1       car_3.1-5          
## [36] nloptr_2.2.1        jquerylib_0.1.4     MASS_7.3-65         cachem_1.1.0        reformulas_0.4.4   
## [41] boot_1.3-32         abind_1.4-8         nlme_3.1-169        tidyselect_1.2.1    digest_0.6.39      
## [46] performance_0.18.2  mvtnorm_1.4-2       stringi_1.8.9       reshape2_1.4.5      purrr_1.2.2        
## [51] labeling_0.4.3      splines_4.6.1       fastmap_1.2.0       grid_4.6.1          cli_3.6.6          
## [56] magrittr_2.0.5      base64enc_0.1-6     utf8_1.2.6          broom_1.0.13        withr_3.0.3        
## [61] scales_1.4.0        backports_1.5.1     estimability_2.0.0  rmarkdown_2.32      emmeans_2.0.4      
## [66] lme4_2.0-6          ggsignif_0.6.4      evaluate_1.0.5      knitr_1.52          parameters_0.29.3  
## [71] rbibutils_2.4.1     rlang_1.3.0         Rcpp_1.1.2          glue_1.8.1          reshape_0.8.10     
## [76] rstudioapi_0.19.0   minqa_1.2.8         jsonlite_2.0.0      effectsize_1.0.3    R6_2.6.1           
## [81] plyr_1.8.9         
## 
## Hasil analisis: D:\PELAJARAN KULIAH S2\New folder\Hasil_Analisis_Asam_Urat