2013-02-20 8 views
0

Je suis chimiste et il y a environ un an, j'ai décidé d'en savoir plus sur la chimiométrie.Validation croisée de PCA + lm

Je travaille avec ce problème que je ne sais pas comment résoudre:

je fis un modèle expérimental (type Doehlert avec 3 facteurs) enregistrer plusieurs concentrations d'analyte comme Y. Ensuite, je effectué une ACP sur Y et moi scores sur le premier PC (87% de la variance totale) en tant que nouveau y pour un modèle de régression linéaire avec mes paramètres codés expérimentaux comme X. Maintenant, j'ai besoin d'effectuer une validation croisée Leave-Out-Out en supprimant chaque objet avant effectuer la PCA sur le nouveau "ensemble d'apprentissage", puis créer le modèle de régression sur les scores comme je le faisais auparavant, prédire le score valeur pour l'observation dans le "test set" et calculer l'erreur de prédiction en comparant le score prédit et le score obtenu par la projection de l'objet dans l'ensemble de test dans l'espace de la PCA précédente. Donc répété n fois (avec n le nombre de point de ma conception expérimentale). Je voudrais savoir comment je peux le faire avec R.

+0

Salut Andrea, bienvenue à la validation croisée (et un accueil spécial à un autre camarade chimiste ici!). Cependant, votre question concerne principalement la programmation, pas les statistiques (vous avez déjà votre DoE et vous savez que la validation croisée doit inclure la PCA). Je voterai donc pour le migrer vers stackoverflow, où les questions de programmation sont discutées. Comme vous posez des questions sur R, je vais également ajouter un tag R. – cbeleites

+0

Merci @cbeleites mais où puis-je trouver "stackoverflow"? Je suis un noob! –

+0

@ndr: stackoverflow aurait dû vous trouver maintenant ... – cbeleites

Répondre

1

Effectuez les calculs par ex. par prcomp puis lm. Pour cela, vous devez appliquer le modèle PCA renvoyé par prcomp aux nouvelles données. Ce besoin de deux (ou trois) étapes:

  1. Centre des nouvelles données avec le même centre qui a été calculé par prcomp
  2. échelle les nouvelles données avec le même vecteur d'échelle qui a été calculé par prcomp
  3. Appliquer le rotation calculée par prcomp

les deux premières étapes sont effectuées par scale, en utilisant les $center et $scale éléments de l'objet de prcomp. Vous avez ensuite la matrice multipliez vos données par $rotation [, components.to.use]

Vous pouvez facilement vérifier si votre reconstruction du calcul des scores PCA en calculant les scores pour les données d'entrée à prcomp et à comparer les résultats obtenus avec l'élément $x du modèle PCA retourné par prcomp.

Modifier à la lumière du commentaire:

Si le but du CV calcule une sorte d'erreur, vous pouvez choisir entre le calcul erreur des scores prédits y (ce qui est la façon dont je vous comprends) et l'erreur de calcul du Y: la PCA vous permet également de revenir en arrière et de prédire les variables d'origine à partir des scores. C'est facile car les chargements ($rotation) sont orthogonaux, donc l'inverse est juste la transposition.

Ainsi, la prédiction dans l'espace d'origine Y est scores %*% t (pca$rotation), qui est calculé par tcrossprod (scores, pca$rotation) plus rapide.

+0

Eh bien, honnêtement, je pense que ce que j'ai fait est assez différent de la PCR. En PCR j'utilise (certains) scores comme ** X ** pour ajuster et prédire un ** y **, alors que ce que j'ai fait est d'utiliser les scores PCA sur le premier PC comme ** y ** et mes points de conception expérimentale comme ** X **. –

+0

Désolé, j'ai oublié cela. Donc ce que vous faites est quelque part entre une PCR (inverse) et à mi-chemin à PLS? Puis-je vous demander pourquoi vous faites cela (pure curiosité)? Dans tous les cas, la première méthode vous permet de faire ce que vous voulez avec les scores PCA. – cbeleites

+0

J'ai effectué un PCA parce que mon ** Y ** original est une matrice de _n_ expériences et de variables _m_, donc je n'avais que deux possibilités:

    - adapter et caractériser _m_ différents modèles sur chaque ** y_i ** ou - essayer de réduire la dimension de mes données ** Y **, car mes variables _m_ sont fortement corrélées J'ai utilisé les scores ** Y ** sur le PC1 comme mon nouveau ** y **, disons (** y_n **).
Puis j'ai ajusté un seul modèle: ** y_n ~ X ** (** X ** comme je l'ai dit la matrice de mes conditions expérimentales codées). <\br> Maintenant, il faut une estimation, obtenue par validation croisée, de l'erreur de prédiction de mon modèle. – Ndr

Questions connexes