× Need help learning R? Enroll in Applied Epi's intro R course, try our free R tutorials, post in our Community Q&A forum, or ask about our R Help Desk service.

18 Basit istatistiksel testler

Bu sayfa, base R, rstatix ve gtsummary kullanılarak basit istatistiksel testlerin nasıl gerçekleştirileceğini gösterir.

  • t testi
  • Shapiro-Wilk testi
  • Wilcoxon sıra toplamı testi
  • Kruskal-Wallis testi
  • Ki-kare testi
  • Sayısal değişkenler arasındaki korelasyonlar

…başka birçok test yapılabilir, ancak biz sadece bu yaygın testleri göstermekteyiz ve daha fazla belgeye bağlantı vermekteyiz.

Yukarıdaki paketlerin her biri belirli avantajlar ve dezavantajlar getirir:

  • İstatistiksel çıktıları R Konsoluna yazdırmak için base R fonksiyonlarını kullanın
  • Sonuçları bir veri çerçevesinde döndürmek için veya testlerin gruplara göre yapılmasını istiyorsanız rstatix fonksiyonlarını kullanın
  • Yayına hazır tabloları hızlı bir şekilde yazdırmak istiyorsanız gtsummary kullanın

18.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() vurgusunu yapıyoruz. base R’dan library() ile kurulu paketleri de yükleyebilirsiniz. R paketleri hakkında daha fazla bilgi için [R basics] sayfasına bakın.

pacman::p_load(
  rio,          # Dosyayı içe aktarma
  here,         # Dosyayı konumlama
  skimr,        # Veriye göz atma
  tidyverse,    # veri yönetimi + ggplot2 grafikleri, 
  gtsummary,    # özet istatistikler ve testler
  rstatix,      # istatistikler
  corrr,        # Sayısal değişkenler için Korelasyon analizi 
  janitor,      # Tablolara toplamı ve yüzdeleri ekleme
  flextable     # Tabloları HTML formatına dönüştürme
  )

Verileri içe aktar

Simüle edilmiş bir Ebola salgınından vakaların veri setini içe aktarıyoruz. Takip etmek isterseniz, “temiz” vaka listesini indirmek için tıklayınız(.rds dosyası olarak). Verilerinizi rio paketinden import() fonksiyonuyla içe aktarın (.xlsx, .rds, .csv gibi birçok dosya türünü kabul eder - ayrıntılar için [İçe aktarma ve dışa aktarma] sayfasına bakın).

# Vaka listesini içe aktarma
linelist <- import("linelist_cleaned.rds")

Vaka listesinin ilk 50 satırı aşağıda görüntülenmektedir.

base (temel) R {}

İstatistiksel testler yapmak için base R fonksiyonlarını kullanabilirsiniz. Komutlar nispeten basittir ve sonuçlar basit görüntüleme için R Konsoluna yazdırılacaktır. Bununla birlikte, çıktılar genellikle listelerdir ve bu nedenle sonuçları sonraki işlemlerde kullanmak istiyorsanız manipüle edilmesi daha zordur.

T testleri

“Student’s t-Test” olarak da adlandırılan bir t-testi, genellikle iki grup arasındaki bazı sayısal değişkenlerin ortalamaları arasında önemli bir fark olup olmadığını belirlemek için kullanılır. Burada, sütunların aynı veri çerçevesinde olup olmadığına bağlı olarak bu testi yapmak için sözdizimini göstereceğiz.

Sözdizimi 1: Bu, sayısal ve kategorik sütunlarınız aynı veri çerçevesinde olduğundaki sözdizimidir. Denklemin sol tarafında sayısal sütunu ve sağ tarafında kategorik sütunu sağlayın. Veri kümesini data = olarak belirtin. İsteğe bağlı olarak, paired = TRUE, ve conf.level = (0.95 default), vealternative =(“iki taraflı”, “daha az” veya “daha büyük”) olarak ayarlayın. Daha fazla ayrıntı için ?t.test girin.

## T-testi ile grupların yaş ortalamalarını karşılaştırma
t.test(age_years ~ gender, data = linelist)
## 
##  Welch Two Sample t-test
## 
## data:  age_years by gender
## t = -21.344, df = 4902.3, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group f and group m is not equal to 0
## 95 percent confidence interval:
##  -7.571920 -6.297975
## sample estimates:
## mean in group f mean in group m 
##        12.60207        19.53701

Sözdizimi 2: Bu alternatif sözdizimini kullanarak iki ayrı sayısal vektörü karşılaştırabilirsiniz. Örneğin, iki sütun farklı veri kümelerindeyse.

t.test(df1$age_years, df2$age_years)

Örneklerin ortalamasının belirli bir değerden önemli ölçüde farklı olup olmadığını belirlemek için bir t testi de kullanabilirsiniz. Burada, mu = olarak bilinen/varsayımsal popülasyon ortalaması ile tek örnekli bir t-testi yapıyoruz:

t.test(linelist$age_years, mu = 45)

Shapiro-Wilk testi

Shapiro-Wilk testi bir örneğin normal dağılıma sahip bir popülasyondan gelip gelmediğini belirlemek için kullanılabilir (diğer birçok testin varsayımı ve analizinde olduğu gibi, örneğin t-testi). Ancak, bu yalnızca 3 ila 5000 gözlem arasındaki bir örnek üzerinde kullanılabilir. Daha büyük numuneler için bir quantile-quantile (Q-Q) grafiği yardımcı olabilir.

shapiro.test(linelist$age_years)

Wilcoxon sıralama toplamı testi

Mann–Whitney U testi olarak da adlandırılan Wilcoxon sıralama toplamı testi, genellikle iki sayısal örneğin popülasyonları normal dağılmadığında veya eşit olmayan varyansa sahip olduğunda kullanılır.

## Wilcox testi ile grupların yaş dağılımını karşılaştırma
wilcox.test(age_years ~ outcome, data = linelist)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  age_years by outcome
## W = 2501868, p-value = 0.8308
## alternative hypothesis: true location shift is not equal to 0

Kruskal-Wallis testi

Kruskal-Wallis testi, ikiden fazla örneklemin dağılımdaki farklılıklarını test etmek için kullanılabilecek Wilcoxon testinin bir uzantısıdır. Yalnızca iki örnek kullanıldığında, Wilcoxon testiyle aynı sonuçları verir.

## Kruskal-Wallis testi ile grupların yaş dağılımını karşılaştırma
kruskal.test(age_years ~ outcome, linelist)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  age_years by outcome
## Kruskal-Wallis chi-squared = 0.045675, df = 1, p-value = 0.8308

Ki-kare testi

Pearson Ki-kare testi kategorik gruplar arasındaki önemli farklılıkları test etmek için kullanılır.

## Ki-kare testi ile her grubun oranlarını karşılaşırma
chisq.test(linelist$gender, linelist$outcome)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  linelist$gender and linelist$outcome
## X-squared = 0.0011841, df = 1, p-value = 0.9725

18.2 rstatix paketi

rstatix paketi, istatistiksel testlerin çalıştırılmasını ve sonuçlarını “tünel dostu” bir çerçevede alma olanağı sunar. Sonuçlar üzerinde işlemleri gerçekleştirebilmeniz için sonuçlar, otomatik olarak bir veri çerçevesindedir. İstatistiklerin her grup için çalıştırılması ve fonksiyonlara geçirilen verileri gruplamak kolaydır.

Özet istatistikler

get_summary_stats() fonksiyonu, özet istatistikleri döndürmenin hızlı bir yoludur. Veri kümenizi bu fonksiyona aktarmanız ve analiz edilecek sütunları sağlamanız yeterlidir. Hiçbir sütun belirtilmemişse, istatistikler tüm sütunlar için hesaplanır.

Varsayılan olarak, tam bir özet istatistik aralığı döndürülür: n, maks, min, medyan, %25 ile, %75 ile, IQR, medyan mutlak sapma (mad), ortalama, standart sapma, standart hata ve güven aralığı.

linelist %>%
  rstatix::get_summary_stats(age, temp)
## # A tibble: 2 × 13
##   variable     n   min   max median    q1    q3   iqr    mad  mean     sd    se    ci
##   <fct>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl> <dbl>
## 1 age       5802   0    84     13     6    23      17 11.9    16.1 12.6   0.166 0.325
## 2 temp      5739  35.2  40.8   38.8  38.2  39.2     1  0.741  38.6  0.977 0.013 0.025

type = için şu değerlerden birini sağlayarak döndürülecek özet istatistiklerin bir alt kümesini belirtebilirsiniz: “full”, “common”, “robust”, “five_number”, “mean_sd”, “mean_se”, “mean_ci” , “median_iqr”, “median_mad”, “quantile”, “mean”, “median”, “min”, “max”.

Her gruplama değişkeni için bir satır döndürülecek şekilde gruplandırılmış verilerle de kullanılabilir:

linelist %>%
  group_by(hospital) %>%
  rstatix::get_summary_stats(age, temp, type = "common")
## # A tibble: 12 × 11
##    hospital            varia…¹     n   min   max median   iqr  mean     sd    se    ci
##    <chr>               <fct>   <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl>
##  1 Central Hospital    age       445   0    58     12    15    15.7 12.5   0.591 1.16 
##  2 Central Hospital    temp      450  35.2  40.4   38.8   1    38.5  0.964 0.045 0.089
##  3 Military Hospital   age       884   0    72     14    18    16.1 12.4   0.417 0.818
##  4 Military Hospital   temp      873  35.3  40.5   38.8   1    38.6  0.952 0.032 0.063
##  5 Missing             age      1441   0    76     13    17    16.0 12.9   0.339 0.665
##  6 Missing             temp     1431  35.8  40.6   38.9   1    38.6  0.97  0.026 0.05 
##  7 Other               age       873   0    69     13    17    16.0 12.5   0.422 0.828
##  8 Other               temp      862  35.7  40.8   38.8   1.1  38.5  1.01  0.034 0.067
##  9 Port Hospital       age      1739   0    68     14    18    16.3 12.7   0.305 0.598
## 10 Port Hospital       temp     1713  35.5  40.6   38.8   1.1  38.6  0.981 0.024 0.046
## 11 St. Mark's Materni… age       420   0    84     12    15    15.7 12.4   0.606 1.19 
## 12 St. Mark's Materni… temp      410  35.9  40.6   38.8   1.1  38.5  0.983 0.049 0.095
## # … with abbreviated variable name ¹​variable

İstatistiksel testler yapmak için rstatix’i de kullanabilirsiniz:

T-testi

Sayısal ve kategorik sütunları belirtmek için bir formül sözdizimi kullanın:

linelist %>% 
  t_test(age_years ~ gender)
## # A tibble: 1 × 10
##   .y.       group1 group2    n1    n2 statistic    df        p    p.adj p.adj.signif
## * <chr>     <chr>  <chr>  <int> <int>     <dbl> <dbl>    <dbl>    <dbl> <chr>       
## 1 age_years f      m       2807  2803     -21.3 4902. 9.89e-97 9.89e-97 ****

Veya ~ 1 kullanın ve tek örnekli bir T-testi için mu = belirtin. Bu grup tarafından da yapılabilir.

linelist %>% 
  t_test(age_years ~ 1, mu = 30)
## # A tibble: 1 × 7
##   .y.       group1 group2         n statistic    df     p
## * <chr>     <chr>  <chr>      <int>     <dbl> <dbl> <dbl>
## 1 age_years 1      null model  5802     -84.2  5801     0

Uygulanabilirse, istatistiksel testler aşağıda gösterildiği gibi grup bazında yapılabilir:

linelist %>% 
  group_by(gender) %>% 
  t_test(age_years ~ 1, mu = 18)
## # A tibble: 3 × 8
##   gender .y.       group1 group2         n statistic    df         p
## * <chr>  <chr>     <chr>  <chr>      <int>     <dbl> <dbl>     <dbl>
## 1 f      age_years 1      null model  2807    -29.8   2806 7.52e-170
## 2 m      age_years 1      null model  2803      5.70  2802 1.34e-  8
## 3 <NA>   age_years 1      null model   192     -3.80   191 1.96e-  4

Shapiro-Wilk testi

Yukarıda belirtildiği gibi, örneklem büyüklüğü 3 ile 5000 arasında olmalıdır.

linelist %>% 
  head(500) %>%            # Vaka listesinin ilk 500 satırı, sadece örnek için
  shapiro_test(age_years)
## # A tibble: 1 × 3
##   variable  statistic        p
##   <chr>         <dbl>    <dbl>
## 1 age_years     0.917 6.67e-16

Wilcoxon sıralama toplamı testi

linelist %>% 
  wilcox_test(age_years ~ gender)
## # A tibble: 1 × 9
##   .y.       group1 group2    n1    n2 statistic        p    p.adj p.adj.signif
## * <chr>     <chr>  <chr>  <int> <int>     <dbl>    <dbl>    <dbl> <chr>       
## 1 age_years f      m       2807  2803   2829274 3.47e-74 3.47e-74 ****

Kruskal-Wallis testi

Mann-Whitney U testi olarak da bilinir.

linelist %>% 
  kruskal_test(age_years ~ outcome)
## # A tibble: 1 × 6
##   .y.           n statistic    df     p method        
## * <chr>     <int>     <dbl> <int> <dbl> <chr>         
## 1 age_years  5888    0.0457     1 0.831 Kruskal-Wallis

Ki-kare testi

Ki-kare test fonksiyonu bir tablo kabul eder, bu nedenle önce bir çapraz tablo oluştururuz. Çapraz tablo oluşturmanın birçok yolu vardır (bkz. Tanımlayıcı tablolar) ancak burada janitor ‘den ’tabyl()’ kullanıyoruz ve ’chisq_test()’e geçmeden önce en soldaki değer etiketleri sütununu kaldırıyoruz.

linelist %>% 
  tabyl(gender, outcome) %>% 
  select(-1) %>% 
  chisq_test()
## # A tibble: 1 × 6
##       n statistic     p    df method          p.signif
## * <dbl>     <dbl> <dbl> <int> <chr>           <chr>   
## 1  5888      3.53 0.473     4 Chi-square test ns

rstatix fonksiyonları ile daha birçok fonksiyon ve istatistiksel test çalıştırılabilir. rstatix belgelerine buradan çevrimiçi veya ?rstatix girerek inceleyebilirsiniz.

18.3 gtsummary paketi

Bu paketle oluşturulmuş güzel bir tabloya istatistiksel bir testin sonuçlarını eklemek istiyorsanız gtsummary kullanın (Açıklayıcı tablolar sayfasının gtsummary bölümünde açıklandığı gibi) ).

‘tbl_summary’ ile karşılaştırmanın istatistiksel testlerinin yapılması, Bir tabloya add_p fonskiyonu ve hangi testin kullanılacağını belirtir. kullanarak çoklu test için p değerlerinin düzeltilmesi mümkündür. ‘add_q’ işlevi. Ayrıntılar için ?tbl_summary çalıştırın.

Ki-kare testi

Kategorik bir değişkenin oranlarını iki grupta karşılaştırın. Kategorik bir değişkene uygulandığında ‘add_p()’ için varsayılan istatistiksel test, süreklilik düzeltmeli ki-kare bağımsızlık testi yapmaktır, ancak herhangi bir beklenen değer sayısı 5’in altındaysa, o zaman Fisher’ın kesin testi kullanılır.

linelist %>% 
  select(gender, outcome) %>%    # ilgilenilen değişkenleri tutma
  tbl_summary(by = outcome) %>%  # özet tablo oluştur ve gruplama değişkenini belirle
  add_p()                        # hangi testin gerçekleştirileceğini belirtin
## 1323 observations missing `outcome` have been removed. To include these observations, use `forcats::fct_explicit_na()` on `outcome` column before passing to `tbl_summary()`.
Characteristic Death, N = 2,5821 Recover, N = 1,9831 p-value2
gender >0.9
    f 1,227 (50%) 953 (50%)
    m 1,228 (50%) 950 (50%)
    Unknown 127 80
1 n (%)
2 Pearson's Chi-squared test

T testleri

İki grupta sürekli bir değişken için ortalamalardaki farkı karşılaştırın. Örneğin, ortalama yaşı hasta sonucuna göre karşılaştırın.

linelist %>% 
  select(age_years, outcome) %>%             # ilgilenilen değişkenleri tutma
  tbl_summary(                               # özet tablo üretme
    statistic = age_years ~ "{mean} ({sd})", # hangi istatistiklerin gösterileceğini belirtin
    by = outcome) %>%                        # gruplama değişkenini belirtin
  add_p(age_years ~ "t.test")                # hangi testlerin gerçekleştirileceğini belirtin
## 1323 observations missing `outcome` have been removed. To include these observations, use `forcats::fct_explicit_na()` on `outcome` column before passing to `tbl_summary()`.
Characteristic Death, N = 2,5821 Recover, N = 1,9831 p-value2
age_years 16 (12) 16 (13) 0.6
    Unknown 32 28
1 Mean (SD)
2 Welch Two Sample t-test

Wilcoxon sıralama toplamı testi

Sürekli bir değişkenin dağılımını iki grupta karşılaştırın. Varsayılan ayar, iki grubu karşılaştırırken Wilcoxon sıra toplamı testi ve medyanı (IQR) kullanmaktır. Ancak normal dağılmayan veriler veya çoklu grupların karşılaştırılması için Kruskal-wallis testi daha uygundur.

linelist %>% 
  select(age_years, outcome) %>%                       # ilgilenilen değişkenleri tutma
  tbl_summary(                                         # özet tablo üretme
    statistic = age_years ~ "{median} ({p25}, {p75})", # hangi istatistiğin gösterileceğini belirtin (bu varsayılandır, bu nedenle kaldırılabilir)
    by = outcome) %>%                                  # gruplama değişkenini belirtin
  add_p(age_years ~ "wilcox.test")                     # hangi testin gerçekleştirileceğini belirtin (bu varsayılandır, bu nedenle parantezler boş bırakılabilir)
## 1323 observations missing `outcome` have been removed. To include these observations, use `forcats::fct_explicit_na()` on `outcome` column before passing to `tbl_summary()`.
Characteristic Death, N = 2,5821 Recover, N = 1,9831 p-value2
age_years 13 (6, 23) 13 (6, 23) 0.8
    Unknown 32 28
1 Median (IQR)
2 Wilcoxon rank sum test

18.3.1 Kruskal-wallis testi

Verilerin normal dağılıp dağılmadığına bakılmaksızın, sürekli bir değişkenin iki veya daha fazla gruptaki dağılımını karşılaştırın.

linelist %>% 
  select(age_years, outcome) %>%                       # ilgilenilen değişkenleri tutma
  tbl_summary(                                         # özet tablo üretme
    statistic = age_years ~ "{median} ({p25}, {p75})", # hangi istatistiğin gösterileceğini belirtin (bu varsayılandır, bu nedenle kaldırılabilir)
    by = outcome) %>%                                  # gruplama değişkenini belirtin
  add_p(age_years ~ "kruskal.test")                    # hangi testin gerçekleştirileceğini belirtin
## 1323 observations missing `outcome` have been removed. To include these observations, use `forcats::fct_explicit_na()` on `outcome` column before passing to `tbl_summary()`.
Characteristic Death, N = 2,5821 Recover, N = 1,9831 p-value2
age_years 13 (6, 23) 13 (6, 23) 0.8
    Unknown 32 28
1 Median (IQR)
2 Kruskal-Wallis rank sum test

18.4 Korelasyonlar

Sayısal değişkenler arasındaki korelasyon tidyverse kullanılarak araştırılabilir. corrr paketi, Pearson Kendall kullanarak korelasyonları hesaplamanıza izin verir. tau veya Spearman rho, Paket bir tablo oluşturur ve ayrıca değerleri otomatik olarak çizer.

correlation_tab <- linelist %>% 
  select(generation, age, ct_blood, days_onset_hosp, wt_kg, ht_cm) %>%   # ilgilenilen sayısal değişkenleri tutma
  correlate()      # korelasyon tablosu oluşturma (varsayılan pearson kullanılarak)

correlation_tab    # yazdır
## # A tibble: 6 × 7
##   term            generation       age ct_blood days_onset_hosp    wt_kg    ht_cm
##   <chr>                <dbl>     <dbl>    <dbl>           <dbl>    <dbl>    <dbl>
## 1 generation        NA       -0.0222    0.179         -0.288    -0.0302  -0.00942
## 2 age               -0.0222  NA         0.00849       -0.000635  0.833    0.877  
## 3 ct_blood           0.179    0.00849  NA             -0.600    -0.00636  0.0181 
## 4 days_onset_hosp   -0.288   -0.000635 -0.600         NA         0.0153  -0.00953
## 5 wt_kg             -0.0302   0.833    -0.00636        0.0153   NA        0.884  
## 6 ht_cm             -0.00942  0.877     0.0181        -0.00953   0.884   NA
## Duplike girdileri kaldırma (üstteki tablo yansıtılır) 
correlation_tab <- correlation_tab %>% 
  shave()

## Korelasyon tablosunu gösterme 
correlation_tab
## # A tibble: 6 × 7
##   term            generation       age ct_blood days_onset_hosp  wt_kg ht_cm
##   <chr>                <dbl>     <dbl>    <dbl>           <dbl>  <dbl> <dbl>
## 1 generation        NA       NA        NA              NA       NA        NA
## 2 age               -0.0222  NA        NA              NA       NA        NA
## 3 ct_blood           0.179    0.00849  NA              NA       NA        NA
## 4 days_onset_hosp   -0.288   -0.000635 -0.600          NA       NA        NA
## 5 wt_kg             -0.0302   0.833    -0.00636         0.0153  NA        NA
## 6 ht_cm             -0.00942  0.877     0.0181         -0.00953  0.884    NA
## korelasyon grafikleri 
rplot(correlation_tab)

18.5 Kaynaklar

Bu sayfadaki bilgilerin çoğu şu kaynaklardan ve çevrimiçi gösterimlerden uyarlanmıştır:

gtsummary dplyr corrr sthda correlation