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"
)