6

我使用lda()包 MASS 中的函数进行了线性判别分析。现在我会尝试在 ade4 包(forLDA)中绘制一个双标图。你知道我该怎么做吗?

如果我尝试使用该biplot()功能,它将不起作用。例如,如果我使用 Iris 数据并制作 LDA:

dis2 <- lda(as.matrix(iris[, 1:4]), iris$Species)

然后我可以使用 function 绘制它plot(),但是如果我使用 functionbiplot()它不起作用:

biplot(dis2)
Error in nrow(y) : argument "y" is missing, with no default

如何绘制变量的箭头?

4

3 回答 3

3

我编写了以下函数来执行此操作:

lda.arrows <- function(x, myscale = 1, tex = 0.75, choices = c(1,2), ...){
  ## adds `biplot` arrows to an lda using the discriminant function values
  heads <- coef(x)
  arrows(x0 = 0, y0 = 0, 
         x1 = myscale * heads[,choices[1]], 
         y1 = myscale * heads[,choices[2]], ...)
  text(myscale * heads[,choices], labels = row.names(heads), 
    cex = tex)
}

对于您的示例:

dis2 <- lda(as.matrix(iris[, 1:4]), iris$Species)
plot(dis2, asp = 1)
lda.arrows(dis2, col = 2, myscale = 2)

箭头的长度相对于 lda 图是任意的(但彼此之间不是,当然!)。如果您想要更长或更短的箭头,请myscale相应地更改 的值。默认情况下,这会为第一个和第二个轴绘制箭头。如果要绘制其他轴,请更改choices以反映这一点。

于 2013-06-21T17:01:18.543 回答
3

我的理解是可以进行线性判别分析的双图,实际上它也在 R 包 ggbiplot 中实现,见https://github.com/vqv/ggbiplot/tree/experimental 和包 ggord,见https://github .com/fawda123/ggord,例如:

install.packages("devtools")
library(devtools)
install_github("fawda123/ggord")
library(ggord)
ord <- lda(Species ~ ., iris, prior = rep(1, 3)/3)
ggord(ord, iris$Species)

在此处输入图像描述

此外,M. Greenacre 的“实践中的双图”一书有一章(第 11 章),在图 11.5 中它显示了虹膜数据集的线性判别分析的双图: 在此处输入图像描述

于 2015-08-06T16:35:48.010 回答
0

您可以使用来自 github 的 ggord 包来实现这一点。使用的数据集是 IRIS 数据集

# --- data partition -- #
set.seed(555)
IRSam <- sample.int(n = nrow(IR), size = floor(.60*nrow(IR)), replace = FALSE, prob = NULL)
IRTrain <- IR[IRSam,]
IRTest <- IR[-IRSam,]    

# --- Prediction --- #
p<- predict(IR.lda, IRTrain)

# --- plotting a biplot --- #
library(devtools)
# install_github('fawda123/ggord') --- Used to install ggord from github we need to run devtools to achieve this.
library(ggord)
ggord(IR.lda, IRTrain$Species, ylim=c(-5,5), xlim=c(-10,10))
于 2018-05-24T19:50:38.317 回答