Перекрестно подтвержденный PCA в R - PullRequest
0 голосов
/ 21 марта 2019

Я анализирую хемометрический набор данных примерно из 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) по двум моделям?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...