如何使用R在t检验中只运行比较的子集?
我用R来做一些统计,这个问题是从stats-exchange复制的,因为它不是真正的s-stats问题,所以我认为它可能与stack-overflow()更相关。虽然这里给出的答案(对数据进行子集,然后运行测试)在逻辑上似乎是正确的,但如果不对每个聚糖重复100条不同的代码,我无法找到这样做的方法(见下文): 我已经从原始数据生成了data.frame。数据包括一个数字变量(折叠变化)和两个因素变量(dis_状态,包括RF和con,以及聚糖,包括100种不同的聚糖) 这是一个可重复的示例,每个聚糖只有3个聚糖和3个“RF”和3个“con”如何使用R在t检验中只运行比较的子集?,r,statistics,R,Statistics,我用R来做一些统计,这个问题是从stats-exchange复制的,因为它不是真正的s-stats问题,所以我认为它可能与stack-overflow()更相关。虽然这里给出的答案(对数据进行子集,然后运行测试)在逻辑上似乎是正确的,但如果不对每个聚糖重复100条不同的代码,我无法找到这样做的方法(见下文): 我已经从原始数据生成了data.frame。数据包括一个数字变量(折叠变化)和两个因素变量(dis_状态,包括RF和con,以及聚糖,包括100种不同的聚糖) 这是一个可重复的示例,每个聚
> example
dis_status glycan fold_change
1 RF a 4.83433185
2 RF a 3.88519084
3 RF a 2.80368849
4 con a 0.94730194
5 con a 1.91278688
6 con a 1.23225002
7 RF b 4.07173876
8 RF b 5.70383491
9 RF b 0.05282291
10 con b 1.34631723
11 con b 4.26723583
12 con b 4.26723583
13 RF c 2.20887813
14 RF c 4.62220094
15 RF c 0.94730194
16 con c 0.53597973
17 con c 2.92572685
18 con c 1.58871049
> dput(example)
structure(list(dis_status = structure(c(2L, 2L, 2L, 1L, 1L, 1L,
2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), .Label = c("con",
"RF"), class = "factor"), glycan = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("a",
"b", "c"), class = "factor"), fold_change = c(4.834331853, 3.885190842,
2.803688487, 0.947301944, 1.912786879, 1.232250023, 4.071738761,
5.703834911, 0.052822912, 1.346317234, 4.267235834, 4.267235834,
2.208878135, 4.622200944, 0.947301944, 0.535979733, 2.925726849,
1.588710491)), class = "data.frame", row.names = c(NA, -18L))
我可以对数据进行t.测试:
ad_nonpaired <- pairwise.t.test(stats_df$fold_change, stats_df$dis_status:stats_df$glycan,
paired = F,
pool.sd = F,
p.adj = "none")
看起来您可能希望将其用于一般工作流程。
//列出两个通用列表
compareList我不确定这是否是一种完美的方法,但您可以将数据框子集,只保留单个聚糖的值,然后在每个dis_状态水平之间进行t检验:
库(tidyverse)
水平\聚糖=水平(例如$glycan)
pvalue=NULL
对于(i级聚糖)
{
温度%过滤器(聚糖==i)
t您可以通过聚糖拆分数据框,然后通过dis_状态组进行t检验,无需任何外部库:
结果测试;
as.numeric(TAPLY(x$fold\u change,x$dis\u status,mean))->ta;
data.frame(聚糖=as.character(x$glycan[1]),
mean.con=ta[1],
平均值RF=ta[2],
pvalue=数值形式(测试$p.value));
}))
根据评论,它给出了您想要的数据帧
结果
聚糖平均值.con平均值.RF pvalue
a 1.364113 3.841070.03403083
b 3.293596 3.276132 0.99335164
c 1.683472 2.592794 0.52325471
您能否提供一个可复制的数据示例?这将使试图帮助您的人的工作更容易(请参阅:)谢谢我用最小的重复编辑了这个问题,希望这也能让事情更清楚?虽然这似乎在exmaple上起作用,但当我用我的“pairwise.t.test”替换“t.test”代码块时代码块似乎不起作用?我相应地编辑了我的答案,以使用pairwise.t.test
函数。让我看看它现在是否工作。谢谢,这似乎工作得很好。您是否可以使用我在问题中使用的“pairwise.t.test”参数更新答案?我将使用pairwise.t.test并更改其中的参数,但如果我简单地替换代码,它似乎不起作用?完成。它实际上也使它变得更简单。效果很好,关于如何从这个列表中提取具有聚糖名称和p.值的数据框,有什么建议吗?现在更新为提供一个数据框而不是列表。是的,我认为它不需要对多个假设检验进行校正,因为它是一个简单的2组检验
R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] en_NZ.UTF-8/en_NZ.UTF-8/en_NZ.UTF-8/C/en_NZ.UTF-8/en_NZ.UTF-8
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] knitr_1.25 broom_0.5.2 ggrepel_0.8.1 readxl_1.3.1 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.3 purrr_0.3.3
[9] readr_1.3.1 tidyr_1.0.0 tibble_2.1.3 ggplot2_3.2.1 tidyverse_1.2.1 limma_3.38.3 hexbin_1.27.3 vsn_3.50.0
[17] Biobase_2.42.0 BiocGenerics_0.28.0
loaded via a namespace (and not attached):
[1] Rcpp_1.0.2 lubridate_1.7.4 lattice_0.20-38 gtools_3.8.1 rprojroot_1.3-2 assertthat_0.2.1 zeallot_0.1.0 digest_0.6.22
[9] utf8_1.1.4 plyr_1.8.4 R6_2.4.0 cellranger_1.1.0 backports_1.1.5 evaluate_0.14 highr_0.8 httr_1.4.1
[17] pillar_1.4.2 gplots_3.0.1.1 zlibbioc_1.28.0 rlang_0.4.1 lazyeval_0.2.2 curl_4.2 rstudioapi_0.10 gdata_2.18.0
[25] preprocessCore_1.44.0 desc_1.2.0 labeling_0.3 splines_3.5.2 munsell_0.5.0 xfun_0.10 compiler_3.5.2 modelr_0.1.5
[33] pkgconfig_2.0.3 tidyselect_0.2.5 fansi_0.4.0 crayon_1.3.4 withr_2.1.2 bitops_1.0-6 grid_3.5.2 nlme_3.1-141
[41] jsonlite_1.6 gtable_0.3.0 lifecycle_0.1.0 affy_1.60.0 magrittr_1.5 scales_1.0.0 KernSmooth_2.23-16 cli_1.1.0
[49] stringi_1.4.3 affyio_1.52.0 testthat_2.2.1 xml2_1.2.2 ellipsis_0.3.0 generics_0.0.2 vctrs_0.2.0 tools_3.5.2
[57] glue_1.3.1 hms_0.5.2 pkgload_1.0.2 yaml_2.2.0 colorspace_1.4-1 BiocManager_1.30.9 caTools_1.17.1.2 rvest_0.3.4
[65] haven_2.1.1
It seems like you might want to use this for your general work-flow.
// Make two generic lists
compareList <- list()
compareListTwo <- list()
//Filter through each glycan for each instance of the variable name
for(i in 1:length(stats_df))
{
compareList[i] = dplyr::filter(stats_df, stats_df$dis_status[i] == "RF")
}
for(j in 1:length(stats_df))
{
compareListTwo[j] = dplyr::filter(stats_df, stats_df$dis_status[j] == "con")
}
compareList <- unlist(compareList)
compareListTwo <- unlist(compareListTwo)
data.frame(compareList)
data.frame(compareListTwo)
newdf <- rbind(compareList,compareListTwo)