You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)) 

问题原因

  1. 未将LDA模型输出的线性判别得分(LD1、LD2等)提取并合并到原始数据框中,ggplot2无法直接读取LDA对象内的得分数据
  2. 之前的绘图代码参数调用错误(比如直接将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:25:32