2017-05-05 6 views
0

J'ai des données multidimensionnelles (plus de 100 variables) dont je m'attends à ce que le sous-ensemble soit plus ou moins conforme à un plan. Quelle serait la meilleure façon d'adapter un plan à ce sous-ensemble dans R? Je voudrais utiliser le plan pour calculer la distance de certains autres points et pour en tracer certaines dimensions.Ajustement d'un plan multidimensionnel dans R

Répondre

1

Les principaux composants peuvent résoudre ceci pour vous. En supposant que vos données correspondent vraiment à un plan, les deux premiers composants principaux doivent bien décrire ce plan.

Vous ne fournissez pas de données d'échantillon, donc je vais illustrer avec des données artificielles. Mes données sont en dix dimensions, mais tous les points sont proches d'un plan (avec une erreur dans les huit autres directions).

## Sample data 
set.seed(2018) 
NPts = 1000 
x = runif(NPts) 
y = runif(NPts) 

cx = rnorm(1) 
cy = rnorm(1) 
V1 = cx*x + cy*y + rnorm(NPts, 0, 0.1) 

MyData = data.frame(V1) 
for(i in 2:10) { 
    cx=rnorm(1) 
    cy= rnorm(1) 
    name = paste0("V", i) 
    MyData[,name] = cx*x + cy*y + rnorm(NPts, 0, 0.1) 
} 

Comme toutes les variables sont des combinaisons linéaires de x et y (plus une petite erreur), les données sont seulement deux dimensions et vit à proximité du plan x-y. Ici, je traite x et y comme des variables latentes. Ils n'apparaissent pas dans les données mais pilotent le comportement de toutes les autres variables.

## Principal Components Analysis 
PCA = prcomp(MyData) 
plot(PCA) 

PCA Plot

Oui, les données ressemble fondamentalement à deux dimensions. Il ne reste plus qu'à obtenir les deux premiers composants principaux. Ils sont stockés dans la structure retournée de prcomp.

PCA$rotation[,1:2] 
      PC1   PC2 
V1 0.42752681 -0.204894748 
V2 -0.64546573 -0.056503044 
V3 0.04606707 -0.009614603 
V4 0.01956126 -0.539070667 
V5 0.15987617 0.600122935 
V6 -0.06255399 0.054053476 
V7 0.26497132 0.388920891 
V8 0.21645814 -0.366709584 
V9 0.49363625 -0.116954131 
V10 0.08874645 0.040656622 

Le plan que nous cherchons est le plan engendré par ces deux vecteurs.