r - R中的判别分析(FDA和MDA)图
问题描述
我正在尝试使用mda
andggplot2
包绘制灵活判别分析(FDA)和混合判别分析(MDA)的结果。我为线性判别分析(LDA)做了它,但我不知道继续。任何帮助或想法如何使用 ggplot2 对这些图进行编码?
代码:
require(MASS)
require(ggplot2)
require(mda)
require(scales)
irislda <- lda(Species ~ ., iris)
prop.lda = irislda$svd^2/sum(irislda$svd^2)
plda <- predict(irislda, iris)
dataset = data.frame(species = iris[,"Species"], irislda = plda$x)
p1 <- ggplot(dataset) + geom_point(aes(irislda.LD1, irislda.LD2, colour = species, shape = species), size = 2.5) +
labs(x = paste("LD1 (", percent(prop.lda[1]), ")", sep=""),
y = paste("LD2 (", percent(prop.lda[2]), ")", sep=""))
p1
irisfda <- fda(Species ~ ., data = iris, method = mars)
irismda <- mda(Species ~ ., data = iris)
解决方案
我相信这会达到你所追求的。fda 模型只有两个维度,所以它是 100% 解释的。mda 模型有 5 个维度,所以我只展示解释最多的两个维度。
library(dplyr)
irisfda <- fda(Species ~ ., data = iris, method = mars)
irisfda$fit$fitted.values %>%
as_tibble() %>%
bind_cols(species = iris[,"Species"]) %>%
ggplot() +
geom_point(aes(V1, V2, color = species, shape = species), size = 2.5) +
labs(x = paste("FDA1 (", percent(irisfda$percent.explained[1]/100), ")", sep=""),
y = paste("FDA2 (", percent(irisfda$percent.explained[2]/100 - irisfda$percent.explained[1]/100), ")", sep=""))
irismda <- mda(Species ~ ., data = iris)
irismda$fit$fitted.values %>%
as_tibble() %>%
bind_cols(species = iris[,"Species"]) %>%
ggplot() +
geom_point(aes(V1, V2, color = species, shape = species), size = 2.5) +
labs(x = paste("MDA1 (", percent(irismda$percent.explained[1]/100), ")", sep=""),
y = paste("MDA2 (", percent(irismda$percent.explained[2]/100 - irismda$percent.explained[1]/100), ")", sep=""))
编辑:
为了摆脱您看到的警告,我们可以在将矩阵传递给之前命名矩阵的列as_tibble
。此编辑不使用%>%
运算符。
colnames(irisfda$fit$fitted.values) <- c("V1", "V2")
df1 <- bind_cols(as_tibble(irisfda$fit$fitted.values),
species = iris[,"Species"])
ggplot(df1) +
geom_point(aes(V1, V2, color = species, shape = species), size = 2.5) +
labs(x = paste("FDA1 (", percent(irisfda$percent.explained[1]/100), ")", sep=""),
y = paste("FDA2 (", percent(irisfda$percent.explained[2]/100 - irisfda$percent.explained[1]/100), ")", sep=""))
colnames(irismda$fit$fitted.values) <- c("V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8")
df2 <- bind_cols(as_tibble(irismda$fit$fitted.values),
species = iris[,"Species"])
ggplot(df2) +
geom_point(aes(V1, V2, color = species, shape = species), size = 2.5) +
labs(x = paste("MDA1 (", percent(irismda$percent.explained[1]/100), ")", sep=""),
y = paste("MDA2 (", percent(irismda$percent.explained[2]/100 - irismda$percent.explained[1]/100), ")", sep=""))
编辑 2:
您似乎不想使用dplyr
,所以我在ggplot
图中将基本 R 函数包括在内。
library(dplyr)
require(MASS)
require(ggplot2)
require(mda)
require(scales)
irisfda <- fda(Species ~ ., data = iris, method = mars)
irismda <- mda(Species ~ ., data = iris)
df1 <- cbind(data.frame(irisfda$fit$fitted.values),
species = iris[,"Species"])
ggplot(df1) +
geom_point(aes(X1, X2, color = species, shape = species), size = 2.5) +
labs(x = paste("FDA1 (", percent(irisfda$percent.explained[1]/100), ")", sep=""),
y = paste("FDA2 (", percent(irisfda$percent.explained[2]/100 - irisfda$percent.explained[1]/100), ")", sep=""))
df2 <- cbind(data.frame(irismda$fit$fitted.values),
species = iris[,"Species"])
ggplot(df2) +
geom_point(aes(X1, X2, color = species, shape = species), size = 2.5) +
labs(x = paste("MDA1 (", percent(irismda$percent.explained[1]/100), ")", sep=""),
y = paste("MDA2 (", percent(irismda$percent.explained[2]/100 - irismda$percent.explained[1]/100), ")", sep=""))
推荐阅读
- javascript - 如何检查 Matomo 是否已加载或可能被阻止?
- shell - 在 Dockerfile 中运行 CMD 命令之前运行一个简单的 shell 脚本
- java - Java 打印对话框需要大量时间才能显示
- python-3.x - 烧瓶应用程序中的一劳永逸
- python - 读取多个文件夹并将多个文本文件内容合并到每个文件夹一个文件中 - Python
- security - 使用 JWT 的跨域链接认证
- c# - VSIX 获取与其上下文菜单关联的项目
- web-services - VS2019:无法将 OpenAPI 服务引用添加到 .NET Standard 类库?
- java - Amazon corretto 现在在 jre/bin 中包含一堆 api-ms-win-core-*-l1-1-0.dll 文件
- c# - 如何让 NavMesh Agent 停止然后继续他的运动