首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.I希望对数据挖掘中的每一列执行pairwise.t.test。

.I希望对数据挖掘中的每一列执行pairwise.t.test。
EN

Stack Overflow用户
提问于 2020-03-27 14:08:01
回答 2查看 138关注 0票数 0

数据帧生成的小提琴图解各列中的数字表示信号相对于细胞核内另一个信号的定位。有3个治疗条件和7个时间点的治疗+2控制,总共23列(见小提琴情节)。我想对每一列执行t测试或Wilcox t测试。我想我以前用过pairwise.t.test(Chr)。但是,该函数需要定义如何对数据进行分组,我希望按列对数据分组。我导入了我的数据:

代码语言:javascript
复制
Chr <- read_csv("Chromocenters-intensity.csv", 
+     na = "NA")

用列规范解析: cols( .default = col_double() )

将数据集导入R

然后试着:

代码语言:javascript
复制
 pairwise.t.test(Chr, cols())

按顺序(Y)错误:在'orderVector1‘中未实现的类型'list’

代码语言:javascript
复制
pairwise.wilcox.test(Chr,g=cols(Chr))

错误:一些col_types不是S3收集器对象:1

我不明白这些错误意味着什么。

正常的t.test可以正常工作:

代码语言:javascript
复制
t.test(Chr$S0,Chr$S1)

韦尔奇二样t检验 资料来源: Chr$S0和Chr$S1 t= 0.85955,df = 154.12,p值= 0.3914备选假设:均值的真实差异不等于0 95 %的置信区间:-1.920629 4.879370样本估计:x均值平均值为y 100.41579 98.93642。

但是,我如何将其扩展到逐列包含每一列呢?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-03-27 14:16:46

您可以使用expand.gridapply

代码语言:javascript
复制
data <- as.data.frame(sapply(1:23,function(x){runif(470,1,200)}))
names(data) <-c(paste0("S",0:7),paste0("N",1:7),paste0("P",1:7),"TKO")
pairs <- expand.grid(names(data),names(data))
result <- data.frame(pairs,p.val = apply(pairs,1,function(x){t.test(data[x[1]],data[x[2]])$p.val}))
result
    Var1 Var2          p.val
1     S0   S0 1.000000000000
2     S1   S0 0.573722556263
3     S2   S0 0.874552764274
4     S3   S0 0.467670724537
5     S4   S0 0.700539636188
6     S5   S0 0.736422364244
7     S6   S0 0.599066387580
8     S7   S0 0.940641228509
9     N1   S0 0.727290760056
10    N2   S0 0.057120608982
11    N3   S0 0.523554180769
12    N4   S0 0.485633891380

别忘了以后对多个测试进行修正。

票数 0
EN

Stack Overflow用户

发布于 2020-03-27 14:22:43

嗨,欢迎来到堆栈溢出!

首先,确保您对正在运行的多个测试做了一些p值校正,?p.adjust可能会有所帮助。

其次,您的问题需要从数据集列中获取所有可能的配对,这是?combn要做的工作:

代码语言:javascript
复制
mtcars_numbers <- dplyr::select_if(mtcars, is.numeric) # simulate some data like you describe

?combn
all_pairs <- combn(names(mtcars_numbers), 2, simplify = F)
all_pairs # I wanted a this to be a list for lapply, but you can get a matrix with simplify=T

然后对每对进行迭代,我使用的是?lapply(),但是可以使用for循环或其他函数:

代码语言:javascript
复制
lapply(all_pairs,
       function(x) {
         t.test(mtcars[[x[1]]], mtcars[[x[2]]])
       })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60887670

复制
相关文章

相似问题

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