Я анализирую хемометрический набор данных примерно из 300 переменных и 24 образцов.Я хочу использовать PCA для выбора переменных.Ранее я использовал функцию prcomp и выбрал компоненты, на которые приходится> 95% дисперсии, однако я знаю, что при этом существует опасность переобучения и моделирования шума.Поэтому я хотел бы иметь возможность провести перекрестную проверку моей модели PCA и построить RMSECV тестовой модели и модели поезда, чтобы помочь в выборе переменных, как описано в: https://pubs.rsc.org/en/content/articlehtml/2014/ay/c3ay41907j
Мой набор данных слишком сложен для загрузки,однако, вот воспроизводимый пример того, что я сделал до сих пор, используя набор данных Wine и ответ на предыдущий вопрос в качестве примера: https://stats.stackexchange.com/questions/72839/how-to-use-r-prcomp-results-for-prediction
library("rattle.data")
data("wine")
# all data model
model <- prcomp(wine[2:14], center = TRUE, scale = TRUE)
summary(model)
biplot(model)
# cross validation
# split data into 2 parts for pca training (75%) and prediction (25%)
set.seed(1)
samp <- sample(nrow(wine), nrow(wine)*0.75)
train <- wine[samp,]
valid <- wine[-samp,]
# conduct PCA on training dataset
model <- prcomp(train[,2:14], center=TRUE, scale=TRUE)
summary(model)
# prediction of PCs for validation dataset
pred <- predict(model, newdata=valid[,2:14])
###Plot result
COLOR <- c(2:4)
PCH <- c(1,16)
pc <- c(1,2) # principal components to plot
plot(model$x[,pc], col=COLOR[train$Type], cex=PCH[1],
xlab=paste0("PC ", pc[1], " (", expl.var[pc[1]], "%)"),
ylab=paste0("PC ", pc[2], " (", expl.var[pc[2]], "%)")
)
points(pred[,pc], col=COLOR[valid$Type], pch=PCH[2])
legend("topright", legend=levels(wine$Type), fill = COLOR, border=COLOR)
legend("topleft", legend=c("training data", "validation data"), col=1, pch=PCH)
Мои основные вопросы: ушел ли яправильная перекрестная проверка модели, и как я могу оценить ошибку перекрестной проверки соответствия (т. е. RMSECV) по двум моделям?