Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:自动生存分析_R_For Loop_Survival Analysis - Fatal编程技术网

R:自动生存分析

R:自动生存分析,r,for-loop,survival-analysis,R,For Loop,Survival Analysis,下面是示例数据,其中在基因组矩阵中,每一行对应一个基因(“样本”),每个细胞对应一个患者的该基因的值,在该值之后命名该列(格式为“TCGA-\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”)。(问题如下) 因此,对于每个基因,我将患者分为“高表达”和“低表达”两类。例如,出现在low[[3]]中的患者是那些第三个基因(“TUR”)的表达低于该基因平均水平的患者。下面,我有一个patientID到生存时间的转换表(以天为单位) survival = NULL survival$s

下面是示例数据,其中在
基因组矩阵中,每一行对应一个基因(
“样本”
),每个细胞对应一个患者的该基因的值,在该值之后命名该列(格式为
“TCGA-\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”
)。(问题如下)

因此,对于每个基因,我将患者分为“高表达”和“低表达”两类。例如,出现在
low[[3]]
中的患者是那些第三个基因(
“TUR”
)的表达低于该基因平均水平的患者。下面,我有一个patientID到生存时间的转换表(以天为单位)

survival = NULL
survival$sampleID <- c("TCGA-K4-6303-01", "TCGA-DM-A28E-01", "TCGA-AY-6197-01", "TCGA-F4-6703-01", "TCGA-HB-KH8H-01", "TCGA-Y7-PIK2-01", "TCGA-A6-5657-01")
survival$X_OS <- c(256, 26, 88, 491, 553, 177, 732)
survival$sampleID <- chartr("-", "_", survival$sampleID)
survival=NULL
生存$sampleID(如果您只是要求一个工具来执行操作或提供统计建议,那么StackOverflow可能不是这个问题的合适位置。)

尽管如此,我还是建议对您的数据和代码的格式进行一些改进,这将有助于实现您在R中的目标。如果您没有明显的内存限制,您可以将“基因组矩阵”转换为长格式“data.frame”:

然后,您可以找出哪些患者的表达高于或低于平均水平,并创建一个“data.frame”:

然后添加“生存$X_OS”:

然后,假设您有一个函数
log\u rank\u test
,该函数接受两个向量并输出一个“p.value”,您可以使用如下内容:

#lapply(split(exprs[c("expr", "X_OS")], exprs$sample), 
#        function(x) log_rank_test(x$X_OS[x$expr == "high"], x$X_OS[x$expr == "low"]))
我正在尝试一种“data.table”方法,尽管它可能不是惯用的方法,或者因为我不熟悉它,所以可以改进:

library(data.table)
library(reshape2)
DT = as.data.table(genomicmatrix)
longDT = melt(DT, "sample", variable.name = "ID")
longDT[, expr := ifelse(findInterval(value, mean(value)) == 1, "high", "low"), by = sample]
longDT[, X_OS := survival$X_OS[match(ID, survival$sampleID)]]
head(longDT)
#   sample              ID      value expr X_OS
#1:    BIX TCGA_K4_6303_01 -0.4811441  low  256
#2:    HEF TCGA_K4_6303_01 -0.2665017  low  256
#3:    TUR TCGA_K4_6303_01  0.8367469 high  256
#4:    ZOP TCGA_K4_6303_01 -0.5868480  low  256
#5:    VAG TCGA_K4_6303_01 -0.0319600  low  256
#6:    BIX TCGA_DM_A28E_01  0.3435170 high   26
然后,运行
log\u rank\u test
函数,如下所示:

#longDT[, log_rank_test(X_OS[expr == "high"], X_OS[expr == "low"]), by = sample]
(如果您只需要一个工具来执行操作或提供统计建议,那么StackOverflow可能不是这个问题的合适位置。)

尽管如此,我还是建议对您的数据和代码的格式进行一些改进,这将有助于实现您在R中的目标。如果您没有明显的内存限制,您可以将“基因组矩阵”转换为长格式“data.frame”:

然后,您可以找出哪些患者的表达高于或低于平均水平,并创建一个“data.frame”:

然后添加“生存$X_OS”:

然后,假设您有一个函数
log\u rank\u test
,该函数接受两个向量并输出一个“p.value”,您可以使用如下内容:

#lapply(split(exprs[c("expr", "X_OS")], exprs$sample), 
#        function(x) log_rank_test(x$X_OS[x$expr == "high"], x$X_OS[x$expr == "low"]))
我正在尝试一种“data.table”方法,尽管它可能不是惯用的方法,或者因为我不熟悉它,所以可以改进:

library(data.table)
library(reshape2)
DT = as.data.table(genomicmatrix)
longDT = melt(DT, "sample", variable.name = "ID")
longDT[, expr := ifelse(findInterval(value, mean(value)) == 1, "high", "low"), by = sample]
longDT[, X_OS := survival$X_OS[match(ID, survival$sampleID)]]
head(longDT)
#   sample              ID      value expr X_OS
#1:    BIX TCGA_K4_6303_01 -0.4811441  low  256
#2:    HEF TCGA_K4_6303_01 -0.2665017  low  256
#3:    TUR TCGA_K4_6303_01  0.8367469 high  256
#4:    ZOP TCGA_K4_6303_01 -0.5868480  low  256
#5:    VAG TCGA_K4_6303_01 -0.0319600  low  256
#6:    BIX TCGA_DM_A28E_01  0.3435170 high   26
然后,运行
log\u rank\u test
函数,如下所示:

#longDT[, log_rank_test(X_OS[expr == "high"], X_OS[expr == "low"]), by = sample]

非常非常有帮助。考虑到真实的数据有大约50名患者和20000个基因(“样本”),你是否预计在处理过程中会出现问题?我想这不会是一个问题;但是,如果您使用像“data.table”或“dplyr”这样专为快速数据处理而设计的包,您可能会从效率方面受益。也许,如果你真的选择像上面这样的格式,并且知道你期望的是什么,你可以发布一个“如何高效地从这个到那个?”的问题,有很多熟悉不同软件包的人可以提供帮助。我将尝试这种方法,看看我在效率方面是否有任何问题。我想问一下,对于您的答案中根据
exprs
定义的输出,您可以看到患者
TCGA\u F4\u 6703\u 01
出现两次(一次在ID末尾出现
\u 1
)第一个基因BIX。这不应该发生。我运行了代码,这在这个特定的病人身上发生过几次。你知道这是为什么吗?没关系,我刚刚看到在
基因组矩阵中对患者定义了两次。我的错误。最后一个问题:在创建元素
longDF
时,我遇到了以下错误:
在重塑long时出错(数据,idvar=idvar,timevar=timevar,variable=variable,:“times”的长度是错误的。
你知道这可能是什么问题吗?非常有用。考虑到实际数据有大约50名患者和20000个基因(“样本”),你是否预计在处理过程中会出现问题?我想这不会是一个问题;不过,你可能会从中受益,(就效率而言)如果您使用“data.table”或“dplyr”等专为快速数据处理而设计的软件包。也许,如果您确实选择使用上述格式,并且知道您期望的是什么,您可以发布“如何从这个高效地到那个高效地?”问题,有很多熟悉不同软件包的人可以提供帮助。我将尝试这种方法,看看我在效率方面是否有任何问题。我想问一下,对于您的答案中遵循
exprs
定义的输出,您可以看到patient
TCGA_F4_6703_01
出现两次(一次,ID末尾有一个
\u 1
)对于第一个基因BIX。这不应该发生。我运行了代码,这在这个特定的患者身上发生了几次。你知道为什么吗?不管怎样,我刚刚看到患者在
基因组矩阵中定义了两次。我的错误。最后一个问题:在创建元素
longDF
时,我遇到了以下错误:r:
重塑长度时出错(data,idvar=idvar,timevar=timevar,varing=variable,:“times”的长度错误。
您知道可能是什么问题吗?
library(data.table)
library(reshape2)
DT = as.data.table(genomicmatrix)
longDT = melt(DT, "sample", variable.name = "ID")
longDT[, expr := ifelse(findInterval(value, mean(value)) == 1, "high", "low"), by = sample]
longDT[, X_OS := survival$X_OS[match(ID, survival$sampleID)]]
head(longDT)
#   sample              ID      value expr X_OS
#1:    BIX TCGA_K4_6303_01 -0.4811441  low  256
#2:    HEF TCGA_K4_6303_01 -0.2665017  low  256
#3:    TUR TCGA_K4_6303_01  0.8367469 high  256
#4:    ZOP TCGA_K4_6303_01 -0.5868480  low  256
#5:    VAG TCGA_K4_6303_01 -0.0319600  low  256
#6:    BIX TCGA_DM_A28E_01  0.3435170 high   26
#longDT[, log_rank_test(X_OS[expr == "high"], X_OS[expr == "low"]), by = sample]