如何在R语言LDA分析中绘制LD1与LD2的散点图?
求助:LDA分析后绘制LD1 vs LD2散点图报错解决
我是R语言新手,已对数据集tme.lda完成LDA分析,控制台可查看LD1至LD6的结果,但尝试多种绘图方法时均出现报错(如LD1对象未找到、fortify错误等)。以下是我的数据集结构、已编写的LDA代码及尝试过的绘图代码,请求指导如何绘制LD1 vs LD2的散点图:
数据集结构
dput(head(tme.lda)) structure(list(Word = structure(1:6, levels = c("bene", "bile", "casa", "come", "posso", "tutto", "vero"), class = "factor"), f0min = c(184L, 193L, 189L, 199L, 175L, 144L), f0max = c(229L, 226L, 198L, 225L, 192L, 188L), F1 = c(600L, 347L, 980L, 531L, 550L, 432L), F2 = c(2406L, 2695L, 1759L, 997L, 996L, 1901L ), F4 = c(4125L, 4403L, 3837L, 3988L, 3909L, 4171L), max_F0 = c(143L, 130L, 124L, 133L, 123L, 120L)), row.names = c(NA, 6L), class = "data.frame")
已编写的LDA代码
View(tme.lda) #lDFA analysis with "WORD" as grouping factor tme.lda<-cbind(tme[,5],tme.lda[,1:6]) names(tme.lda) #> [1] "tme[, 5]" "f0min" "f0max" "F1" "F2" "F4" "max_F0" names(tme.lda)=c("Word","f0min","f0max","F1","F2","F4","max_F0") names(tme.lda) #> [1] "Word" "f0min" "f0max" "F1" "F2" "F4" "max_F0" library(MASS) lda(Word~f0min+f0max+F1+F2+F4+max_F0,data = tme.lda)
尝试过的绘图代码
plot(Word, panel = tme.lda, abbrev = FALSE, xlab = "LD1", ylab = "LD2") plot(x, panel = panel.lda, cex = 0.7, dimen=2, abbrev = FALSE, xlab = "LD1", ylab = "LD2") ggplot(Word, panel = tme.lda, cex = 0.7, dimen=2, xlab = "LD1", ylab = "LD2") ggplot2::aes(LD1,LD2) (Word, panel = tme.lda, cex = 0.7, dimen=2, xlab = "LD1", ylab = "LD2") plot.lda<-lda(Word~f0min+f0max+F1+F2+F4+max_F0,data = tme.lda) ggp <- ggplot(plot.lda, aes(x = LD1, y=LD2)) + geom_point(mapping = aes(colour=Word)) + ggtitle("LD1 Vs. LD2") ggp <- ggplot(plot.lda, aes(x = LD1, y=LD2))
问题原因
- 未将LDA模型输出的线性判别得分(LD1、LD2等)提取并合并到原始数据框中,
ggplot2无法直接读取LDA对象内的得分数据 - 之前的绘图代码参数调用错误(比如直接将LDA对象传给
ggplot(),或plot()函数参数不符合要求)
解决方法
步骤1:保存LDA模型并提取判别得分
首先将LDA分析结果保存为变量,再用predict()函数提取每个样本的LD得分:
library(MASS) # 保存LDA模型 lda_model <- lda(Word~f0min+f0max+F1+F2+F4+max_F0, data = tme.lda) # 提取LD得分并合并到原始数据 tme_lda_data <- cbind(tme.lda, predict(lda_model)$x)
步骤2:用ggplot2绘制散点图
现在数据框tme_lda_data中包含LD1、LD2和分组变量Word,可以直接绘图:
library(ggplot2) ggplot(tme_lda_data, aes(x = LD1, y = LD2, color = Word)) + geom_point(size = 2) + labs(x = "LD1", y = "LD2", title = "LD1 vs LD2散点图") + theme_minimal()
备用:基础绘图包实现
如果不想使用ggplot2,可以用基础R的plot()函数直接绘制LDA结果:
plot(lda_model, dimen = 2, col = tme.lda$Word, main = "LD1 vs LD2散点图") # 添加图例 legend("topright", legend = levels(tme.lda$Word), col = 1:nlevels(tme.lda$Word), pch = 1)
内容的提问来源于stack exchange,提问作者Debora Cinganelli
相关产品推荐
相关产品推荐

