線形判別分析でいくつかの演習を行っているときに発生する、コーディングに関する質問があります。アイリスデータを使用しています:
## 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)
ご覧のとおり、虹彩の 1 列目と 2 列目を削除します。私がやりたいことは、線形判別分析を使用したこのデータのブートストラップです。ここに私のコードがあります:
ind <- replicate(B,sample(seq(1:n),n,replace=TRUE))
これにより、使用したいインデックスが生成されます。1000 などの大きな数に注意してくださいB
。apply を使用したいのですが、次のコードが機能しないのはなぜですか?
bst.sample <- apply(ind,2,lda(Species~Petal.Length+Petal.Width,data=Iris[ind,]))
ここで、Species、Petal.Length などはアイリスのデータです。for ループを使用すると、すべて正常に動作しますが、もちろん、このよりエレガントな方法で実装したいと考えています。
2 番目の質問は について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)
最後のプロットには、3 つのクラスの予想平均を含む 3 つの領域が表示されます。ただし、最初のプロットのみが表示されます。
ご協力ありがとうございました。