【问题标题】:How to convert formula equation for functions in R (wilcox test) etc?如何转换 R(wilcox 测试)等函数的公式方程?
【发布时间】:2021-12-20 21:15:30
【问题描述】:

我正在尝试创建一个函数来接受 wilcox 测试的不同公式组。我不明白如何更改公式方程以使其模块化。

下面的例子:

library(rstatix)
library(dplyr)
data("ToothGrowth")
df <- ToothGrowth

df %>%
      group_by(dose) %>%
      wilcox_test(data =., len ~ supp) %>%
      adjust_pvalue(method = "bonferroni") %>%
      add_significance("p.adj")


# This Does Not Work

wilcox_test2 <- function(df,x,y){
return(df %>%
  group_by(dose) %>%
  wilcox_test(data =., x ~ y) %>%
  adjust_pvalue(method = "bonferroni") %>%
  add_significance("p.adj"))

}

wilcox_test2(df,df$len,df$supp)

【问题讨论】:

  • 请包含相关库,以便更容易重现您的问题。我不认为wilcox_textadjust_pvalueadd_significancebase 的一部分。
  • 很抱歉,我清理了我的环境并运行了该示例,我相信这些是库。它更像是 len ~ supp 方程,它与 wilcox_test 无关
  • 而不是 x 和 y 作为参数,为什么不直接使用 formula 并将其传递给 wilcox
  • 我尝试使用公式,但如下所述,我不知道管理字符串与向量并将其正确粘贴到公式中

标签: r statistics


【解决方案1】:

另一种方法是将公式作为一个对象传递:

wilcox_test3 <- function(df, form){
  return(df %>%
           group_by(dose) %>%
           wilcox_test(data =., form) %>%
           adjust_pvalue(method = "bonferroni") %>%
           add_significance("p.adj"))
  
}
wilcox_test3(df, len ~ supp)
# A tibble: 3 x 10
   dose .y.   group1 group2    n1    n2 statistic       p  p.adj p.adj.signif
* <dbl> <chr> <chr>  <chr>  <int> <int>     <dbl>   <dbl>  <dbl> <chr>       
1   0.5 len   OJ     VC        10    10      80.5 0.0232  0.0696 ns          
2   1   len   OJ     VC        10    10      88.5 0.00403 0.0121 *           
3   2   len   OJ     VC        10    10      49.5 1       1      ns          

【讨论】:

    【解决方案2】:

    我们可以将列名作为参数传递,并使用reformulate在函数中创建公式

    library(dplyr)
    library(rstatix)
    wilcox_test2 <- function(df, x, y){
    
     df %>%
       group_by(dose) %>%
       wilcox_test(data =., reformulate(y, response = x) ) %>%
       adjust_pvalue(method = "bonferroni") %>%
       add_significance("p.adj")
    
    }
    

    -测试

    > wilcox_test2(df, "len", "supp")
    # A tibble: 3 × 10
       dose .y.   group1 group2    n1    n2 statistic       p  p.adj p.adj.signif
    * <dbl> <chr> <chr>  <chr>  <int> <int>     <dbl>   <dbl>  <dbl> <chr>       
    1   0.5 len   OJ     VC        10    10      80.5 0.0232  0.0696 ns          
    2   1   len   OJ     VC        10    10      88.5 0.00403 0.0121 *           
    3   2   len   OJ     VC        10    10      49.5 1       1      ns          
    

    【讨论】:

    • 哇,很好,人们是如何发现重新制定的?我正忙着使用 formula_test
    • @Jonathan 和as.formula,你需要pasteas.formula(paste(x, '~', y))
    猜你喜欢
    • 2022-01-23
    • 2023-02-14
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多