从this question开始,我想知道是否有可能提取二次判别分析(QDA)分数并在PCA分数之后重复使用它们。
## follow example from ?lda
Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
Sp = rep(c("s","c","v"), rep(50,3)))
set.seed(1) ## remove this line if you want it to be pseudo random
train <- sample(1:150, 75)
table(Iris$Sp[train])
## your answer may differ
## c s v
## 22 23 30
在这里使用QDA
z <- qda(Sp ~ ., Iris, prior = c(1,1,1)/3, subset = train)
## get the whole prediction object
pred <- predict(z)
## show first few sample scores on LDs
在这里,您可以看到它无效。
head(pred$x)
# NULL
plot(LD2 ~ LD1, data = pred$x)
# Error in eval(expr, envir, enclos) : object 'LD2' not found
答案 0 :(得分:0)
注意:评论太长/格式化。不是答案
您可能需要尝试rrcov
包:
library(rrcov)
z <- QdaCov(Sp ~ ., Iris[train,], prior = c(1,1,1)/3)
pred <- predict(z)
str(pred)
## Formal class 'PredictQda' [package "rrcov"] with 4 slots
## ..@ classification: Factor w/ 3 levels "c","s","v": 2 2 2 1 3 2 2 1 3 2 ...
## ..@ posterior : num [1:41, 1:3] 5.84e-45 5.28e-50 1.16e-25 1.00 1.48e-03 ...
## ..@ x : num [1:41, 1:3] -97.15 -109.44 -54.03 2.9 -3.37 ...
## ..@ ct : 'table' int [1:3, 1:3] 13 0 1 0 16 0 0 0 11
## .. ..- attr(*, "dimnames")=List of 2
## .. .. ..$ Actual : chr [1:3] "c" "s" "v"
## .. .. ..$ Predicted: chr [1:3] "c" "s" "v"
它还具有强大的PCA方法,可能很有用。
不幸的是,并非R中的每个模型都符合相同的对象结构/ API,并且这不是一个线性模型,因此它不太可能符合线性模型拟合结构API。
而且,你可以这样做:
library(klaR)
partimat(Sp ~ ., data=Iris, method="qda", subset=train)
{{3}}
表示qda结果的分区图。