首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌套dplyr数据集中运行配对t检验的问题

在嵌套dplyr数据集中运行配对t检验的问题
EN

Stack Overflow用户
提问于 2020-08-07 22:50:05
回答 1查看 74关注 0票数 3

我已经完成了新dplyr v1.0.0的逐行操作,并对nest_by函数在数据集的不同筒仓中建模的可能性感兴趣。

然而,我很难得到一个重复的措施分析工作。

这里有一个例子来说明它什么时候起作用

代码语言:javascript
复制
df1 <- data.frame(group = factor(rep(LETTERS[1:3],10)),
                  pred = factor(rep(letters[1:2],each=5,length.out=30)),
                  out = rnorm(30))

现在,根据group变量创建嵌套。

代码语言:javascript
复制
library(dplyr)
nest1 <- df1 %>% nest_by(group)
nest

我们可以查看这个新的特殊嵌套数据框架。

代码语言:javascript
复制
# A tibble: 3 x 2
# Rowwise:  group
# group               data
# <fct> <list<tbl_df[,2]>>
# a               [10 x 2]
# b               [10 x 2]
# c               [10 x 2]

现在,我们可以对它执行操作,就像线性回归一样,在原始组变量的每个级别上对out进行pred回归。

代码语言:javascript
复制
mods <- nest1 %>% mutate(mod = list(lm(out ~ pred, data = data)))

在这个新对象中,我们将一个新列添加到包含lm()对象的原始嵌套数据集中。

代码语言:javascript
复制
mods

#   # A tibble: 3 x 3
#   # Rowwise:  group
#   group               data mod   
#   <fct> <list<tbl_df[,2]>> <list>
#   1 A               [10 x 2] <lm>  
#   2 B               [10 x 2] <lm>  
#   3 C               [10 x 2] <lm>

我们可以看到这些模型的结果

代码语言:javascript
复制
library(broom)
mods %>% summarise(broom::tidy(mod))
#   A tibble: 6 x 6
#   Groups:   group [3]
#   group term        estimate std.error statistic  p.value
#   <fct> <chr>          <dbl>     <dbl>     <dbl>  <dbl>
# 1 A     (Intercept)   0.0684     0.295     0.232  0.823 
# 2 A     predb        -0.231      0.418    -0.553  0.595 
# 3 B     (Intercept)  -0.159      0.447    -0.356  0.731 
# 4 B     predb         0.332      0.633     0.524  0.615 
# 5 C     (Intercept)  -0.385      0.245    -1.57   0.154 
# 6 C     predb         0.891      0.346     2.58   0.0329

现在,我希望能够做同样的事情,但通过反复的措施t检验。

代码语言:javascript
复制
# dataset with grouping factor and two columns, each representing a measure at one of two timepoints
df2 <- data.frame(group = factor(rep(letters[1:3],10)),
                  t1 = rnorm(30),
                  t2 = rnorm(30))

# nest by grouping factor
nest2 <- df2 %>% nest_by(group)
nest2

# A tibble: 3 x 2

# Rowwise:  group
# group                 data
# <fct>   <list<tbl_df[,2]>>
# 1 a               [10 x 2]
# 2 b               [10 x 2]
# 3 c               [10 x 2]

现在,当我试图在新的嵌套数据集的每一层执行配对t检验时,使用与线性模型类似的过程.

代码语言:javascript
复制
mods2 <- nest2 %>% mutate(t = list(t.test(t1, t2, data = data)))

...I得到以下错误消息

代码语言:javascript
复制
Error: Problem with `mutate()` input `t`.
x object 't1' not found
i Input `t` is `list(t.test(t1, t2, data = data))`.
i The error occured in row 1.
Run `rlang::last_error()` to see where the error occurred.

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 22:52:56

data选项与formula方法一起使用,而以xy作为参数的's3‘方法则可以使用with包装

代码语言:javascript
复制
library(dplyr)
library(purrr)
nest2 %>%
      mutate(t = list(with(data, t.test(t1, t2))))
# A tibble: 3 x 3
# Rowwise:  group
#  group               data t      
#  <fct> <list<tbl_df[,2]>> <list> 
#1 a               [10 × 2] <htest>
#2 b               [10 × 2] <htest>
#3 c               [10 × 2] <htest>     

或者使用提取器($[[)

代码语言:javascript
复制
nest2 %>% 
    mutate(t = list(t.test(data$t1, data$t2)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63310058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档