##### Helper Functions # remove unwanted cols removeCols <- function(cols, df) { df <- df[cols] } # Update the level and label information for columns. updateLevels <- function(lab, lev, df){ i <- 1 while(i<=ncol(df)) { df[[i]] = factor(df[[i]],labels = lab, levels = lev) i <- i + 1 } df } ##### SetUp # Load Likert Package: see http://jason.bryer.org/likert/ library(ggplot2) library(reshape2) library(scales) library(xtable) library(likert) library(plyr) library(grid) library(dunn.test) ################################################# ##### RQ0 Bar Graph and Data #Open Data p1data = read.csv('p1.csv') p1score <- p1data$SCORE #Data Table table(p1score) #Create bar graph sorted by group. p1data$GROUP <- factor(p1data$GROUP, levels=c("A", "B", "CA","CB"), ordered=T) p1data$SCORE <- factor(p1data$SCORE) p <- ggplot(data = p1data, aes(x=SCORE, fill=GROUP)) p <- p + geom_bar(position = "stack") + coord_flip() p <- p + theme_bw() p <- p + xlab("Score") p <- p + ylab("Total Frequency") p <- p + scale_fill_grey( start = 0.2, end = 0.8, na.value = "red") p <- p + scale_y_continuous(breaks=c(1,3,5,7,9)) p #KWRS of Score data. kruskal.test(SCORE ~ GROUP, data = p1data) ################################################# ##### RQ3 (and Methodology) Likert Data Analysis # Open Data p0p4data = read.csv('p0p4.csv') p4program <- p0p4data$Program summary(p4program) #On the above scale rate your familiarity with requirements engineering. #On the above scale rate your familiarity with the i* (or iStar) modeling language. p0cols <- c("EvalRE","EvalI") p0labels <- c("Not At All Familiar","Slightly Familiar","Somewhat Familiar","Moderately Familiar","Extremely Familiar") p0levels <- c(1,2,3,4,5) #On a scale above rate your level of satisfaction with the tools: # ease of use # appearance # modeling functionality # analysis functionality p4Tcols <- c("ToolAnalysis","ToolModel","ToolUse","ToolAppear") p4Tlabels <- c("Completely Dissatisfied","Mostly Dissatisfied","Somewhat Dissatisfied","Neither Satisfied or Dissatisfied","Somewhat Satisfied","Mostly Satisfied","Completely Satisfied") p4Tlevels <- c(1,2,3,4,5,6,7) #How likely is it that you would recommend this goal modeling tool to a colleague? p4Rcols <- c("Recommend") p4Rlabels <- c("Extremely Unlikely","Unlikely","Neutral","Likely","Extremely Likely") p4Rlevels <- c(1,2,3,4,5) p0data <- removeCols(p0cols,p0p4data) p4Tdata <- removeCols(p4Tcols,p0p4data) p4Rdata <- removeCols(p4Rcols,p0p4data) p0data <- updateLevels(p0labels, p0levels, p0data) p4Tdata <- updateLevels(p4Tlabels, p4Tlevels, p4Tdata) p4Rdata <- updateLevels(p4Rlabels, p4Rlevels, p4Rdata) #Rename data columns for output. p0data <- rename(p0data, c( EvalRE = "requirements engineering", EvalI = "i* (or iStar) modeling language")) p4Tdata <- rename(p4Tdata, c( ToolAnalysis = "analysis functionality", ToolModel = "modeling functionality", ToolUse = "ease of use", ToolAppear = "appearance")) p4Rdata <- rename(p4Rdata, c( Recommend = "recommend")) p0like <- likert(p0data) p4Tlike <- likert(p4Tdata) p4Rlike <- likert(p4Rdata) likert.bar.plot(p0like,text.size=4,text.color="#383737") + theme(title = element_blank(), axis.text.x = element_blank(), axis.text.y = element_text(size="14",colour="black",face="italic")) + theme(panel.background = element_rect(color = "black", fill = NA)) + theme(legend.key.size = unit(0.4, "cm")) + theme(legend.title = element_blank(),legend.text = element_text(size = 11), legend.direction = "vertical", legend.position="right") likert.bar.plot(p4Tlike,text.size=4,text.color="#383737",ordered=FALSE) + theme(title = element_blank(), axis.text.x = element_blank(), axis.text.y = element_text(size="14",colour="black",face="italic")) + theme(panel.background = element_rect(color = "black", fill = NA)) + theme(legend.key.size = unit(0.4, "cm")) + theme(legend.title = element_blank(),legend.text = element_text(size = 11), legend.direction = "vertical", legend.position="right") likert.bar.plot(p4Rlike,text.size=4,text.color="#383737") + theme(title = element_blank(), axis.text.x = element_blank(), axis.text.y = element_text(size="12",colour="black",face="italic")) + theme(panel.background = element_rect(color = "black", fill = NA)) + theme(legend.key.size = unit(0.4, "cm")) + theme(legend.title = element_blank(),legend.text = element_text(size = 11), legend.direction = "vertical", legend.position="right") #KWRA Test for Likert Data pSigTest <- p0p4data pSigTest$Group <- factor(pSigTest$Group, levels=c("A", "B", "CA","CB"), ordered=T) kruskal.test(EvalRE ~ Group, data = pSigTest) kruskal.test(EvalI ~ Group, data = pSigTest) kruskal.test(ToolUse ~ Group, data = pSigTest) kruskal.test(ToolAppear ~ Group, data = pSigTest) kruskal.test(ToolModel ~ Group, data = pSigTest) kruskal.test(ToolAnalysis ~ Group, data = pSigTest) kruskal.test(Recommend ~ Group, data = pSigTest) ################################################# ##### Completion Time Analysis #Open Data timeData = read.csv('time.csv') #Possible Column Selection tfinalTimescols <- c("ID", "ALL") tGroupAllcols <- c("GROUP","ALL") allTimeDataCols <- c("ID","GROUP","P0","P1A","P1B","P1","P2","P3","P4","SUM","ALL") tNoGroupCols <- c("ID","P0","P1A","P1B","P1","P2","P3","P4","SUM","ALL") tNoIDCols <- c("GROUP","P0","P1A","P1B","P1","P2","P3","P4","SUM","ALL") timeCols <- c("P0","P1A","P1B","P1","P2","P3","P4","SUM","ALL") justP3Cols <- c("ID","GROUP","P3") justP2Cols <- c("ID","GROUP","P2") #Make BoxPlot of every timed variable. allTimeData <- removeCols(allTimeDataCols,timeData) allTimeData$P0 <- as.POSIXct(allTimeData$P0, format = "%H:%M:%S") allTimeData$P1A <- as.POSIXct(allTimeData$P1A, format = "%H:%M:%S") allTimeData$P1B <- as.POSIXct(allTimeData$P1B, format = "%H:%M:%S") allTimeData$P1 <- as.POSIXct(allTimeData$P1, format = "%H:%M:%S") allTimeData$P2 <- as.POSIXct(allTimeData$P2, format = "%H:%M:%S") allTimeData$P3 <- as.POSIXct(allTimeData$P3, format = "%H:%M:%S") allTimeData$P4 <- as.POSIXct(allTimeData$P4, format = "%H:%M:%S") allTimeData$SUM <- as.POSIXct(allTimeData$SUM, format = "%H:%M:%S") allTimeData$ALL <- as.POSIXct(allTimeData$ALL, format = "%H:%M:%S") allTimeData1 <- removeCols(tNoGroupCols,allTimeData) data_melted1 <- melt(allTimeData1, id.var = "ID") p <- ggplot(data_melted1, aes(x = ID, y = value, colour = variable)) + geom_point() p #KWRS Test for RQ0 - Four Groups "A", "B", "CA","CB" allTimeData$GROUP <- factor(allTimeData$GROUP, levels=c("A", "B", "CA","CB"), ordered=T) kruskal.test(P1 ~ GROUP, data = allTimeData) #KWRS Test for RQ1 - "A" + "CA" vs. "B" + "CB" justP2Data <- removeCols(justP2Cols, allTimeData) justP2Data$GROUP <- factor(justP2Data$GROUP, levels=c("A", "B", "CA","CB"), ordered=T) levels(justP2Data$GROUP) <- c("A", "B", "A","B") kruskal.test(P2 ~ GROUP, data = justP2Data) #KWRS Test for RQ1 - "A" vs. "CA" and "B" vs. "CB" allTimeData2 <- allTimeData allTimeData2$GROUP <- factor(allTimeData2$GROUP, levels=c("A", "B", "CA","CB"), ordered=T) groupACAData <- allTimeData2[ which(allTimeData2$GROUP=="A" | allTimeData2$GROUP=="CA"), ] groupBCBData <- allTimeData2[ which(allTimeData2$GROUP=="B" | allTimeData2$GROUP=="CB"), ] kruskal.test(P2 ~ GROUP, data = groupACAData) kruskal.test(P2 ~ GROUP, data = groupBCBData) # Plot of "B" vs. "CB" time data. p <- ggplot(groupBCBData, aes(x = ID, y = P2, colour = GROUP)) + geom_point() p #KWRS Test for RQ2 - Three Groups "A", "B", "C" justP3Data <- removeCols(justP3Cols, allTimeData) justP3Data$GROUP <- factor(justP3Data$GROUP, levels=c("A", "B", "CA","CB"), ordered=T) levels(justP3Data$GROUP) <- c("A", "B", "C","C") kruskal.test(P3 ~ GROUP, data = justP3Data) #Plot RQ2 Data p <- ggplot(justP3Data, aes(x = ID, y = P3, colour = GROUP)) + geom_point() p #Dunn's Post-hoc Test dunn.test(x=justP3Data$P3, g=justP3Data$GROUP, list=TRUE)