#Post-process FaMoz Results from MyKiss rm(list = ls()) library(plyr) juv_file <- "~/sim_offspring.txt" respar_file <- "~/sim_respar.txt" Postprocess.Famoz <- function (respar_file, juv_file) { respar <- read.table(respar_file, header=TRUE, sep="\t", dec=".", strip.white=TRUE, colClasses = c("character", "character", "character")) juveniles <- read.table(juv_file, header=TRUE, sep="", strip.white=TRUE) output <- matrix(nrow = nrow(juveniles), ncol = 6) for (i in 1:nrow(juveniles)) { output[i,1] <- as.character(juveniles$OffspringID[i]) output[i,2] <- as.character(lapply(strsplit(output[i,1], "__"), "[", 2)) output[i,2] <- as.character(lapply(strsplit(output[i,2], "x"), "[", 1)) output[i,3] <- as.character(lapply(strsplit(output[i,1], "x"), "[", 2)) output[,4] <- as.character(respar$parent1[match(output[,1], respar$OffspringID)]) output[,5] <- as.character(respar$parent2[match(output[,1], respar$OffspringID)]) output[,4][is.na(output[,4])] <- "no ass" output[,5][is.na(output[,5])] <- "no ass" if(output[i,4] == "no ass" & output[i,5] == "no ass") { # EXCLUSION if(output[i,2] == "Unk" & output[i,3] == "Unk") { output[i,6] <- "12_____TRUE.X" } else { if(output[i,2] == "Unk" | output[i,3] == "Unk") { output[i,6] <- "13_____beta-1" } else { output[i,6] <- "14_____beta-2" } } } else { if(output[i,4] != "no ass" & output[i,5] != "no ass") { # ASSIGN. PAIR if(output[i,4] == output[i,2] & output[i,5] == output[i,3]) { output[i,6] <- "06_____TRUE.P" } else { if(output[i,4] != output[i,2] & output[i,5] != output[i,3]) { # Both parents false if(output[i,2] == "Unk" & output[i,3] == "Unk") { output[i,6] <- "11__alpha-2pp" } else { if(output[i,2] != "Unk" & output[i,3] != "Unk") { output[i,6] <- "10_alpha-1pp2" } else { if(output[i,2] != "Unk" | output[i,3] != "Unk") { output[i,6] <- "09_alpha-1pp1" } } } } else { if(output[i,2] == "Unk" | output[i,3] == "Unk") { # One parent false output[i,6] <- "08___alpha-2p" } else { output[i,6] <- "07___alpha-1p" } } } } else { if(output[i,4] == "no ass" | output[i,5] == "no ass") { # ASSIGN. SINGLE if(output[i,4] == output[i,2] | output[i,5] == output[i,3]) { # True assignment if(output[i,2] == "Unk" | output[i,3] == "Unk"){ output[i,6] <- "01_____TRUE.S" } else { output[i,6] <- "02_______beta" } } else { if(output[i,2] == "Unk" & output[i,3] == "Unk") { # False assignment output[i,6] <- "05___alpha-2s" } else { if(output[i,2] != "Unk" & output[i,3] != "Unk") { output[i,6] <- "04__alpha-1s2" } else { if(output[i,2] != "Unk" | output[i,3] != "Unk") { output[i,6] <- "03__alpha-1s1" } else { output[i,6] <- "UNDEFINED" } } } } } } } } df <- as.data.frame(output[sort.list(output[,6], decreasing = FALSE), ]) names(df) <- c("Offspring", "True.M","True.F", "Ass.F", "Ass.M", "category") cat.count <- as.data.frame(ddply(df, 'category', function(x) count=nrow(x))) names(cat.count) <- c("category", "count") known.pairs <- length(which(df$True.M != "Unk" & df$True.F != "Unk")) known.singles <- length(which(df$True.M != "Unk" | df$True.F != "Unk")) - known.pairs known.exclusions <- length(which(df$True.M == "Unk" & df$True.F == "Unk")) true.accuracy <- length(which(df$category == "01_____TRUE.S" | df$category == "06_____TRUE.P" | df$category =="12_____TRUE.X")) / nrow(juveniles) print(subset(df, df$category != "01_____TRUE.S" & df$category != "06_____TRUE.P" & df$category != "12_____TRUE.X")) print(cat.count) print(c(paste("known singles =", known.singles), paste("known pairs =", known.pairs), paste("known exclusions =", known.exclusions))) print(paste("Overall accuracy =", true.accuracy)) } Postprocess.Famoz(respar_file, juv_file)