2016-06-10 26 views
2

Ich bin ein Biologe, der versucht, R zu verwenden, und ich kämpfe mit ihm.Hauptkomponentenanalyse in R, ggbiplot

Ich versuche, eine Hauptkomponentenanalyse für diese Daten zu generieren:

1,26.96,37.31,35.74 
1,24.27,38.48,37.24 
1,23.58,35.64,40.78 
1,24.29,35.72,39.99 
1,26.43,37.72,35.85 
1,28.80,46.96,24.24 
2,30.05,44.86,25.09 
2,26.59,47.24,26.17 
2,30.55,45.70,23.75 
2,25.95,48.77,25.28 
2,23.31,50.11,26.59 
2,31.29,43.88,24.82 
3,14.70,37.65,47.65 
3,17.11,36.14,46.75 
3,15.83,36.83,47.34 
3,13.77,38.39,47.84 
3,17.76,35.02,47.22 
3,12.90,38.29,48.81 

Die erste Spalte der Gruppe Variable entsprechen, habe ich 3 Gruppen.

Ich sah HERE, wie man das Diagramm, das ich will. Aber jedes Mal, wenn ich zum Erzeugen Biplot Teil bekommen, erhalte ich die Meldung:

Error: Continuous value supplied to discrete scale.

Hier ist der Code, den ich verwende:

>data(GPA2) 
>head(GPA2, 3) 
>log.ir <- log(GPA2[, 2:4]) 
>ir.group <- GPA2[, 1] 
>ir.pca <- prcomp(log.ir,center = TRUE,scale = TRUE) 
>print(ir.pca) 
>plot(ir.pca, type = "l") 
>summary(ir.pca) 
>predict(ir.pca, newdata=tail(log.ir, 2)) 
>g <- ggbiplot(ir.pca, obs.scale = 1, var.scale = 1, groups = ir.group, ellipse = TRUE, circle = TRUE) 
>g <- g + scale_color_discrete(name = '') 
>g <- g + theme(legend.direction = 'horizontal', legend.position = 'top') 
>print(g) 

mir jemand helfen?

Antwort

1

Ihre Gruppenvariable braucht einen Faktor zu sein, nicht numerisch

library(ggbiplot) 
GPA2 <- data.frame(
    ir.group = sample(c(1,2,3),10, replace = TRUE), 
    x = sample(1:10), 
    y = sample(1:10), 
    z = sample(1:10) 
) 

data(GPA2) 
head(GPA2, 3) 
log.ir <- log(GPA2[, 2:4]) 
ir.group <- GPA2[, 1] 
ir.pca <- prcomp(log.ir,center = TRUE,scale = TRUE) 
print(ir.pca) 
plot(ir.pca, type = "l") 
summary(ir.pca) 
predict(ir.pca, newdata=tail(log.ir, 2)) 
g <- ggbiplot(ir.pca, obs.scale = 1, var.scale = 1, groups = as.factor(ir.group), ellipse = TRUE, circle = TRUE) 
g <- g + scale_color_discrete(name = '') 
g <- g + theme(legend.direction = 'horizontal', legend.position = 'top') 
print(g) 
0

Ihre Gruppenvariable in der ersten Spalte eine ganze Zahl (1,2,3), braucht es eine Zeichenfolge sein, ersetzen Sie es mit etwas wie "Gruppe 1", "Gruppe 2", "Gruppe 3" (ohne ""). Ihre Daten würden dann in etwa so aussehen:

group 1,26.96,37.31,35.74 
group 1,24.27,38.48,37.24 
group 1,23.58,35.64,40.78 
group 1,24.29,35.72,39.99 
group 1,26.43,37.72,35.85 
group 1,28.80,46.96,24.24 
group 1,30.05,44.86,25.09 
group 2,26.59,47.24,26.17 
group 2,30.55,45.70,23.75 
group 2,25.95,48.77,25.28 
group 2,23.31,50.11,26.59 
group 2,31.29,43.88,24.82 
group 3,14.70,37.65,47.65 
group 3,17.11,36.14,46.75 
group 3,15.83,36.83,47.34 
group 3,13.77,38.39,47.84 
group 3,17.76,35.02,47.22 
group 3,12.90,38.29,48.81