Как построить массу: оценки qda

Из этого вопроса мне было интересно, можно ли извлечь оценки квадратичного дискриминантного анализа (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

1 ответ

  1. Примечание: слишком длинный / отформатирован для комментария. НЕ ОТВЕТ

    Вы можете попробовать 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, и это не будет линейная модель, поэтому она вряд ли будет соответствовать линейной модели fit structure API.

    Есть пример того, как визуализировать результаты qda здесь — http://ramhiser.com/2013/07/02/a-brief-look-at-mixture-discriminant-analysis/

    И, вы можете сделать:

    library(klaR)
    
    partimat(Sp ~ ., data=Iris, method="qda", subset=train)
    

    Введите описание изображения здесь

    для графика секционирования результатов qda.