library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.3     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rstatix)
## 
## Attaching package: 'rstatix'
## 
## The following object is masked from 'package:stats':
## 
##     filter
dat_wide <- read.csv("/Volumes/DATA NAZMY/MKM/Rstudio/Uji Anova/data_tds_hipertensi_rstudio.csv")
head(dat_wide)
##     id kelompok usia jk TDS_M0 TDS_M4 TDS_M8 TDS_M12
## 1 P001  Kontrol   47  P  144.9  140.8  140.8   142.3
## 2 P002  Kontrol   55  P  150.4  148.3  149.8   149.2
## 3 P003  Kontrol   41  P  158.4  154.7  154.3   165.1
## 4 P004  Kontrol   48  P  139.3  146.4  140.0   135.0
## 5 P005  Kontrol   42  L  151.4  154.8  149.5   146.2
## 6 P006  Kontrol   48  P  138.7  146.7  143.6   143.2
str(dat_wide)
## 'data.frame':    90 obs. of  8 variables:
##  $ id      : chr  "P001" "P002" "P003" "P004" ...
##  $ kelompok: chr  "Kontrol" "Kontrol" "Kontrol" "Kontrol" ...
##  $ usia    : int  47 55 41 48 42 48 39 40 46 55 ...
##  $ jk      : chr  "P" "P" "P" "P" ...
##  $ TDS_M0  : num  145 150 158 139 151 ...
##  $ TDS_M4  : num  141 148 155 146 155 ...
##  $ TDS_M8  : num  141 150 154 140 150 ...
##  $ TDS_M12 : num  142 149 165 135 146 ...
table(dat_wide$kelompok)
## 
##    DASH DASH+AF Kontrol 
##      30      30      30
dat_long <- dat_wide %>%
  pivot_longer(
    cols = c(TDS_M0, TDS_M4, TDS_M8, TDS_M12),
    names_to = "waktu",
    values_to = "tds"
  ) %>%
  mutate(
    id = factor(id),
    kelompok = factor(
      kelompok,
      levels = c("Kontrol", "DASH", "DASH+AF")
    ),
    waktu = factor(
      waktu,
      levels = c("TDS_M0", "TDS_M4", "TDS_M8", "TDS_M12"),
      labels = c("M0", "M4", "M8", "M12")
    )
  )
head(dat_long)
## # A tibble: 6 × 6
##   id    kelompok  usia jk    waktu   tds
##   <fct> <fct>    <int> <chr> <fct> <dbl>
## 1 P001  Kontrol     47 P     M0     145.
## 2 P001  Kontrol     47 P     M4     141.
## 3 P001  Kontrol     47 P     M8     141.
## 4 P001  Kontrol     47 P     M12    142.
## 5 P002  Kontrol     55 P     M0     150.
## 6 P002  Kontrol     55 P     M4     148.
nrow(dat_long)
## [1] 360
table(dat_long$kelompok, dat_long$waktu)
##          
##           M0 M4 M8 M12
##   Kontrol 30 30 30  30
##   DASH    30 30 30  30
##   DASH+AF 30 30 30  30
dat_long %>%
  group_by(kelompok, waktu) %>%
  summarise(
    jumlah = n(),
    rerata_tds = mean(tds),
    sd_tds = sd(tds),
    .groups = "drop"
  )
## # A tibble: 12 × 5
##    kelompok waktu jumlah rerata_tds sd_tds
##    <fct>    <fct>  <int>      <dbl>  <dbl>
##  1 Kontrol  M0        30       155.  10.5 
##  2 Kontrol  M4        30       155.  10.9 
##  3 Kontrol  M8        30       152.   9.27
##  4 Kontrol  M12       30       152.  10.2 
##  5 DASH     M0        30       156.   9.79
##  6 DASH     M4        30       151.   9.12
##  7 DASH     M8        30       148.   9.08
##  8 DASH     M12       30       146.   9.13
##  9 DASH+AF  M0        30       151.   7.54
## 10 DASH+AF  M4        30       145.   9.25
## 11 DASH+AF  M8        30       139.   8.78
## 12 DASH+AF  M12       30       138.   9.62
hasil_anova <- anova_test(
  data = dat_long,
  dv = tds,
  wid = id,
  between = kelompok,
  within = waktu
)

hasil_anova
## ANOVA Table (type II tests)
## 
## $ANOVA
##           Effect DFn DFd      F        p p<.05   ges
## 1       kelompok   2  87  9.935 1.30e-04     * 0.166
## 2          waktu   3 261 90.508 3.56e-40     * 0.116
## 3 kelompok:waktu   6 261  9.964 6.61e-10     * 0.028
## 
## $`Mauchly's Test for Sphericity`
##           Effect     W     p p<.05
## 1          waktu 0.962 0.645      
## 2 kelompok:waktu 0.962 0.645      
## 
## $`Sphericity Corrections`
##           Effect   GGe       DF[GG]    p[GG] p[GG]<.05   HFe      DF[HF]
## 1          waktu 0.974 2.92, 254.12 3.46e-39         * 1.011 3.03, 263.9
## 2 kelompok:waktu 0.974 5.84, 254.12 1.06e-09         * 1.011 6.07, 263.9
##      p[HF] p[HF]<.05
## 1 3.56e-40         *
## 2 6.61e-10         *
tabel_anova <- get_anova_table(
  hasil_anova,
  correction = "auto"
)

tabel_anova
## ANOVA Table (type II tests)
## 
##           Effect DFn DFd      F        p p<.05   ges
## 1       kelompok   2  87  9.935 1.30e-04     * 0.166
## 2          waktu   3 261 90.508 3.56e-40     * 0.116
## 3 kelompok:waktu   6 261  9.964 6.61e-10     * 0.028
uji_waktu <- dat_long %>%
  arrange(kelompok, id, waktu) %>%
  group_by(kelompok) %>%
  pairwise_t_test(
    tds ~ waktu,
    paired = TRUE,
    p.adjust.method = "bonferroni"
  )

uji_waktu
## # A tibble: 18 × 11
##    kelompok .y.   group1 group2    n1    n2 statistic    df        p    p.adj
##  * <fct>    <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl>    <dbl>    <dbl>
##  1 Kontrol  tds   M0     M4        30    30    0.0624    29 9.51e- 1 1   e+ 0
##  2 Kontrol  tds   M0     M8        30    30    2.97      29 5.90e- 3 3.54e- 2
##  3 Kontrol  tds   M0     M12       30    30    3.02      29 5.23e- 3 3.14e- 2
##  4 Kontrol  tds   M4     M8        30    30    3.08      29 4.53e- 3 2.72e- 2
##  5 Kontrol  tds   M4     M12       30    30    3.11      29 4.16e- 3 2.50e- 2
##  6 Kontrol  tds   M8     M12       30    30    0.177     29 8.60e- 1 1   e+ 0
##  7 DASH     tds   M0     M4        30    30    4.41      29 1.31e- 4 7.84e- 4
##  8 DASH     tds   M0     M8        30    30    7.46      29 3.18e- 8 1.91e- 7
##  9 DASH     tds   M0     M12       30    30    8.09      29 6.42e- 9 3.85e- 8
## 10 DASH     tds   M4     M8        30    30    2.67      29 1.23e- 2 7.37e- 2
## 11 DASH     tds   M4     M12       30    30    4.28      29 1.84e- 4 1.11e- 3
## 12 DASH     tds   M8     M12       30    30    1.61      29 1.19e- 1 7.15e- 1
## 13 DASH+AF  tds   M0     M4        30    30    7.30      29 4.80e- 8 2.88e- 7
## 14 DASH+AF  tds   M0     M8        30    30   13.8       29 2.73e-14 1.64e-13
## 15 DASH+AF  tds   M0     M12       30    30   13.0       29 1.29e-13 7.71e-13
## 16 DASH+AF  tds   M4     M8        30    30    5.70      29 3.68e- 6 2.21e- 5
## 17 DASH+AF  tds   M4     M12       30    30    5.94      29 1.86e- 6 1.12e- 5
## 18 DASH+AF  tds   M8     M12       30    30    0.894     29 3.78e- 1 1   e+ 0
## # ℹ 1 more variable: p.adj.signif <chr>
uji_kelompok <- dat_long %>%
  group_by(waktu) %>%
  pairwise_t_test(
    tds ~ kelompok,
    paired = FALSE,
    p.adjust.method = "bonferroni"
  )

uji_kelompok
## # A tibble: 12 × 10
##    waktu .y.   group1  group2     n1    n2       p p.signif   p.adj p.adj.signif
##  * <fct> <chr> <chr>   <chr>   <int> <int>   <dbl> <chr>      <dbl> <chr>       
##  1 M0    tds   Kontrol DASH       30    30 6.85e-1 ns       1   e+0 ns          
##  2 M0    tds   Kontrol DASH+AF    30    30 1.20e-1 ns       3.61e-1 ns          
##  3 M0    tds   DASH    DASH+AF    30    30 5.14e-2 ns       1.54e-1 ns          
##  4 M4    tds   Kontrol DASH       30    30 1.04e-1 ns       3.12e-1 ns          
##  5 M4    tds   Kontrol DASH+AF    30    30 1.49e-4 ***      4.47e-4 ***         
##  6 M4    tds   DASH    DASH+AF    30    30 2.25e-2 *        6.74e-2 ns          
##  7 M8    tds   Kontrol DASH       30    30 9.54e-2 ns       2.86e-1 ns          
##  8 M8    tds   Kontrol DASH+AF    30    30 5.64e-7 ****     1.69e-6 ****        
##  9 M8    tds   DASH    DASH+AF    30    30 3.56e-4 ***      1.07e-3 **          
## 10 M12   tds   Kontrol DASH       30    30 3.88e-2 *        1.16e-1 ns          
## 11 M12   tds   Kontrol DASH+AF    30    30 6.65e-7 ****     1.99e-6 ****        
## 12 M12   tds   DASH    DASH+AF    30    30 1.56e-3 **       4.69e-3 **
dat_long %>%
  group_by(kelompok, waktu) %>%
  summarise(rerata = mean(tds), .groups = "drop") %>%
  ggplot(
    aes(x = waktu, y = rerata, color = kelompok, group = kelompok)
  ) +
  geom_line(linewidth = 1) +
  geom_point(size = 3) +
  labs(
    title = "Perubahan Tekanan Darah Sistolik",
    x = "Waktu pengukuran",
    y = "Rerata TDS (mmHg)",
    color = "Kelompok"
  ) +
  theme_minimal()

# Nilai ekstrem
dat_long %>%
  group_by(kelompok, waktu) %>%
  identify_outliers(tds)
## # A tibble: 13 × 8
##    kelompok waktu id     usia jk      tds is.outlier is.extreme
##    <fct>    <fct> <fct> <int> <chr> <dbl> <lgl>      <lgl>     
##  1 Kontrol  M0    P010     55 P      176. TRUE       FALSE     
##  2 Kontrol  M0    P012     63 L      173. TRUE       FALSE     
##  3 Kontrol  M0    P024     35 L      174. TRUE       FALSE     
##  4 Kontrol  M0    P026     36 P      181. TRUE       FALSE     
##  5 Kontrol  M4    P010     55 P      178. TRUE       FALSE     
##  6 Kontrol  M4    P024     35 L      183. TRUE       FALSE     
##  7 Kontrol  M4    P026     36 P      182  TRUE       FALSE     
##  8 Kontrol  M8    P024     35 L      178. TRUE       FALSE     
##  9 Kontrol  M8    P026     36 P      172. TRUE       FALSE     
## 10 Kontrol  M12   P024     35 L      182  TRUE       FALSE     
## 11 DASH     M0    P051     59 P      135  TRUE       FALSE     
## 12 DASH     M0    P054     35 P      134  TRUE       FALSE     
## 13 DASH+AF  M4    P064     40 P      123. TRUE       FALSE
# Pemeriksaan awal distribusi
dat_long %>%
  group_by(kelompok, waktu) %>%
  shapiro_test(tds)
## # A tibble: 12 × 5
##    kelompok waktu variable statistic        p
##    <fct>    <fct> <chr>        <dbl>    <dbl>
##  1 Kontrol  M0    tds          0.925 0.0366  
##  2 Kontrol  M4    tds          0.853 0.000701
##  3 Kontrol  M8    tds          0.931 0.0523  
##  4 Kontrol  M12   tds          0.922 0.0308  
##  5 DASH     M0    tds          0.953 0.207   
##  6 DASH     M4    tds          0.972 0.583   
##  7 DASH     M8    tds          0.924 0.0332  
##  8 DASH     M12   tds          0.973 0.619   
##  9 DASH+AF  M0    tds          0.948 0.152   
## 10 DASH+AF  M4    tds          0.973 0.638   
## 11 DASH+AF  M8    tds          0.961 0.326   
## 12 DASH+AF  M12   tds          0.983 0.897
# Kesamaan varians antarkelompok
dat_long %>%
  group_by(waktu) %>%
  levene_test(tds ~ kelompok)
## # A tibble: 4 × 5
##   waktu   df1   df2 statistic     p
##   <fct> <int> <int>     <dbl> <dbl>
## 1 M0        2    87    0.932  0.398
## 2 M4        2    87    0.118  0.889
## 3 M8        2    87    0.0920 0.912
## 4 M12       2    87    0.0805 0.923
# Rincian ANOVA, termasuk pemeriksaan sferisitas
hasil_anova
## ANOVA Table (type II tests)
## 
## $ANOVA
##           Effect DFn DFd      F        p p<.05   ges
## 1       kelompok   2  87  9.935 1.30e-04     * 0.166
## 2          waktu   3 261 90.508 3.56e-40     * 0.116
## 3 kelompok:waktu   6 261  9.964 6.61e-10     * 0.028
## 
## $`Mauchly's Test for Sphericity`
##           Effect     W     p p<.05
## 1          waktu 0.962 0.645      
## 2 kelompok:waktu 0.962 0.645      
## 
## $`Sphericity Corrections`
##           Effect   GGe       DF[GG]    p[GG] p[GG]<.05   HFe      DF[HF]
## 1          waktu 0.974 2.92, 254.12 3.46e-39         * 1.011 3.03, 263.9
## 2 kelompok:waktu 0.974 5.84, 254.12 1.06e-09         * 1.011 6.07, 263.9
##      p[HF] p[HF]<.05
## 1 3.56e-40         *
## 2 6.61e-10         *
capture.output(
  {
    cat("=== STRUKTUR DATA ===\n")
    print(table(dat_long$kelompok, dat_long$waktu))

    cat("\n=== PEMERIKSAAN ASUMSI DAN ANOVA ===\n")
    print(hasil_anova)

    cat("\n=== TABEL MIXED ANOVA ===\n")
    print(tabel_anova)

    cat("\n=== UJI LANJUT ANTARWAKTU ===\n")
    print(uji_waktu)

    cat("\n=== UJI LANJUT ANTARKELOMPOK ===\n")
    print(uji_kelompok)

    cat("\n=== INFORMASI R DAN PAKET ===\n")
    print(sessionInfo())
  },
  file = "Lampiran_Output_R.txt"
)