Deneysel çalışmalar yaygın olarak her bir grupta 30’un altında kişi sayısı olacak şekilde uygulanırlar. Örneğin bir ilacın verildiği ve verilmediği iki grupta 15’er kişi olabilir. Başka bir örnek verirsek bir eğitimi alan ve almayan gruplarda 18’er kişi olabilir.
Gruplardaki kişi sayılarının küçük olduğu ve tekrarlı ölçümün bulunduğu durumlarda ANOVA’nın varsayımlarını karşılamak çoğu kez mümkün olmaz. Bu tür durumlarda bir dağılım şartı bulunmayan non-parametrik testlerden birisi olan Brunner ve arkadaşlarının (2002) geliştirdiği f1-ld-f1 desenine uygun test uygulanabilir.
Bu test bir değişkenin farklı gruplarda birden çok defa ölçüldüğü durumlarda kullanılabilecek olan ve sıra ortalamalarını karşılaştıran bir testtir.
Bunu tekrarlamakta yarar var çünkü bu test geleneksel olarak kullandığımız ortalamaları karşılaştırmaz. Karşılaştırdığı şey puanlar sıraya dizildiğinde bu sıralamaların ortalamasının aynı kalıp kalmadığıdır. Şöyle örneklendirebiliriz:
Ölçüm | ||
Grup | Öntest | Sontest |
1 (Deney) | 17 | 32 |
1 (Deney) | 18 | 30 |
1 (Deney) | 20 | 29 |
2 (Kontrol) | 15 | 22 |
2 (Kontrol) | 21 | 23 |
2 (Kontrol) | 19 | 22 |
Yukarıdaki tabloda deney ve kontrol gruplarındaki kişilerin öntest ve sontest puanları bulunuyor. Şimdi bunları sıralama düzeyine dönüştürelim. Bu işlemi yaparken en küçük değere 1 vereceğiz, en yüksek değere doğru sırasıyla 2,3,4 şeklinde sıralandıracağız.
Ölçüm | ||
Grup | Öntest | Sontest |
1 (Deney) | 2 | 12 |
1 (Deney) | 3 | 11 |
1 (Deney) | 5 | 9,5 |
2 (Kontrol) | 1 | 7,5 |
2 (Kontrol) | 6 | 9,5 |
2 (Kontrol) | 4 | 7,5 |
Görüleceği gibi deney grubundaki bireyler ikincilikten onikinciliğe, üçüncülükten onbirinciliğe yükselirken (evet yükselmek, sıralamanın mantığı gereği puanı artmış anlamında yükselmek) kontrol grubu birincilikten yedibuçukunculuğa, altıncılıktan dokuzbuçukunculuğa yükselmiştir. İşte bu iki grubun artışları anlamlı mıdır değil midir? Bu sorunun cevabını Brunner ve arkadaşlarının geliştirdiği test ile bulabiliriz.
Bunu yapabilmek için verilerinin aşağıdaki formatta girili olması gerekmektedir:
grup | birey | olcum | puan |
1 | 1 | 1 | 45 |
1 | 1 | 2 | 36 |
1 | 2 | 1 | 27 |
1 | 2 | 2 | 48 |
2 | 3 | 1 | 56 |
2 | 3 | 2 | 28 |
2 | 4 | 1 | 34 |
2 | 4 | 2 | 39 |
Henüz bu verileri R ile analiz etmekten başka bir yol bulunmuyor. O nedenle veri dosyasını RStudio veya Positron programına aktararak öyle devam edebilirsiniz.
Ardından analizi yapacak olan kodları aşağıdaki gibi kullanabilirsiniz.
install.packages("nparLD")
library(nparLD)
data(veri_dosyasi_adi)
attach(veri_dosyasi_adi)
sonuc<-f1.ld.f1(y=puan, time=olcum, group=grup, subject=birey)
Analiz sonuçlarını görmek için
sonuc$ANOVA.test
yazmak yeterlidir. Aşağıdaki gibi bir çıktı karşımıza çıkacaktır:
Statistic df p-value
olcum 2.352854 1.968147 0.091
grup 21.389142 2.729147 0.000
grup:olcum 3.113632 5.346834 0.006
Yukarıda grup:olcum kısmı grupların öntestten sonteste farklı ilerleme gösterip göstermediğini analiz eden kısımdır. Buradaki p değerinin 0.05’ten küçük olması etkileşimin anlamlı olduğunu göstermektedir. Gruplardan ikisinin de ön testten son teste aynı oranda değişim gösterdiğini iddia eden sıfır hipotezini reddetmek için önemli bir bilgi edinilmiş demektir.
Grupların hangisinin daha iyi ilerleme gösterdiğini görebilmek için iki grup varsa betimsel istatistiklere bakmak yeterlidir. Üç ölçüm, üç grup veya daha fazlası varsa bu durumda nonparametrik post-hoc testleri uygulamanız gerekecektir. Onu da aşağıdaki gibi yapabilirsiniz.
sonuc$pairwise.comparison isteyerek post-hoc’lar istenebilir ama bu post-hoc değerleri yeterince ayrıntılı değildir. Bu nedenle başka bir paket ile bonferroni düzeltmesi yaparak hem her birölçüm düzeyinde hem de her bir grup düzeyinde karşılaştırmalar yapılabilir. Bunun için aşağıdaki kodlar kullanılabilir:
Önce örnek veri dosyasını nasıl üretiriz onu öğrenelim:
set.seed(42)
time_levels <- c(1, 2, 3, 4)
group_levels <- c(“D0”, “D1”, “D2”)
data <- data.frame()
for (time in time_levels) {
for (group in group_levels) {
if (group == “D0”) {
resp <- rnorm(25, mean = 10 + time, sd = time * 0.5)
} else if (group == “D1”) {
resp <- rnorm(30, mean = 12 + time * 1.2, sd = time * 0.7)
} else if (group == “D2”) {
resp <- rnorm(20, mean = 14 – time * 0.8, sd = time * 0.6)
}
# Veriyi birleştir
temp <- data.frame(time = rep(time, length(resp)), group = rep(group, length(resp)), resp = resp)
data <- rbind(data, temp)
}
}
şimdi post-hoc analizi yapabiliriz.
once
install.packages(“nparcomp”)
library(nparcomp)
library(dplyr)
Her bir zaman düzeyi için analiz
for (time in unique(data$time)) {
# dplyr kullanarak filtreleme
specific_year <- data %>% filter(time == !!time)
# Zaman düzeyini ve satır sayısını yazdır
cat(“\nTime level:”, time, ” – Number of rows:”, nrow(specific_year), “\n”)
# Eğer yeterli veri yoksa analiz yapma
if (nrow(specific_year) < 2) {
cat(“Not enough data for analysis.\n”)
next
}
# nparcomp ile analiz
result <- mctp(resp ~ group, data = specific_year,
type = “Tukey”, alternative = “two.sided”)
# Analiz sonuçlarını özetle
analysis_table <- summary(result)$Analysis.Inf
# Orijinal p-değerlerini al
original_p_values <- analysis_table$p.Value
# Bonferroni düzeltmesi uygula
adjusted_p_values <- p.adjust(original_p_values, method = “bonferroni”)
# Adjusted p-değerlerini tabloya ekle
analysis_table$Adjusted_P <- adjusted_p_values
# Sonuçları yazdır
print(analysis_table)
}
Bu kodlar ile her bir ölçüm düzeyinde grupları karşılaştırılır. İki tane p değeri olacaktır. Birisi normal p değerleri diğerleri ise adjusted olanları gösterir. Adjusted olanları kullanmak daha uygun olur.
Aşağıdaki kod ile ise her bir grup için ön-son-izleme karşılaştırması yapılabilir ve p değerleri elde edilebilir. Yine adjusted olanları kullanılırsa iyi olur.
Her bir zaman düzeyi için analiz
for (group in unique(data$group)) {
# dplyr kullanarak filtreleme
specific_group <- data %>% filter(group == !!group)
# Zaman düzeyini ve satır sayısını yazdır
cat(“\nGroup level:”, group, ” – Number of rows:”, nrow(specific_group), “\n”)
# Eğer yeterli veri yoksa analiz yapma
if (nrow(specific_group) < 2) {
cat(“Not enough data for analysis.\n”)
next
}
# nparcomp ile analiz
result <- mctp(resp ~ olcum, data = specific_group,
type = “Tukey”, alternative = “two.sided”)
# Analiz sonuçlarını özetle
analysis_table <- summary(result)$Analysis.Inf
# Orijinal p-değerlerini al
original_p_values <- analysis_table$p.Value
# Bonferroni düzeltmesi uygula
adjusted_p_values <- p.adjust(original_p_values, method = “bonferroni”)
# Adjusted p-değerlerini tabloya ekle
analysis_table$Adjusted_P <- adjusted_p_values
# Sonuçları yazdır
print(analysis_table)
}
Bu kodlarda olcum_degiskeni_adi = Ontest-sontest izleme olduğunu gösteren değişkenin adı, grup_degiskeni_adi= grupların kodlarını gösteren değişkenin adı, puan_adi = ölçekten elde edilen puanları gösteren değişkenin adını, veri_adi ise veri dosyasının adını ifade eder.
Brunner, E., Domhof, S., and Langer, F. (2002). Nonparametric Analysis of Longitudinal Data in Factorial Experiments, Wiley, New York.
Bir yanıt yazın