首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有每个基因的下拉菜单的生存函数

具有每个基因的下拉菜单的生存函数
EN

Stack Overflow用户
提问于 2020-07-09 18:25:23
回答 1查看 51关注 0票数 0

我正在尝试制作一个闪亮的应用程序,你可以在我的输入中选择不同的miRNA,然后使用ggsurvplot绘制生存曲线。fitSurv中的函数有问题,但我不确定哪里做错了。

代码语言:javascript
运行
复制
library(dplyr) 
require(survminer)
library(tidyverse)
require(reshape2)
library(shiny)
library(tidyr)
require(survival)

示例数据:

代码语言:javascript
运行
复制
 df.miRNA.cpm <-     structure(list(`86` = c(5.57979757386892, 17.0240095264258, 4.28380151026145, 
13.0457611762755, 12.5531123449841), `175` = c(5.21619202802748, 
15.2849097474841, 2.46719979911461, 10.879496005461, 9.66416497290915
), `217` = c(5.42796072966512, 17.1413407297933, 5.15230233060323, 
12.2646127361351, 12.1031024927547), `394` = c(-1.1390337316217, 
15.1021660424984, 4.63168157763046, 11.1299079134792, 9.55572588729967
), `444` = c(5.06134249676025, 14.5442494311861, -0.399445049232868, 
7.45775961504073, 9.92629675808998)), row.names = c("hsa_let_7a_3p", 
"hsa_let_7a_5p", "hsa_let_7b_3p", "hsa_let_7b_5p", "hsa_let_7c_5p"
), class = "data.frame")

df.miRNA.cpm$miRNA <- rownames(df.miRNA.cpm)


  ss.survival.shiny.miRNA.miRNA <-   structure(list(ID = c("86", "175", "217", "394", "444"), TimeDiff = c(71.0416666666667, 
601.958333333333, 1130, 1393, 117.041666666667), Status = c(1L, 
1L, 0L, 0L, 1L)), row.names = c(NA, 5L), class = "data.frame")

合并两个示例数据帧:

代码语言:javascript
运行
复制
 data_prep.miRNA <- df.miRNA.cpm %>% 
tidyr::pivot_longer(-miRNA, names_to = "ID") %>% 
left_join(ss.survival.shiny.miRNA.miRNA)

连接数据示例:

代码语言:javascript
运行
复制
 > data_prep.miRNA
# A tibble: 153,033 x 5
   miRNA         ID     value TimeDiff Status
   <chr>         <chr>  <dbl>    <dbl>  <int>
 1 hsa_let_7a_3p 86     5.58      71.0      1
 2 hsa_let_7a_3p 175    5.22     602.       1
 3 hsa_let_7a_3p 217    5.43    1130        0
 4 hsa_let_7a_3p 394   -1.14    1393        0
 5 hsa_let_7a_3p 444    5.06     117.       1
 6 hsa_let_7a_3p 618    4.37    1508        0
 7 hsa_let_7a_3p 640    2.46    1409        0
 8 hsa_let_7a_3p 829    0.435    919.       0
 9 hsa_let_7a_3p 851   -1.36     976.       0
10 hsa_let_7a_3p 998    3.87    1196.       0
# … with 153,023 more rows

对于选定的MicroRNA,这是可行的:

代码语言:javascript
运行
复制
fitSurv <- survfit(Surv(data$TimeDiff, data$Status) ~ paste(cut(value   , quantile(value   , probs = c(0, 0.8)), include.lowest=T)), data = data_prep.miRNA[grep("hsa_let_7a_3p",data_prep.miRNA$miRNA),])

闪亮的:

代码语言:javascript
运行
复制
ui.miRNA <- fluidPage(
  selectInput("MicroRNA", "miRNA", choices = unique(data_prep.miRNA$miRNA)),

  plotOutput("myplot"))

server <- function(input, output, session) {
  
  data_selected <- reactive({
    filter(data_prep.miRNA, miRNA %in% input$MicroRNA)
  })
  
  output$myplot <- renderPlot({
    fitSurv <- survfit(Surv("TimeDiff", "Status") ~ paste(cut("value"   , quantile("value"   , probs = c(0, 0.8)), include.lowest=T)), data = data_selected)
    ggsurvplot(fitSurv ,title="", xlab="Time (Yrs)", ylab="Survival prbability",
               font.main = 8,
               font.x =  8,
               font.y = 8,
               font.tickslab = 8,
               font.legend=8,
               pval.size = 3,
               pval.coord = c(1000,1),
               size=0.4,
               legend = "right",
               censor.size=2,
               break.time.by = 365,
               pval =T,#"p=0.003",#"p=0.41",
               #xscale=365,
               #palette = c("#E7B800", "#2E9FDF"),
               #ggtheme = theme_bw(),
               risk.table = F,
               xscale=365.25,
               xlim=c(0,7*365))
    
    
  })
}

shinyApp(ui.miRNA, server)
EN

回答 1

Stack Overflow用户

发布于 2020-07-09 22:06:10

这句话有几个错误:

代码语言:javascript
运行
复制
fitSurv <- 
  survfit(Surv("TimeDiff", "Status") ~ paste(cut("value", quantile("value", probs = c(0, 0.8)), include.lowest=T)), 
          data = data_selected)

首先,data_selected是无功导线,而不是数据帧。如果您想要此无功导线返回的数据帧,则必须使用括号:data_selected()

接下来,您不能引用变量:TimeDiff而不是"TimeDiff",等等。

paste命令没有用。

您的cut只生成一个类别和NA类别。要获取两个间隔作为类别,请在quantile中使用probs = c(0, 0.8, 1)

最后,对TRUE使用T不是一个好主意,因为T可以设置为任何R对象,而TRUE是保留的工作。

最后,下面是更正后的代码:

代码语言:javascript
运行
复制
fitSurv <- 
  survfit(Surv(TimeDiff, Status) ~ cut(value, quantile(value, probs = c(0, 0.8, 1)), include.lowest=TRUE), 
          data = data_selected())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62812771

复制
相关文章

相似问题

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