Hi Everyone, 

In follow up to my previous question, I wrote some code that correctly makes a confusion matrix as I need it. However, it only works when the numbers are between 1 and n. If the possible outcomes are between 0 and n, then I can't reference row "0" of the matrix and the code breaks. Does anyone have any easy fixes for this? I've attached the entire code to this email.


As always, thank you for your help!

Greg

Code:

answers<-matrix(c(4,2,1,3,2,1),nrow =6)
mat1<- matrix(c(3,3,4,NA,4,2),nrow = 6)
mat2<-matrix(c(3,2,1,4,2,3),nrow = 6)
mat3<-matrix(c(4,2,2,2,1,1),nrow = 6)
mat4<-matrix(c(4,2,1,3,1,4),nrow = 6)
mat5<-matrix(c(2,3,1,4,2,3),nrow = 6)

matrixlist<- list(mat1,mat2,mat3,mat4,mat5)
predicted.values<- matrix(unlist(matrixlist),nrow = dim(mat1)[1])
 
confusion.matrix<-matrix(0, nrow = length(as.vector(unique(answers))),ncol = length(as.vector(unique(answers))))

for(i in 1:dim(predicted.values)[1]){
	for(j in 1: dim(predicted.values)[2]){
		
		predicted.value<- predicted.values[i,j]
		if(!is.na(predicted.value)){
			true.value<- answers[i,]	
			confusion.matrix[true.value, predicted.value] <- confusion.matrix[true.value,predicted.value]+1
		}
	}
}

class.error<- diag(1- prop.table(confusion.matrix,1))
confusion.matrix<-cbind(confusion.matrix,class.error)
confusion.data.frame<-as.data.frame(confusion.matrix)
names(confusion.data.frame)[1:length(as.vector(unique(answers)))]<- 1:length(as.vector(unique(answers)))
names(confusion.data.frame)[length(as.vector(unique(answers)))+1]<- "class.error"
	[[alternative HTML version deleted]]

