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