我使用MASS包中的函数lda()
进行了线性判别分析。现在我将尝试绘制一个像ade4包(forLDA)中的双标图。你知道我怎么能这样做吗?
如果我尝试使用biplot()
功能,则无效。例如,如果我使用Iris数据并制作LDA:
dis2 <- lda(as.matrix(iris[, 1:4]), iris$Species)
然后我可以使用函数plot()
来绘制它,但是如果我使用函数biplot()
它就不起作用:
biplot(dis2)
Error in nrow(y) : argument "y" is missing, with no default
如何绘制变量的箭头?
答案 0 :(得分:2)
我写了以下函数来执行此操作:
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
以反映此情况。
答案 1 :(得分:2)
我的理解是可以完成线性判别分析的双线性,实际上也在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)
这本书&#34;实践中的Biplots&#34; M. Greenacre有一章(第11章)和图11.5,它显示了虹膜数据集的线性判别分析的双标图:
答案 2 :(得分: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))