【问题标题】:Finding Index at which the Measure First equals or Exceeds 70% of Max and Falls Below 70% of Max查找首先测量值等于或超过最大值的 70% 并低于最大值的 70% 的索引
【发布时间】:2017-03-18 19:15:01
【问题描述】:

首先,我有一个数据表 (RRLong),其中包含受试者 ID 号 (n = 15)、受试者接受的试验类型(10 种试验类型,受试者内因素),以及测试会话(5 块,学科内因素)。在每次试验中,对于每个块,有 80 个连续的 bin 来测量响应。最后一列包含给定 bin 的响应率 (RR)。

ID  TrialType   Block   Bin RR
1   E.Cue       1       1   0.369047619
1   E.Cue       1       2   0.447916667
1   E.Cue       1       3   0.435185185

RR 被绘制为bin 的函数时,数据近似于高斯分布的形状。

根据这些数据,我需要为每个区块上每个试验类型的每个受试者计算以下度量(因此,基于受试者、区块和试验类型的数量有 750 个值):

  1. PR:最大响应率
  2. PT:最大响应率所在的bin
  3. Initial:响应率首先等于或超过最大响应率的 70% 的 bin。
  4. Final:响应率首先等于或低于最大响应率的 70% 的 bin;此值必须晚于 PT 的值。

我已经设法使用dplyr 使用以下代码提取前两个度量:

MolarMeasures <- RRLong %>% 
   group_by(ID,TrialType,Block) %>%                            
   slice(which.max(RR)) %>%
   select(PT = Bin, PR = RR)

但是,我不知道如何计算最后两个度量。我将不胜感激任何见解/建议。如果需要任何其他信息,请告诉我。

【问题讨论】:

    标签: r


    【解决方案1】:

    您没有提供足够的数据来进行测试,但这应该可以。

    MolarMeasures <- RRLong %>% 
       group_by(ID,TrialType,Block) %>%                            
       summarize(
          PR = max(RR),
          PT = Bin[which.max(RR)],
          Initial = Bin[which.max(RR >= 0.7 * PR)],
          Final = which.max((RR <= 0.7 * PR) & cumsum(RR >= PR)),
          Final = ifelse(Final == 1, NA, Bin[Final])
       )
    

    解释:PRPT 很简单。对于最后两个,我们利用 TRUE/FALSE 可以被视为 1/0,which.max 将返回 first 最大值的索引(第一个 TRUE)。对于Final,我们还使用cumsum 来确保至少满足最大值一次。 cumsum 结果将是最大值之前的0/FALSE 和之后的(不是0)/TRUE

    【讨论】:

    • 这很完美!如果你不介意的话,我还有两个问题。 1) 如果响应率从未低于最大值的 70%,则函数为 Final 返回值 1。我可以将这些值分配为稍后重新编码为 NA,但是在 summarize 函数中还有其他方法吗? 2) 如果我希望将我的分析限制在一定范围内(比如 2-80,而不是 1-80),那么 PTinitialfinal 的测量值会相差一个,因为索引值用于确定位置。有没有办法使用Bin 来定位这些值?
    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多