Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Ggplot2 如何创建用于获取PCA绘图的R应用程序_Ggplot2_Plot_Shiny_Pca_Scatter - Fatal编程技术网

Ggplot2 如何创建用于获取PCA绘图的R应用程序

Ggplot2 如何创建用于获取PCA绘图的R应用程序,ggplot2,plot,shiny,pca,scatter,Ggplot2,Plot,Shiny,Pca,Scatter,我刚刚开始学习R Shinny,我正在尝试创建一个Shinny应用程序,它可以生成散点图进行主成分分析,并允许用户在散点图的X轴和Y轴上选择各种主成分。我知道如何编写R代码来进行PCA,但我似乎无法获得闪亮的应用程序来满足我的需要。。我尝试了以下Iris kmeans聚类的示例,但在获取散点图时遇到了问题。这是我到目前为止的代码。我的原始数据集中的基因是行,样本是列,列1到列10是癌症样本,列11到列20是正常的: data<-read.table("genes_data.txt", he

我刚刚开始学习R Shinny,我正在尝试创建一个Shinny应用程序,它可以生成散点图进行主成分分析,并允许用户在散点图的X轴和Y轴上选择各种主成分。我知道如何编写R代码来进行PCA,但我似乎无法获得闪亮的应用程序来满足我的需要。。我尝试了以下Iris kmeans聚类的示例,但在获取散点图时遇到了问题。这是我到目前为止的代码。我的原始数据集中的基因是行,样本是列,列1到列10是癌症样本,列11到列20是正常的:

data<-read.table("genes_data.txt", header=TRUE, row.names=1)
pca_data<-prcomp(t(data), scale=T)
summary(pca_data)
pca_sig.var<-pca_data$sdev^2
pca_sig.var.per<-round(pca_sig.var/sum(pca_sig.var)*100, 1)

pca_sig.data<-data.frame(Sample=rownames(pca_data$x), PC1=pca_data$x[,1], PC2=pca_data$x[,2], PC3=pca_data$x[,3], PC4=pca_data$x[,4], PC5=pca_data$x[,5])
pca_sig.data<-pca_sig.data[-1]

pca_sig.data2<-pca_sig.data
pca_sig.data2$category=rep("CANCER", 20)
pca_sig.data2$category[11:20]=rep("NORMAL", 10)
View(pca_sig.data2)
ggplot(data=pca_sig.data2, aes(x=PC1, y=PC2, label=category, colour=category))+
  geom_point(size=2, stroke=1, alpha=0.8, aes(color=category))+
  xlab(paste("PCA1 - ", pca_sig.var.per[1], "%", sep=""))+
  ylab(paste("PCA2 - ", pca_sig.var.per[2], "%", sep=""))+
  theme_bw()+
  ggtitle("My PCA Graph")


ui<-pageWithSidebar(
  headerPanel('Gene Data PCA'),
  sidebarPanel(
    selectInput('xcol', 'X Variable', names(pca_sig.data2[,1:5])),
    selectInput('ycol', 'Y Variable', names(pca_sig.data2[,1:5]),
                selected=names(pca_sig.data2)[[2]])

  ),
  mainPanel(
    plotOutput('plot1')
  )
)


server<- function(input, output, session) {

  # Combine the selected variables into a new data frame
  selectedData <- reactive({
    pca_sig.data2[, c(input$xcol, input$ycol)]
  })

  output$plot1 <- renderPlot({
    palette(c("#E41A1C", "#377EB8"))

    par(mar = c(5.1, 4.1, 0, 1))
    plot(selectedData(),
         col=selectedData()$category,
         pch = 20, cex = 3)
    points(selectedData()[,1:5], pch = 4, cex = 4, lwd = 4)
  })

}
shinyApp(ui = ui, server = server)
最后,当我运行应用程序时,我得到一个错误:未定义的列被选中

此外,为了简单起见,让我们假设我想要对其进行PCA的原始数据集看起来像这样。实际上,我有大约600个基因和20个样本:

probeID<-c("gene1", "gene2", "gene3", "gene4","gene5")

BCR1<-c(28.005966, 30.806433, 17.341375, 17.40666, 30.039436)
BCR2<-c(30.973469, 29.236025, 30.41161, 20.914383, 20.904331)
BCR3<-c(26.322796, 25.542833, 22.460772, 19.972183, 30.409641)
BCR4<-c(26.441898, 25.837685, 23.158352, 20.379173, 33.81327)
BCR5<-c(39.750206, 19.901133, 28.180124, 22.668673, 25.748884)
CTL6<-c(23.004385, 28.472675, 23.81621, 26.433413, 28.851719)
CTL7<-c(22.239546, 28.741674, 23.754929, 26.015385, 28.16368)
CTL8<-c(29.590443, 30.041988, 21.323061, 24.272501, 18.099016)
CTL9<-c(15.856442, 22.64224, 29.629637, 25.374926, 22.356894)
CTL10<-c(38.137985, 24.753338, 26.986668, 24.578161, 19.223558)
data<-data.frame(probeID, BCR1, BCR2, BCR3, BCR4, BCR5, CTL6, CTL7, CTL8, CTL9, CTL10)
其中BCR1到BCR5是癌症样本,CTL6到CTL10是正常样本。

这就是您想要的吗

server<- function(input, output, session) {

    # Combine the selected variables into a new data frame
    selectedData <- reactive({
        pca_sig.data2[c(input$xcol, input$ycol, 'category')]
    })

    output$plot1 <- renderPlot({
        palette(c("#E41A1C", "#377EB8"))

        plot(selectedData()[,c(1:2)], col=factor(selectedData()$category), pch = 20, cex = 3)
        points(selectedData()[,c(1:2)], pch = 4, cex = 4, lwd = 4)
    })

}
结果是这样的:

这就是你想要的吗

server<- function(input, output, session) {

    # Combine the selected variables into a new data frame
    selectedData <- reactive({
        pca_sig.data2[c(input$xcol, input$ycol, 'category')]
    })

    output$plot1 <- renderPlot({
        palette(c("#E41A1C", "#377EB8"))

        plot(selectedData()[,c(1:2)], col=factor(selectedData()$category), pch = 20, cex = 3)
        points(selectedData()[,c(1:2)], pch = 4, cex = 4, lwd = 4)
    })

}

结果如下:

为了让我们帮助您,您介意与我们共享数据吗?当然,很抱歉。请看我上面编辑的帖子,我添加了一些模拟数据集。谢谢您在pointsselectedData[,1:5]中有一个输入错误。。。。它试图用五列数据绘制点。改成[,1:2]行。注意,谢谢Teofil!为了让我们帮助您,您介意与我们共享数据吗?当然,很抱歉。请看我上面编辑的帖子,我添加了一些模拟数据集。谢谢您在pointsselectedData[,1:5]中有一个输入错误。。。。它试图用五列数据绘制点。改成[,1:2]行。注意,谢谢Teofil!对这正是我想要的,非常感谢你,比尔。它工作得很好!对这正是我想要的,非常感谢你,比尔。它工作得很好!