【问题标题】:Multiple paired wilcoxon testing across factors in a data.framedata.frame 中跨因素的多对 wilcoxon 测试
【发布时间】:2013-10-15 10:24:09
【问题描述】:

我发现自己经常需要对数据集的子集进行多次配对比较(子集由一两个因素提供)。 现在,我会以一种全面的方式,在一个函数中让这件事变得更容易一些。

这就是我所拥有的:

wilcox.pseudomedian <- function(x,conf.int=TRUE,na.rm=TRUE){

  if(length(x) > 3){
    ht <- wilcox.test(x,conf.int=conf.int,na.rm=na.rm)
    return(ht$estimate[[1]])
  }else{
    return(NaN)
  }
}

pairedwtest <- function(x,y){
  ht <- wilcox.test(x,y,paired=TRUE)
  out <- wilcox.reportAPA(ht)
  return(out)
}

wilcox.reportAPA <- function(ht){

  out <- paste(names(ht$statistic)[[1]],"=",ht$statistic,",p=",ht$p.value,sep="")
  return(out)
}

然后,我希望能够以我提供的方式将这些函数应用于数据框。这就是我到目前为止所得到的......

wilcox.masstest <- function(data,factorlist,speakervar,groupvar,measurevar){
  melt(data,id.vars=c(factorlist,speakervar,groupvar),measure.vars=measurevar) -> mdf
  form <- as.formula(paste(paste(c(factorlist,speakervar), collapse= "+"),"~",groupvar))

  outdf <- dcast(mdf, form,fun.aggregate=wilcox.pseudomedian)
  outdfn <- names(outdf)
  mlvls <- setdiff(outdfn,factorlist)

  for(curr in 2:(length(mlvls))){
      fac1 <- mlvls[curr -1 ]
      fac2 <- mlvls[curr]
      facname <- paste(fac1,fac2,sep="-")
      facnamerev <- paste(fac2,fac1,sep="-")

      ddply(outdf,factorlist,summarize,results=pairedwtest(get(fac1),get(fac2))) -> out
  }
  return(out)
}

.. 但问题在于最后的 ddply 调用。 outdf 数据框将如下所示:(最后三列是我想要迭代测试的数据的每个子集内的差异,这些数据由 Patient 列之前的所有列的因子级别给出(在这种情况下))。

           Task  Patient    Control    Med OFF     Med ON
115 Spontaneous    P45zi 0.12044504 0.06940783 0.12044504
116 Spontaneous    P46zi 0.20694651 0.13495089 0.02022240
117 Spontaneous    P47zi 0.13556909 0.10433863 0.10433863
118 Spontaneous    P48zi 0.07519881 0.02795007 0.12044504
119 Spontaneous    P49zi 0.02022240 0.01220851 0.12044504

现在,对 ddply 的调用失败并显示

“get(fac1) 出错:找不到对象‘fac1’”

警告。 如何以某种方式向 ddply 提供因子的名称,以便在进行调用时可以找到变量。我确信我可以通过将调用粘贴在一起然后评估文本来做到这一点,但这似乎是一个非常糟糕的主意......

有什么想法吗?

【问题讨论】:

  • fac1fac2 应该是 data.frame outdf 中的列。
  • 确实如此,但我需要的是fac1fac2contents 应该是outdf 中的列名。

标签: r statistics plyr reshape2


【解决方案1】:

如果你也提供一个示例数据集,它会更容易帮助你。然而问题可能就这么简单:

> mlvls <- runif(20, 1,10)
> mlvls[2] 
[1] 6.617676
> mlvls[3] 
[1] 6.788338
> fac1 <- mlvls[2] 
> fac2 <- mlvls[3]
> get(fac1)          # will not work
Fehler in get(fac1) : ungültiges erstes Argument
> get("fac2")        # will work
[1] 6.788338

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 2022-11-15
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多