我相信这会达到您的目标。 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,所以我在此处将基本 R 函数与ggplot 绘图一起包括在内。
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=""))