【问题标题】:rollapplyr students t-test across columnsrollapplyr 学生跨列 t 检验
【发布时间】:2020-10-31 02:09:35
【问题描述】:

我有一些看起来像这样的数据:

   group date         Mal   Fem
   <chr> <date>     <dbl> <dbl>
 1 grp1  2020-07-01     7     5
 2 grp1  2020-07-02    17    17
 3 grp1  2020-07-03    16    15
 4 grp1  2020-07-04     6     9
 5 grp1  2020-07-05     6     3

其中有 3 个组 grp1grp2grp3。我想看看它们的分布是如何随时间变化的,我认为绘制一个“分组滚动 t 检验”会很有趣,例如滞后期为 7 天。

我执行以下操作:

# Process and convert data to a zoo object
df_ts <- df %>% 
  pivot_wider(names_from = group, values_from = c(Mal, Fem)) %>% 
  select(date, contains("grp1")) %>% 
  timetk::tk_zoo()

# Define a t test function
ttestFun <- function(dat) {
  myTtest = t.test(x = dat[, 1], y = dat[, 2])
  return(myTtest)
}

# See if the t test functionw works
ttestFun(df_ts)

# Apply the function to the rolling data
rollapplyr(df_ts, 7, FUN = ttestFun, fill = NA, by.column = FALSE)

我正在尝试做两件事。

  1. 获取适用于滚动窗口的代码,因为此时它在 rollapplyr 函数上中断并出现以下错误:

动物园中的错误(rval,索引(x)[i]):“x”:尝试定义无效 动物园对象

  1. 获取代码,不仅将 t 检验应用于(grp1grp2),还应用于其他组合(grp1grp3)和(grp2grp3

数据:

    df <- structure(list(group = c("grp1", "grp1", "grp1", "grp1", "grp1", 
"grp1", "grp1", "grp1", "grp1", "grp1", "grp1", "grp1", "grp1", 
"grp1", "grp1", "grp2", "grp2", "grp2", "grp2", "grp2", "grp2", 
"grp2", "grp2", "grp2", "grp2", "grp2", "grp2", "grp2", "grp2", 
"grp2", "grp3", "grp3", "grp3", "grp3", "grp3", "grp3", "grp3", 
"grp3", "grp3", "grp3", "grp3", "grp3", "grp3", "grp3", "grp3"
), date = structure(c(18444, 18445, 18446, 18447, 18448, 18449, 
18450, 18451, 18452, 18453, 18454, 18455, 18456, 18457, 18458, 
18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 
18453, 18454, 18455, 18456, 18457, 18458, 18444, 18445, 18446, 
18447, 18448, 18449, 18450, 18451, 18452, 18453, 18454, 18455, 
18456, 18457, 18458), class = "Date"), Mal = c(7, 17, 16, 6, 
6, 8, 20, 4, 20, 36, 13, 8, 19, 14, 19, 42, 31, 35, 29, 3, 23, 
39, 30, 25, 46, 30, 11, 47, 59, 55, 4, 3, 5, 2, 1, 2, 4, 3, 1, 
1, 3, 1, 1, 2, 1), Fem = c(5, 17, 15, 9, 3, 10, 14, 12, 19, 41, 
6, 9, 21, 14, 18, 61, 36, 49, 46, 13, 24, 37, 39, 38, 56, 31, 
21, 53, 61, 65, 6, 2, 2, 2, 0, 1, 0, 5, 0, 2, 0, 1, 1, 5, 1)), row.names = c(NA, 
-45L), groups = structure(list(group = c("grp1", "grp2", "grp3"
), .rows = structure(list(1:15, 16:30, 31:45), ptype = integer(0), class = c("vctrs_list_of", 
"vctrs_vctr", "list"))), row.names = c(NA, 3L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

【问题讨论】:

    标签: r


    【解决方案1】:

    问题可能与t.test 的输出结构有关。这是一个list。如果我们提取组件,即p.valueestimate,它将起作用

     ttestFun <- function(dat) {
       myTtest = t.test(x = dat[, 1], y = dat[, 2])
       return(myTtest$p.value)
     }
    

    -测试

    rollapply(df_ts, 7, FUN = ttestFun, fill = NA, by.column = FALSE)
    #2020-07-01 2020-07-02 2020-07-03 2020-07-04 2020-07-05 2020-07-06 2020-07-07 2020-07-08 2020-07-09 2020-07-10 2020-07-11 
    #        NA         NA         NA  0.7452034  0.8892572  0.9319528  0.8614528  0.9649029  0.9632735  0.9621904  0.8495438 
    #2020-07-12 2020-07-13 2020-07-14 2020-07-15 
    # 0.9795584         NA         NA         NA 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 2021-12-25
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2021-06-09
      • 2018-11-19
      相关资源
      最近更新 更多