36 Kombinasyon analizi
Bu analiz grafikleri, değerlerin/yanıtların farklı kombinasyonlarının sıklığını gösterir. Bu örnekte, vakaların çeşitli semptom kombinasyonları sergilediği sıklığı çiziyoruz.
Bu analize genellikle şu ad verilir:
- “Çoklu yanıt analizi”
- “Küme analizi”
- “Kombinasyon analizi”
Yukarıdaki örnek çizimde, beş belirti gösterilmektedir. Her dikey çubuğun altında, yukarıdaki çubuk tarafından yansıtılan semptomların kombinasyonunu gösteren bir çizgi ve noktalar bulunur. Sağda, yatay çubuklar her bir semptomun sıklığını yansıtır.
Gösterdiğimiz ilk yöntem ggupset paketini, ikincisi ise UpSetR paketini kullanmaktadır.
36.1 Hazırlık
Paketleri yükleyin
Bu kod parçası, analizler için gerekli olan paketlerin yüklenmesini gösterir. Bu el kitabında, gerekirse paketi kuran ve kullanım için yükleyen pacman’dan p_load()
vurgusu yapıyoruz. R tabanından library()
ile kurulu paketleri de yükleyebilirsiniz. R paketleri hakkında daha fazla bilgi için [R basics] sayfasına bakabilirsiniz.
::p_load(
pacman# veri yönetimi ve görselleştirme
tidyverse, # kombinasyon grafikleri için özel paket
UpSetR, # kombinasyon grafikleri için özel paket ggupset)
Verileri içe aktar
Başlamak için, simüle edilmiş bir Ebola salgınından temizlenmiş vaka listesini içe aktarıyoruz. Takip etmek isterseniz, “clean” dosyasını indirmek için tıklayın. (.rds dosyası olarak). rio paketinden import()
fonksiyonuyla verileri içe aktarın (.xlsx, .csv, .rds gibi birçok dosya türünü işler - ayrıntılar için [İçe aktarma ve dışa aktarma] sayfasına bakın).
# Vaka satırlistesini içe aktarın
<- import("linelist_cleaned.rds") linelist_sym
Bu satır listesi, bildirilen semptomlarla ilgili beş “evet/hayır” değişkeni içerir. Grafiğimizi oluşturmak için ggupset paketini kullanmak için bu değişkenleri biraz dönüştürmemiz gerekecek. Verileri görüntüleyin (semptom değişkenlerini görmek için sağa kaydırın).
Değerleri yeniden biçimlendir
ggupset tarafından beklenen formata uyum sağlamak için dplyr’den case_while()
kullanarak gerçek semptom adını “evet” ve “hayır”a dönüştürürüz. “Hayır” ise, değeri boş olarak ayarlarız, bu nedenle değerler “NA” veya semptomdur.
# noktalı virgülle ayrılmış olarak adlandırılmış belirtilerle sütun oluşturun
<- linelist_sym %>%
linelist_sym_1
# "evet" ve "hayır" değerlerini semptom adının kendisine dönüştürün
mutate(fever = ifelse(fever == "yes", "fever", NA),
chills = ifelse(chills == "yes", "chills", NA),
cough = ifelse(cough == "yes", "cough", NA),
aches = ifelse(aches == "yes", "aches", NA),
vomit = ifelse(vomit == "yes", "vomit", NA))
Şimdi iki son sütun yapıyoruz:
- Hastanın tüm semptomlarını birleştirmek (birbirine yapıştırmak) (bir karakter sütunu)
- Yukarıdaki sütunu list sınıfına dönüştürmek, böylece grafik yapmak için ggupset tarafından kabul edilebilir.
stringr’den unite()
fonksiyonu hakkında daha fazla bilgi edinmek için [Karakterler ve dizeler] hakkındaki sayfaya bakabilirsiniz.
<- linelist_sym_1 %>%
linelist_sym_1 unite(col = "all_symptoms",
c(fever, chills, cough, aches, vomit),
sep = "; ",
remove = TRUE,
na.rm = TRUE) %>%
mutate(
# all_symptoms sütununun, "list" sınıfının (bir sonraki adımda ggupset() kullanmak için gereklidir) bir kopyasını yapın
all_symptoms_list = as.list(strsplit(all_symptoms, "; "))
)
Yeni verileri görüntüleyin. Sağ uca doğru iki sütuna dikkat edin - yapıştırılan birleştirilmiş değerler ve liste
36.2 ggupset
Paketi yükleme
::p_load(ggupset) pacman
Grafik oluşturun. Bir ggplot()
ve geom_bar()
ile başlıyoruz, ancak sonra ggupset’ten scale_x_upset()
özel fonksiyonunu ekliyoruz.
ggplot(
data = linelist_sym_1,
mapping = aes(x = all_symptoms_list)) +
geom_bar() +
scale_x_upset(
reverse = FALSE,
n_intersections = 10,
sets = c("fever", "chills", "cough", "aches", "vomit"))+
labs(
title = "Signs & symptoms",
subtitle = "10 most frequent combinations of signs and symptoms",
caption = "Caption here.",
x = "Symptom combination",
y = "Frequency in dataset")
ggupset hakkında daha fazla bilgiyi çevrimiçi veya çevrimdışı olarak RStudio Yardım sekmeniz ?ggupset
içindeki paket belgelerinde bulabilirsiniz.
36.3 UpSetR
UpSetR paketi grafiğin daha fazla özelleştirilmesine izin verir, ancak yürütülmesi daha zor olabilir:
Paketi yüklemek
::p_load(UpSetR) pacman
Veri temizliği
‘satırlistesi’ semptom değerlerini 1 / 0’a çevirmeliyiz.
# upSetR kullanarak yapın
<- linelist_sym %>%
linelist_sym_2
# "evet" ve "hayır" değerlerini semptom adının kendisine dönüştürün
mutate(fever = ifelse(fever == "yes", 1, 0),
chills = ifelse(chills == "yes", 1, 0),
cough = ifelse(cough == "yes", 1, 0),
aches = ifelse(aches == "yes", 1, 0),
vomit = ifelse(vomit == "yes", 1, 0))
Daha verimli bir komutla ilgileniyorsanız, mantıksal bir ifadeye dayalı olarak 1’lere ve 0’lara dönüştüren +()
işlevinden yararlanabilirsiniz. Bu komut, aynı anda birden fazla sütunu değiştirmek için across()
fonksiyonunu kullanır (daha fazla bilgi için Veri temizleme ve temel fonksiyonlar).
# Efficiently convert "yes" to 1 and 0
<- linelist_sym %>%
linelist_sym_2
# convert the "yes" and "no" values into 1s and 0s
mutate(across(c(fever, chills, cough, aches, vomit), .fns = ~+(.x == "yes")))
Şimdi ‘upset()’ özel fonksiyonunu kullanarak grafiği yapın - yalnızca belirtiler sütunlarını kullanarak. Hangi “kümelerin” karşılaştırılacağını belirlemelisiniz (semptom sütunlarının adları). Alternatif olarak, yalnızca en iyi X kombinasyonlarını göstermek için nsets =
ve order.by = "freq"
kullanın.
# Grafiği çizin
%>%
linelist_sym_2 ::upset(
UpSetRsets = c("fever", "chills", "cough", "aches", "vomit"),
order.by = "freq",
sets.bar.color = c("blue", "red", "yellow", "darkgreen", "orange"), # optional colors
empty.intersections = "on",
# nsets = 3,
number.angles = 0,
point.size = 3.5,
line.size = 2,
mainbar.y.label = "Symptoms Combinations",
sets.x.label = "Patients with Symptom")
36.4 Kaynaklar
A Shiny uygulama versiyonu - kendi verinizi yükleyebilirsiniz