У меня есть вопрос по кодированию, который возникает при выполнении некоторых упражнений по линейному дискриминантному анализу. Мы используем данные Iris:
## Read in dataset, set seed, load package
Iris <- iris[,-(1:2)]
grIris <- as.integer(iris[,"Species"])
set.seed(16)
library(MASS)
## Read n
n <- nrow(Iris)
Как видите, мы удаляем первый и второй столбец радужной оболочки. Что я хочу сделать, так это загрузить эти данные с помощью линейного дискриминантного анализа, вот мой код:
ind <- replicate(B,sample(seq(1:n),n,replace=TRUE))
Это генерирует индексы, которые я хочу использовать. Примечание B
- это большое число, например. 1000. Теперь я хочу использовать apply, но почему следующий код не работает?
bst.sample <- apply(ind,2,lda(Species~Petal.Length+Petal.Width,data=Iris[ind,]))
где Species, Petal.Length и т. д. — это данные по радужной оболочке. Если я использую цикл for, все работает нормально, но, конечно, я хотел бы реализовать его более элегантным способом.
Мой второй вопрос касается points
. Я также хотел рассчитать предполагаемые средства, которые я сделал с помощью следующего кода
est.lda <- vector("list",B)
est.qda <- vector("list",B)
mu_hat_1 <- mu_hat_2 <- mu_hat_3 <- matrix(0,ncol=B,nrow=2)
for (i in 1:B){
est.lda[[i]] <- lda(Species~Petal.Length+Petal.Width,data=Iris[ind[,i],])
mu_hat_1[,i] <- est.lda[[i]]$means[1,]
mu_hat_2[,i] <- est.lda[[i]]$means[2,]
mu_hat_3[,i] <- est.lda[[i]]$means[3,]
est.qda[[i]] <- qda(Species~Petal.Length+Petal.Width,data=Iris[ind[,i],])
}
plot(mu_hat_1[1,],mu_hat_1[2,],pch=4)
points(mu_hat_2[1,],mu_hat_2[2,],pch=4,col=2)
points(mu_hat_3[1,],mu_hat_3[2,],pch=4,col=3)
График в конце должен показать три области с ожидаемым средним значением трех классов. Однако показан только первый сюжет.
Спасибо за помощь.
Iris
определяется в самом верху. - person Roland   schedule 04.08.2013