【问题标题】:Running a contingency test on data with repeat measures对具有重复测量的数据进行应急测试
【发布时间】:2017-02-17 03:25:01
【问题描述】:

希望有人能给我一点指导或帮助。我有一个数据集,该数据集由经过三年感染测试的人群组成。有些人,不是全部,已经在一年多的时间里被抽样(所以它们代表重复测量)。我想确定感染的流行率是否会随着时间而变化,但我在确定合适的测试时遇到了麻烦。一个简单的权变测试违反了独立性假设,因为这些个体在多年中重复出现。我认为 Cochran-Mantel-Haenszel 检验或 McNemar 卡方检验不合适,但如果我错了,请随时纠正我。这是我正在使用的数据集,“AnID”变量是一个代表单个个体的因子(因此,如果对一个个体进行多年抽样,您会看到该数字重复了 2 或 3 次)。

我认为一个可行的选择是对数据进行多次随机重新采样(无需替换),每次仅包括一个人一次,并进行跨年的应急测试。如果没有差异的零假设至少在 95% 的时间内被拒绝,那么我可以可靠地声称存在差异。我对 r 还不够好,还没有为此编写自己的代码。提前感谢您提供的任何帮助。

输入(示例) 结构(列表(AnID = 结构(c(37L,37L,45L,45L,45L,55L, 55L、62L、62L、68L、68L、1L、1L、2L、3L、3L、4L、9L、9L、18L、 18L, 18L, 19L, 19L, 19L, 20L, 20L, 21L, 22L, 22L, 23L, 24L, 24L, 24L, 25L, 25L, 25L, 26L, 27L, 28L, 28L, 28L, 29L, 29L, 29L, 30L, 31L, 32L, 32L, 33L, 34L, 35L, 36L, 38L, 38L, 39L, 39L, 40L, 41L, 41L, 42L, 42L, 42L, 43L, 43L, 43L, 44L, 46L, 46L, 46L, 47L, 47L, 47L、48L、48L、48L、49L、49L、49L、50L、51L、52L、52L、53L、53L、 54L、54L、56L、56L、57L、57L、57L、58L、59L、60L、61L、63L、64L、 65L、66L、67L、69L、70L、71L、72L、73L、74L、74L、5L、6L、7L、 8L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L), .Label = c("10", “11”、“12”、“13”、“136”、“137”、“138”、“139”、“14”、“140”、“141”、 “142”、“143”、“144”、“145”、“146”、“147”、“26”、“27”、“28”、“29”、 “30”、“31”、“37”、“38”、“39”、“40”、“41”、“42”、“43”、“44”、“45”、 “46”、“47”、“48”、“49”、“5”、“50”、“51”、“52”、“53”、“57”、“58”、 “59”、“6”、“60”、“61”、“62”、“63”、“64”、“65”、“66”、“67”、“69”、 “7”、“70”、“71”、“72”、“75”、“76”、“77”、“8”、“82”、“83”、“84”、 “85”、“86”、“9”、“90”、“94”、“95”、“96”、“97”、“98”)、class=“因子”)、 年 = 结构(c(1L,2L,1L,2L,3L,1L,2L,2L,3L,2L, 3L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 3L, 2L, 1L, 2L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 3L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("2012", "2013", "2014"), class= "因子"), 值 = c("Pos", "Pos", "Pos", "Pos", "Pos", "Neg", "Neg", “Pos”、“Pos”、“Pos”、“Pos”、“Pos”、“Pos”、“Neg”、“Neg”、“Pos”、 “负”、“正”、“正”、“负”、“正”、“正”、“负”、“负”、“负”、 “负”、“负”、“负”、“正”、“正”、“正”、“正”、“正”、“正”、 “负”、“正”、“正”、“负”、“负”、“负”、“负”、“正”、“正”、 “Pos”、“Pos”、“Neg”、“Neg”、“Pos”、“Pos”、“Neg”、“Pos”、“Neg”、 “正”、“负”、“负”、“负”、“负”、“负”、“负”、“负”、“正”、 “Pos”、“Pos”、“Neg”、“Pos”、“Pos”、“Neg”、“Neg”、“Pos”、“Neg”、 “Neg”、“Neg”、“Neg”、“Neg”、“Neg”、“Neg”、“Neg”、“Pos”、“Pos”、 “负”、“负”、“负”、“正”、“正”、“正”、“正”、“正”、“负”、 “负”、“负”、“正”、“正”、“负”、“负”、“负”、“负”、“负”、 “否定”、“位置”、“否定”、“否定”、“否定”、“否定”、“否定”、“否定”、“否定”、 “Pos”、“Pos”、“Neg”、“Neg”、“Neg”、“Pos”、“Pos”、“Pos”、“Neg”、 "Neg", "Pos", "Neg", "Pos", "Neg")), .Names = c("AnID", "year", "值"), row.names = 187:306, class= "data.frame")

【问题讨论】:

    标签: r


    【解决方案1】:

    请注意,实验/测试设计需要提前进行有效的样本量计算,以便最大限度地提高捕获统计显着差异(如果存在)的可能性。 (有关详细信息,请参阅此处:https://en.wikipedia.org/wiki/Sample_size_determinationhttps://en.wikipedia.org/wiki/Statistical_power)。

    如果您的所有用户都在主题之前/之后(例如测试/控制),您可以执行 McNemar 检验以进行比例比较(请参阅此处:https://en.wikipedia.org/wiki/McNemar's_test)。

    但是,并非所有用户都有重复测量,所以我选择为每个用户随机选择一年,这样我就可以有 3 个独立的值样本。

    假设 dt 是您的数据集...

    library(dplyr)
    
    set.seed(1)   # this will help you having a specific random sampling
    
    dt %>%                      
      mutate(Pos = ifelse(value == "Pos", 1, 0)) %>%   # create a binary variable to flag positives
      group_by(AnID) %>%                               # for each user
      sample_n(1) %>%                                  # get one row/value randomly
      group_by(year) %>%                               # for each year
      summarise(N = n(),                               # get number of users
                N_Pos = sum(Pos),                      # get number of positive users
                Prc_Pos = mean(Pos)) %>%               # get percentage of positives
      print() -> tbl1                                  # print and save it
    
    # # A tibble: 3 × 4
    #     year     N N_Pos   Prc_Pos
    #   <fctr> <int> <dbl>     <dbl>
    # 1   2012    23     6 0.2608696
    # 2   2013    27     9 0.3333333
    # 3   2014    24    13 0.5416667
    

    观察上述每年的百分比后,您可以进行比例比较

    # run the statistical comparison of proportions
    prop.test(tbl1$N_Pos, tbl1$N)
    
    # 3-sample test for equality of proportions without continuity correction
    # 
    # data:  tbl1$N_Pos out of tbl1$N
    # X-squared = 4.3038, df = 2, p-value = 0.1163
    # alternative hypothesis: two.sided
    # sample estimates:
    #    prop 1    prop 2    prop 3 
    # 0.2608696 0.3333333 0.5416667 
    

    此处的 P 值 (0.1163) 表明我们没有任何证据表明这些年份之间在阳性可能性方面存在差异。

    如果您发现差异,您可以在年份之间进行成对比较。

    # run pairwise comparisons 
    pairwise.prop.test(tbl1$N_Pos, tbl1$N)
    
    # Pairwise comparisons using Pairwise comparison of proportions 
    # 
    # data:  tbl1$N_Pos out of tbl1$N 
    # 
    # 1    2   
    # 2 0.80 -   
    # 3 0.29 0.45
    # 
    # P value adjustment method: holm 
    

    这里的输出是 3 个 p 值(3 对比较)。正如预期的那样,所有这些都表明没有证据表明年份之间存在差异。

    您可以在一个函数中使用上述过程并创建 N 个模拟。 检查在这些模拟中有多少您会发现具有统计意义的结果。

    【讨论】:

    • 谢谢!这很好用。我已将您的代码放入一个循环中以迭代该过程 1000 次。
    • 确保您删除了set.seed,这样您每次都可以获得不同的随机化。
    猜你喜欢
    • 2018-04-25
    • 2020-08-29
    • 2013-08-27
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多