数据帧生成的小提琴图解各列中的数字表示信号相对于细胞核内另一个信号的定位。有3个治疗条件和7个时间点的治疗+2控制,总共23列(见小提琴情节)。我想对每一列执行t测试或Wilcox t测试。我想我以前用过pairwise.t.test(Chr)。但是,该函数需要定义如何对数据进行分组,我希望按列对数据分组。我导入了我的数据:
Chr <- read_csv("Chromocenters-intensity.csv",
+ na = "NA")用列规范解析: cols( .default = col_double() )
然后试着:
pairwise.t.test(Chr, cols())按顺序(Y)错误:在'orderVector1‘中未实现的类型'list’
pairwise.wilcox.test(Chr,g=cols(Chr))错误:一些
col_types不是S3收集器对象:1
我不明白这些错误意味着什么。
正常的t.test可以正常工作:
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。
但是,我如何将其扩展到逐列包含每一列呢?
谢谢
发布于 2020-03-27 14:16:46
您可以使用expand.grid和apply。
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别忘了以后对多个测试进行修正。
发布于 2020-03-27 14:22:43
嗨,欢迎来到堆栈溢出!
首先,确保您对正在运行的多个测试做了一些p值校正,?p.adjust可能会有所帮助。
其次,您的问题需要从数据集列中获取所有可能的配对,这是?combn要做的工作:
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循环或其他函数:
lapply(all_pairs,
function(x) {
t.test(mtcars[[x[1]]], mtcars[[x[2]]])
})https://stackoverflow.com/questions/60887670
复制相似问题