This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Error In Int_Abline While Doing Pca Using R

I have a 12X8 dataset for doing PCA.

And I am using the following code:

bumpus <- read.csv("pca.csv", header=TRUE)
bumpus <- bumpus[,-1]
boxplot(bumpus, main="Boxplot of Bumpus' data")

# we first standardize the data:
bumpus.scaled <- data.frame( apply(bumpus,2,scale) )
boxplot(bumpus.scaled, main="Boxplot of standardized Bumpus' data")

pca.res <- prcomp(bumpus.scaled, retx=TRUE)
pca.res

# note:
# PC.1 is some kind of average of all the measurements 
#    => measure of size of the bird
# PC.2 has a negative weight for 'sternum' 
#    and positive weights for 'alar', 'head' and 'humerus'
#    => measure of shape of the bird

# first two principal components:
pca.res$x[,1:2]
plot(pca.res$x[,1:2], pch="", main="PC.1 and PC.2 for Bumpus' data (blue=survived, red=died)")
text(pca.res$x[,1:2], labels=c(1:49), col=c(rep("blue",21),rep("red",28)))
abline(v=0, lty=2)
abline(h=0, lty=2)

# compare to segment plot:
windows()
palette(rainbow(12, s = 0.6, v = 0.75)) 
stars(bumpus, labels=c(1:49), nrow=6, key.loc=c(20,-1), 
      main="Segment plot of Bumpus' data", draw.segment=TRUE) 

# compare to biplot:
windows()
biplot(pca.res, scale=0)
# what do the arrows mean?
# consider the arrow for sternum:
abline(0, pca.res$rotation[5,2]/pca.res$rotation[5,1])
# consider the arrow for head:
abline(0, pca.res$rotation[3,2]/pca.res$rotation[3,1])

Second line from last (abline(0, pca.res$rotation[5,2]/pca.res$rotation[5,1])) shows an error

Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) : 
  subscript out of bounds

The dataset looks like this

DATASET

Could anyone please tell me how to rectify this error?

Please Help!

pca r

1 answer

In fact, everything works in your code, when I change the data (I can't read the picture into ;-) )

bumpus <- data.frame(matrix(rnorm(8*11),byrow=T,ncol=8))
names(bumpus)=c("A","R","N","D","C","E","Q","G")
boxplot(bumpus, main="Boxplot of Bumpus' data")
`

but, you may want to set options(error=recover) in R to figure out where you are trying to access an array out of its boundary

Here is the plot with rnorm and your code:

enter image description here

Log in to answer this question.