annotate latex/scripts/results_and_figures.R @ 4:3e666d0329b5 tip

updated code
author Jiajie Dai <daijiajie1@gmail.com>
date Sat, 06 Jan 2018 12:20:49 +0000
parents 6531169e6866
children
rev   line source
daijiajie1@1 1 cat("\n____________________________\n")
daijiajie1@1 2 cat("\n____ MAIN PAPER RESULTS ____\n")
daijiajie1@1 3 cat("\n____________________________\n\n")
daijiajie1@1 4 cat("This script assumes that the script data_import.R has been run.\n")
daijiajie1@1 5 cat("This script generates statistics and figures used in the JASA submission.\n\n")
daijiajie1@1 6
daijiajie1@1 7 ##############################################################################
daijiajie1@1 8 # METHOD SECTION OUTPUT
daijiajie1@1 9 ##############################################################################
daijiajie1@1 10
daijiajie1@1 11 cat("\n____ METHOD SECTION ____\n\n")
daijiajie1@1 12 cat("- data for self-assessment table:\n")
daijiajie1@1 13 print(with(meta[meta$instudy,], summary(data.frame(age, musical.background, sing.ability, sing.experience, choir.experience))))
daijiajie1@1 14
daijiajie1@1 15 cat("\n____ ACCURACY SECTION ____\n\n")
daijiajie1@1 16
daijiajie1@1 17 cat("- Interval error significance tests:\n\n")
daijiajie1@1 18 significance.level <- 0.0001
daijiajie1@1 19 res <- with(data[data$ispoor == F, ],
daijiajie1@1 20 t.test(intervalerror[ expectedinterval == 8 ]))
daijiajie1@1 21 cat( " - Upward minor sixth is flat.\n")
daijiajie1@1 22 cat(sprintf(" Is the difference significant at significance level %0.4f? %s (p = %g, df=%g, t = %g)\n\n", significance.level, res$p.value < significance.level, res$p.value, res$parameter, res$statistic))
daijiajie1@1 23
daijiajie1@1 24 res <- with(data[data$ispoor == F, ],
daijiajie1@1 25 t.test(intervalerror[ expectedinterval == 12 ]))
daijiajie1@1 26 cat( " - Upward octave is flat.\n")
daijiajie1@1 27 cat(sprintf(" Is the difference significant at significance level %0.4f? %s (p = %g, df=%g, t = %g)\n\n", significance.level, res$p.value < significance.level, res$p.value, res$parameter, res$statistic))
daijiajie1@1 28
daijiajie1@1 29 res <- with(data[data$ispoor == F, ],
daijiajie1@1 30 t.test(intervalerror[ expectedinterval == 0 ]))
daijiajie1@1 31 cat(sprintf(" - Prime (0 interval) is sharp by %0.2f.\n", res$estimate))
daijiajie1@1 32 cat(sprintf(" Is the difference significant at significance level %0.4f? %s (p = %g, df=%g, t = %g)\n\n", significance.level, res$p.value < significance.level, res$p.value, res$parameter, res$statistic))
daijiajie1@1 33
daijiajie1@1 34 cat("- explaining pitch error by following interval or beginning of phrase\n\n")
daijiajie1@1 35 is.beginning.of.phrase <- I(data$noteid[!data$ispoor] %in% c(1,7,13,20))
daijiajie1@1 36 res <- with(data[!data$ispoor, ],
daijiajie1@1 37 summary(lm(pitcherror ~ is.beginning.of.phrase + expectedfutureinterval)))
daijiajie1@1 38 cat(sprintf(" - p: %0.3g, %0.3g\n",res$coefficients[3,4],res$coefficients[2,4]))
daijiajie1@1 39 cat(sprintf(" - F = %g\n",res$fstatistic[1]))
daijiajie1@1 40 cat(sprintf(" - DF: %0.0f\n",res$fstatistic[3]))
daijiajie1@1 41 cat(sprintf(" - Variance explained: %0.1f%s\n",100*res$r.squared,"%"))
daijiajie1@1 42 cat(sprintf(" - Sharpening in cents per note in interval: %0.1f\n\n",100*res$coefficients[3,1]))
daijiajie1@1 43
daijiajie1@1 44 res <- with(data[!data$ispoor, ],
daijiajie1@1 45 summary(lm(pitcherror ~ is.beginning.of.phrase)))
daijiajie1@1 46 cat(sprintf(" - Variance explained only by intercept and following interval: %0.1f%s\n",100*res$r.squared,"%"))
daijiajie1@1 47 cat(sprintf(" - p: %0.3g\n",res$coefficients[2,4]))
daijiajie1@1 48 cat(sprintf(" - F = %g\n",res$fstatistic[1]))
daijiajie1@1 49 cat(sprintf(" - DF: %0.0f\n\n",res$fstatistic[3]))
daijiajie1@1 50 # cat(sprintf(" - Variance explained: %0.1f%s\n\n",100*res$r.squared,"%"))
daijiajie1@1 51
daijiajie1@1 52 res <- with(data[!data$ispoor, ],
daijiajie1@1 53 summary(lm(pitcherror ~ expectedfutureinterval)))
daijiajie1@1 54 cat(sprintf(" - Variance explained only by intercept and beginning of phrase: %0.1f%s\n",100*res$r.squared,"%"))
daijiajie1@1 55 cat(sprintf(" - p: %0.3g\n",res$coefficients[2,4]))
daijiajie1@1 56 cat(sprintf(" - F = %g\n",res$fstatistic[1]))
daijiajie1@1 57 cat(sprintf(" - DF: %0.0f\n\n",res$fstatistic[3]))
daijiajie1@1 58 # cat(sprintf(" - Variance explained: %0.1f%s\n\n",100*res$r.squared,"%"))
daijiajie1@1 59
daijiajie1@1 60 et.ji.test <- with(data[!data$ispoor,], t.test(abs(pitcherror), abs(jipitcherror), paired=T))
daijiajie1@1 61 etMAPE <- with(data[!data$ispoor,], mean(abs(pitcherror), na.rm=T))
daijiajie1@1 62 jiMAPE <- with(data[!data$ispoor,], mean(abs(jipitcherror), na.rm=T))
daijiajie1@1 63 cat("- Error difference between ET and JI error:\n")
daijiajie1@1 64 cat(" Is it significant? Paired t-test says:")
daijiajie1@1 65 cat(sprintf("%s (p = %g, df: %0.0f, t = %g)\n\n", et.ji.test$p.value < 0.01, et.ji.test$p.value, et.ji.test$parameter, et.ji.test$statistic), "\n")
daijiajie1@1 66 cat(sprintf("ET (MAPE: %g) fits better than JI (MAPE: %g), by %g\n\n", etMAPE, jiMAPE, et.ji.test$estimate))
daijiajie1@1 67
daijiajie1@1 68 ##############################################################################
daijiajie1@1 69 # RESULTS SECTION OUTPUT
daijiajie1@1 70 ##############################################################################
daijiajie1@1 71 cat("\n____ RESULTS SECTION ____\n\n")
daijiajie1@1 72 cat("Basic metrics statistics.\n")
daijiajie1@1 73 cat(sprintf(" - MAPE. Mean: %0.3f; median: %0.3f; sd: %0.3f\n", mean(agg.mape$mape), median(agg.mape$mape), sd(agg.mape$mape)))
daijiajie1@1 74 cat(sprintf(" - MAIE. Mean: %0.3f; median: %0.3f; sd: %0.3f\n", mean(agg.maie$maie), median(agg.maie$maie), sd(agg.maie$maie)))
daijiajie1@1 75 # cat(sprintf(" - IB. Mean: %0.3f; median: %0.3f; sd: %0.3f\n", mean(agg.ib$ib), median(agg.ib$ib), sd(agg.ib$ib)))
daijiajie1@1 76 cat(sprintf(" - D. Mean: %0.3f; median: %0.3f; sd: %0.3f\n", mean(agg.drifts$diffs), median(agg.drifts$diffs), sd(agg.drifts$diffs)))
daijiajie1@1 77 cat(sprintf(" - |D|. Mean: %0.3f; median: %0.3f; sd: %0.3f\n\n", mean(abs(agg.drifts$diffs)), median(abs(agg.drifts$diffs)), sd(abs(agg.drifts$diffs))))
daijiajie1@1 78 cat(sprintf(" - lin D. in cents: Mean: %0.3f; median: %0.3f; sd: %0.3f\n", 100*mean(linear.drift$lineardrift), 100*median(linear.drift$lineardrift), 100*sd(linear.drift$lineardrift)))
daijiajie1@1 79
daijiajie1@1 80 cat(sprintf("- Significance of drift:"))
daijiajie1@1 81 cat(sprintf(" - significant drifts: %i of %i (%0.0f%s)\n", sum(agg.drifts.p$p<0.01), length(agg.drifts.p$p), 100*mean(agg.drifts.p$p<0.01), "%"))
daijiajie1@1 82 with(agg.drifts.p[agg.drifts$diffs>0,], cat(sprintf(" - number of upward drifts: %i, of which %i significantly so.\n", length(p), sum(p<0.01))))
daijiajie1@1 83 with(agg.drifts.p[agg.drifts$diffs<0,], cat(sprintf(" - number of downward drifts: %i, of which %i significantly so.\n\n", length(p), sum(p<0.01))))
daijiajie1@1 84
daijiajie1@1 85 cat(sprintf("- Significance of linear drift"))
daijiajie1@1 86 cat(sprintf(" - significant drifts: %i of %i (%0.0f%%) at conf. level 0.01, %i of %i (%0.0f%%) at conf. level 0.05 \n", sum(linear.drift$p.value<0.01), length(linear.drift$p.value), 100*mean(linear.drift$p.value<0.01), sum(linear.drift$p.value<0.05), length(linear.drift$p.value), 100*mean(linear.drift$p.value<0.05)))
daijiajie1@1 87 with(linear.drift[linear.drift$lineardrift>0,], cat(sprintf(" - number of upward drifts: %i, of which %i significantly so at 0.01.\n", length(p.value), sum(p.value<0.01))))
daijiajie1@1 88 with(linear.drift[linear.drift$lineardrift<0,], cat(sprintf(" - number of downward drifts: %i, of which %i significantly so at 0.01.\n\n", length(p.value), sum(p.value<0.01))))
daijiajie1@1 89 with(linear.drift[linear.drift$lineardrift>0,], cat(sprintf(" - number of upward drifts: %i, of which %i significantly so at 0.05.\n", length(p.value), sum(p.value<0.05))))
daijiajie1@1 90 with(linear.drift[linear.drift$lineardrift<0,], cat(sprintf(" - number of downward drifts: %i, of which %i significantly so at 0.05.\n\n", length(p.value), sum(p.value<0.05))))
daijiajie1@1 91
daijiajie1@1 92
daijiajie1@1 93 cat("- Correlation table (LaTeX syntax)\n")
daijiajie1@1 94 # cor.df <- data.frame(sg.abl=as.numeric(merged.agg$sing.ability), sg.exp=as.numeric(merged.agg$sing.experience), mus.bg=as.numeric(merged.agg$musical.background), ch.exp=as.numeric(merged.agg$choir.experience), MAIE=merged.agg$maie, MAPE=merged.agg$mape, IB=merged.agg$ib, D=merged.agg$diffs, abs.D=abs(merged.agg$diffs))
daijiajie1@1 95 cor.df <- data.frame(sg.abl=as.numeric(merged.agg$sing.ability), sg.exp=as.numeric(merged.agg$sing.experience), mus.bg=as.numeric(merged.agg$musical.background), ch.exp=as.numeric(merged.agg$choir.experience), MAIE=merged.agg$maie, MAPE=merged.agg$mape, lin.D=merged.agg$lineardrift, abs.D=abs(merged.agg$diffs), D=merged.agg$diffs)
daijiajie1@1 96 # cortable(data.frame(sg.abl=as.numeric(merged.agg$sing.ability), mus.bg=as.numeric(merged.agg$musical.background), ch.exp=as.numeric(merged.agg$choir.experience), MAIE=merged.agg$maie, ib=merged.agg$ib, MAPE=merged.agg$mape, D=merged.agg$diffs, abs.D=abs(merged.agg$diffs)))
daijiajie1@1 97 cortable(cor.df)
daijiajie1@1 98 cat("\n\n")
daijiajie1@1 99
daijiajie1@1 100 # testing singer predicting MAPE, MAIE, and drift
daijiajie1@1 101 cat("- Variance explained by singer for different measures\n\n")
daijiajie1@1 102 res <- summary(lm(mape~singer, data=agg.mape))
daijiajie1@1 103 pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 104 df <- res$fstatistic[2]
daijiajie1@1 105 cat(sprintf(" - MAPE: %0.2f%%, p-value: %0.5g, df = %g, F = %g\n", res$r.squared*100, pval, df, res$fstatistic[1]))
daijiajie1@1 106 res <- summary(lm(maie~singer, data=agg.maie))
daijiajie1@1 107 pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 108 df <- res$fstatistic[2]
daijiajie1@1 109 cat(sprintf(" - MAIE: %0.2f%%, p-value: %0.5g, df = %g, F = %g\n", res$r.squared * 100, pval, df, res$fstatistic[1]))
daijiajie1@1 110 # res <- summary(lm(ib~singer, data=agg.ib))
daijiajie1@1 111 # pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 112 # cat(sprintf(" - IB: %0.2f%%, p-value: %0.5g\n", res$r.squared * 100, pval))
daijiajie1@1 113 res <- summary(lm(lineardrift~singer, data=linear.drift))
daijiajie1@1 114 pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 115 df <- res$fstatistic[2]
daijiajie1@1 116 cat(sprintf(" - lin.D: %0.2f%%, p-value: %0.5g, df = %g, F = %g\n", res$r.squared * 100, pval, df, res$fstatistic[1]))
daijiajie1@1 117 res <- summary(lm(diffs~singer, data=agg.drifts))
daijiajie1@1 118 pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 119 df <- res$fstatistic[2]
daijiajie1@1 120 cat(sprintf(" - D: %0.2f%%, p-value: %0.5g, df = %g, F = %g\n", res$r.squared * 100, pval, df, res$fstatistic[1]))
daijiajie1@1 121 res <- summary(lm(abs(diffs)~singer, data=agg.drifts))
daijiajie1@1 122 pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 123 df <- res$fstatistic[2]
daijiajie1@1 124 cat(sprintf(" - |D|: %0.2f%%, p-value: %0.5g, df = %g, F = %g\n\n", res$r.squared * 100, pval, df, res$fstatistic[1]))
daijiajie1@1 125
daijiajie1@1 126
daijiajie1@1 127 # testing influence of condition
daijiajie1@1 128 cat("- Testing influence of singing condition (Normal/Masked/Imagined) via Kruskal-Wallis tests (sign. level 0.01):\n\n")
daijiajie1@1 129 res <- kruskal.test(mape ~ mode, data = agg.mape)
daijiajie1@1 130 cat(sprintf(" - MAPE significant difference due to condition? %s (p-value: %0.5g, df = %g, chisquared = %g)\n", res$p.value<0.01, res$p.value, res$parameter, res$statistic))
daijiajie1@1 131 res <- kruskal.test(maie ~ mode, data = agg.maie)
daijiajie1@1 132 cat(sprintf(" - MAIE significant difference due to condition? %s (p-value: %0.5g, df = %g, chisquared = %g)\n", res$p.value<0.01, res$p.value, res$parameter, res$statistic))
daijiajie1@1 133 # res <- kruskal.test(ib ~ mode, data = agg.ib)
daijiajie1@1 134 # cat(sprintf(" - IB significant difference due to condition? %s (p-value: %0.5g)\n", res$p.value<0.01, res$p.value))
daijiajie1@1 135 res <- kruskal.test(lineardrift ~ mode, data = linear.drift)
daijiajie1@1 136 cat(sprintf(" - lin. D significant difference due to condition? %s (p-value: %0.5g, df = %g, chisquared = %g)\n", res$p.value<0.01, res$p.value, res$parameter, res$statistic))
daijiajie1@1 137 res <- kruskal.test(diffs ~ mode, data = agg.drifts)
daijiajie1@1 138 cat(sprintf(" - D significant difference due to condition? %s (p-value: %0.5g, df = %g, chisquared = %g)\n", res$p.value<0.01, res$p.value, res$parameter, res$statistic))
daijiajie1@1 139 res <- kruskal.test(abs(diffs) ~ mode, data = agg.drifts)
daijiajie1@1 140 cat(sprintf(" - |D| significant difference due to condition? %s (p-value: %0.5g, df = %g, chisquared = %g)\n", res$p.value<0.01, res$p.value, res$parameter, res$statistic))
daijiajie1@1 141
daijiajie1@1 142 # cat("- \"Flat\" singer: \n\n")
daijiajie1@1 143 # "hl"
daijiajie1@1 144 # with(agg.drifts.all, cat(sprintf(" - drift in normal condition: %0.2f semitones\n", diffs[singer=="hl" & mode=="normal"])))
daijiajie1@1 145 # with(linear.drift.all, cat(sprintf(" - linear drift in normal condition: %0.2f cents per note\n", 100 * lineardrift[singer=="hl" & mode=="normal"])))
daijiajie1@1 146 # with(agg.drifts.all, cat(sprintf(" - drift in masked condition: %0.2f semitones\n", diffs[singer=="hl" & mode=="masked"])))
daijiajie1@1 147 # with(linear.drift.all, cat(sprintf(" - linear drift in masked condition: %0.2f cents per note\n", 100 * lineardrift[singer=="hl" & mode=="masked"])))
daijiajie1@1 148 # with(agg.drifts.all, cat(sprintf(" - drift in imagined condition: %0.2f semitones\n", diffs[singer=="hl" & mode=="imagined"])))
daijiajie1@1 149 # with(linear.drift.all, cat(sprintf(" - linear drift in imagined condition: %0.2f cents per note\n\n", 100 * lineardrift[singer=="hl" & mode=="imagined"])))
daijiajie1@1 150
daijiajie1@1 151 ##############################################################################
daijiajie1@1 152 # MODEL SECTION OUTPUT
daijiajie1@1 153 ##############################################################################
daijiajie1@1 154 cat("\n____ MODEL SECTION ____\n\n")
daijiajie1@1 155
daijiajie1@1 156 # notevar <- with(mdr[!mdr$ispoor,], aggregate(I(p-s-tstart), list(notenumber=notenumber), function(x)var(x,na.rm=T))[,2])
daijiajie1@1 157 # notevar2 <- with(data[!data$ispoor,], aggregate(pitcherror, list(notenumber=notenumber), function(x)var(x,na.rm=T))[,2])
daijiajie1@1 158 # driftvar <- notevar-notevar2
daijiajie1@1 159 # driftvar.fit <- lm(driftvar[7:75]~I(7:75))
daijiajie1@1 160 # sqrt(driftvar.fit$coefficients[2]*50)
daijiajie1@1 161
daijiajie1@1 162 cat("- existence of 'spread'\n")
daijiajie1@1 163 var.by.notenumber <- aggregate(data$relativetonic[!data$ispoor], list(data$notenumber[!data$ispoor]), function(x) {var(x, na.rm=T)})
daijiajie1@1 164 var2.by.notenumber <- aggregate(data$pitcherror[!data$ispoor], list(data$notenumber[!data$ispoor]), function(x) {var(x, na.rm=T)})
daijiajie1@1 165 counts.by.notenumber <- aggregate(data$relativetonic[!data$ispoor], list(data$notenumber[!data$ispoor]), function(x) {sum(!is.na(x))})
daijiajie1@1 166 dist.by.notenumber <- aggregate(abs(data$relativetonic[!data$ispoor]), list(data$notenumber[!data$ispoor]), function(x) {mean(x, na.rm=T)})
daijiajie1@1 167 fit1 <- lm(var.by.notenumber[,2]~var2.by.notenumber[,2], weights=counts.by.notenumber[,2])
daijiajie1@1 168 fit2 <- lm(fit1$residuals~var.by.notenumber[(burnin+1):75,1], weights=counts.by.notenumber[(burnin+1):75,2])
daijiajie1@1 169 summary(fit2)
daijiajie1@1 170 res <- summary(fit2)
daijiajie1@1 171 pval <- pf(res$fstatistic[1],res$fstatistic[2],res$fstatistic[3],lower.tail=FALSE)
daijiajie1@1 172 cat(sprintf(" - notenumber: %0.2f%%, p-value: %0.5g, df = %g, F = %g\n\n", res$r.squared * 100, pval, res$fstatistic[1], res$fstatistic[3]))
daijiajie1@1 173 plot(names(fit1$residuals), fit1$residuals)
daijiajie1@1 174 abline(fit2)
daijiajie1@1 175
daijiajie1@1 176 intvar <- var(data$intervalerror[!data$ispoor], na.rm=T)
daijiajie1@1 177 expected.D.var <- 50 * intvar
daijiajie1@1 178 expected.D.sd <- expected.D.var^0.5
daijiajie1@1 179 pitch.err.sd <- sd(data$pitcherror[!data$ispoor], na.rm=T)
daijiajie1@1 180 cat(sprintf("- inadequacy of mu = 0 model:\n\n"))
daijiajie1@1 181 cat(sprintf(" - interval (error) variance: %0.3f\n", intvar))
daijiajie1@1 182 cat(sprintf(" - expected variance of D (interval variance summed over 50 notes): %0.3f\n", expected.D.var))
daijiajie1@1 183 cat(sprintf(" - ... and the corresponding standard deviation: %0.3f\n\n", expected.D.sd))
daijiajie1@1 184 cat(sprintf(" - In comparison the standard deviation of pitch erros is: %0.3f\n\n", pitch.err.sd))
daijiajie1@1 185
daijiajie1@1 186 model.mape <- apply(md[!md$ispoor,(1:nmu)+8], 2, function(x) {mean(abs(x),na.rm=T)})
daijiajie1@1 187 model.mape.singerwise <- aggregate(md[!md$ispoor,(1:nmu)+8], list(md$singer[!md$ispoor]), function(x) {mean(abs(x),na.rm=T)})
daijiajie1@1 188 model.mape.recordingwise <- aggregate(md[!md$ispoor,(1:nmu)+8], list(md$singer[!md$ispoor],md$mode[!md$ispoor]), function(x) {mean(abs(x),na.rm=T)})
daijiajie1@1 189
daijiajie1@1 190 recording.mus <- data.frame(singer = model.mape.recordingwise[,1], mu = mus[apply(model.mape.recordingwise[,-(1:2)], 1, which.min)])
daijiajie1@1 191 # singer.mus <- data.frame(singer = model.mape.singerwise[,1], mu = mus[apply(model.mape.singerwise[,-1], 1, which.min)])
daijiajie1@1 192 singer.mus <- aggregate(recording.mus[,2], list(recording.mus[,1]),mean)
daijiajie1@1 193
daijiajie1@1 194 cat(sprintf("- Better parameter for mu, firstly via 'model MAPE':\n\n"))
daijiajie1@1 195 cat(sprintf(" - the smallest error of %0.2f is achieved with model '%s'\n", min(model.mape), names(which.min(model.mape))))
daijiajie1@1 196 cat(sprintf(" - error at mu = 0: %0.2f\n", model.mape[1]))
daijiajie1@1 197 cat(sprintf(" - error at mu = 1: %0.2f\n\n", model.mape[length(model.mape)]))
daijiajie1@1 198
daijiajie1@1 199 #-------------------------------
daijiajie1@1 200 mdr <- merge(md, mr[,c(1,2,5)], by=c("singer", "mode"))
daijiajie1@1 201 # plot(I(p-s-tstart)~factor(notenumber), data=mdr)
daijiajie1@1 202
daijiajie1@1 203 sig2 <- var(data$pitcherror[!data$ispoor], na.rm=T)
daijiajie1@1 204 sig2int <- var(data$intervalerror[!data$ispoor], na.rm=T)
daijiajie1@1 205 n <- 50
daijiajie1@1 206 # vd <- var(drifts[!drifts$singer %in% poor.singers,4], na.rm=T)
daijiajie1@1 207 # vd <- var(drifts$diffs[!drifts$singer %in% poor.singers], na.rm=T)
daijiajie1@1 208 vd <- var(agg.drifts$diffs)
daijiajie1@1 209 est.mu <- 1-sqrt(vd/(n*sig2))
daijiajie1@1 210
daijiajie1@1 211 cat("- Estimate according to drift variance formula:\n\n")
daijiajie1@1 212 cat(sprintf(" - overall pitch error variance: %0.3f\n", sig2))
daijiajie1@1 213 # cat(sprintf(" - overall interval error variance: %0.3f", sig2int))
daijiajie1@1 214 cat(sprintf(" - observed variance over 50-note gap: %0.3f\n", vd))
daijiajie1@1 215 cat(sprintf(" - estimated mu based on these: %0.3f\n\n", est.mu))
daijiajie1@1 216
daijiajie1@1 217 cat("- Stats for mu by singer:\n")
daijiajie1@1 218 cat(sprintf(" - range: %0.3f to %0.3f\n", range(singer.mus[,2])[1], range(singer.mus[,2])[2]))
daijiajie1@1 219 cat(sprintf(" - mean: %0.3f, median: %0.3f, sd: %0.3f\n\n", mean(singer.mus[,2]), median(singer.mus[,2]), sd(singer.mus[,2])))
daijiajie1@1 220
daijiajie1@1 221
daijiajie1@1 222 # n <- 50
daijiajie1@1 223 # mu <- 0.916
daijiajie1@1 224 # sig2 <- var(data$pitcherror[ !data$ispoor ], na.rm=T)
daijiajie1@1 225 # vv <- var(drifts$diffs[!drifts$singer %in% poor.singers], na.rm=T)
daijiajie1@1 226 # vv <- var(drifts$diffs[!drifts$singer %in% poor.singers & drifts$noteid ==iNote], na.rm=T)
daijiajie1@1 227
daijiajie1@1 228 # n <- 50
daijiajie1@1 229 # sig2 <- var(data$pitcherror[ !data$ispoor ], na.rm=T)
daijiajie1@1 230 # vv <- var(agg.drifts$diffs)
daijiajie1@1 231 # est.mu <- 1-sqrt(vv/(n*sig2))
daijiajie1@1 232 #
daijiajie1@1 233 # vv <- var(agg.drifts$diffs)
daijiajie1@1 234 # for (mu in c(0,0.8,0.9,est.mu, 0.95, 1))
daijiajie1@1 235 # {
daijiajie1@1 236 # dvar <- (1-mu)^2 * n * sig2
daijiajie1@1 237 # cat(sprintf("Example: mu = %g, sigma^2 = %g, n = %g\n", mu, sig2, n))
daijiajie1@1 238 # cat(sprintf(" ... var = %g, sd = %g\n", dvar, sqrt(dvar)))
daijiajie1@1 239 # }
daijiajie1@1 240 # CHECK!!!!!
daijiajie1@1 241
daijiajie1@1 242 # singermodemu <- c()
daijiajie1@1 243 # for (singer in singers[!singers %in% poor.singers])
daijiajie1@1 244 # {
daijiajie1@1 245 # for (mode in c("normal","imagined","masked"))
daijiajie1@1 246 # {
daijiajie1@1 247 # sig2 <- var(data$pitcherror[drifts$singer==singer & drifts$mode==mode], na.rm=T)
daijiajie1@1 248 # # sig2int <- var(data$intervalerror[data$singermode==singermode], na.rm=T)
daijiajie1@1 249 # n <- 50
daijiajie1@1 250 # vd <- var(drifts$diffs[drifts$singer==singer & drifts$mode==mode], na.rm=T)
daijiajie1@1 251 # est.mu <- 1-sqrt(vd/(n*sig2))
daijiajie1@1 252 # # cat(sprintf("%s: %0.3f\n", singer, est.mu))
daijiajie1@1 253 # singermode <- sprintf("%s%s", singer, mode)
daijiajie1@1 254 # singermodemu <- rbind(singermodemu, data.frame(singermode=singermode, singer=singer, mode=mode, mu=est.mu))
daijiajie1@1 255 # }
daijiajie1@1 256 # }
daijiajie1@1 257 # hist(singermodemu$mu, col="gray")
daijiajie1@1 258
daijiajie1@1 259 # make drift figures
daijiajie1@1 260 for (singermode in sort(unique(data$singermode)))
daijiajie1@1 261 {
daijiajie1@1 262 pdf(sprintf("../figures/drift_figure_%s.pdf", singermode), width = 3.5, height = 3.5)
daijiajie1@1 263 makeDriftGraph(data, singermode)
daijiajie1@1 264 dev.off()
daijiajie1@1 265 }
daijiajie1@1 266
daijiajie1@1 267 for (singermode in sort(unique(data$singermode)))
daijiajie1@1 268 {
daijiajie1@1 269 pdf(sprintf("../figures/drift_figure_model0850_%s.pdf", singermode), width = 5.5, height = 4.5)
daijiajie1@1 270 with(data[data$singermode==singermode,], plot(notenumber, newmedian-semitone, pch="+", ylab="pitch", xlab="note"))
daijiajie1@1 271 with(md[md$singermode==singermode,], points(notenumber, p-s-err0850, pch=20, type='o'))
daijiajie1@1 272 dev.off()
daijiajie1@1 273 }
daijiajie1@1 274
daijiajie1@1 275 countsByInterval <- with(data[!data$ispoor,], aggregate(data.frame(count=data$intervalerror), list(interval=data$expectedinterval), function(x){sum(!is.na(x))}))
daijiajie1@1 276
daijiajie1@1 277 pdf("../figures/interval_error_by_interval_boxplot.pdf", width = 5.5, height = 4)
daijiajie1@1 278 par(mar=c(2,4,1,.5))
daijiajie1@1 279 plot(c(1,18), c(-1.6,1.6), type='n', xaxt='n', xlab = '', ylab='', yaxt='n')
daijiajie1@1 280 abline(h=0)
daijiajie1@1 281 abline(h=-1, lty=2)
daijiajie1@1 282 abline(h=1, lty=2)
daijiajie1@1 283 plot(intervalerror ~ factor(expectedinterval, levels=-5:12), data=data, subset = !ispoor,
daijiajie1@1 284 pch=20, col=rgb(0.9,0.9,0.9), ylim = c(-2,2), outline=F, xaxt='n', yaxt='n', add=T,
daijiajie1@1 285 ylab="interval error (with respect to ET)", xlab="interval in semitones",
daijiajie1@1 286 cex.axis=0.8, lty=1)
daijiajie1@1 287 posi <- c(1:6, 8, 11, 13, 14, 18)
daijiajie1@1 288 axis(2, at=c(-1,0,1), cex.axis=0.8)
daijiajie1@1 289 axis(1, at=posi, labels=posi-6, cex.axis=0.8)
daijiajie1@1 290 # text(counts$interval + 6, rep(2,11), counts$count, cex=0.7)
daijiajie1@1 291 mtext(c("n=", countsByInterval$count), at=c(-.1,countsByInterval$interval + 6), cex=0.7)
daijiajie1@1 292 dev.off()
daijiajie1@1 293
daijiajie1@1 294 countsByNoteID <- with(data[!data$ispoor,], aggregate(data.frame(count=data$intervalerror), list(noteid=data$noteid), function(x){sum(!is.na(x))}))
daijiajie1@1 295
daijiajie1@1 296 pdf("../figures/interval_error_by_notenumber_boxplot.pdf", width = 7, height = 4)
daijiajie1@1 297 par(mar=c(2,.5,1,1))
daijiajie1@1 298 plot(c(1,25), c(-1.6,1.6), type='n', xaxt='n', xlab = '', ylab='', yaxt='n')
daijiajie1@1 299 abline(h=0)
daijiajie1@1 300 abline(h=-1, lty=2)
daijiajie1@1 301 abline(h=1, lty=2)
daijiajie1@1 302 plot(intervalerror ~ factor(noteid, levels=1:75), data=data, subset = !ispoor,
daijiajie1@1 303 pch=20, col=rgb(0.9,0.9,0.9), ylim = c(-2,2), outline=F, add=T,
daijiajie1@1 304 ylab="interval error (with respect to ET)", xlab="interval in semitones",
daijiajie1@1 305 cex.axis=0.8, lty=1, yaxt='n', boxwex=0.6)
daijiajie1@1 306 # posi <- c(1:6, 8, 11, 13, 14, 18)
daijiajie1@1 307 # axis(1, at=posi, labels=posi-6, cex.axis=0.8)
daijiajie1@1 308 # text(countsByNoteID$noteid, rep(2,11), countsByNoteID$count, cex=0.7)
daijiajie1@1 309 mtext(c(countsByNoteID$count), at=c(countsByNoteID$noteid), cex=0.7)
daijiajie1@1 310 text(1:25, rep(-1.5,11), c("(-5)", gtdata$interval_ST[-25]), cex=0.7)
daijiajie1@1 311 text(2.7, -1.35 , "intervals in semitones", cex=0.7)
daijiajie1@1 312 text(1-.5, 1.3, "phrase 1", pos=4)
daijiajie1@1 313 abline(v=6.5, lty=1, col='gray')
daijiajie1@1 314 text(7-.5, 1.3, "phrase 2", pos=4)
daijiajie1@1 315 abline(v=12.5, lty=1, col='gray')
daijiajie1@1 316 text(13-.5, 1.3, "phrase 3", pos=4)
daijiajie1@1 317 abline(v=19.5, lty=1, col='gray')
daijiajie1@1 318 text(20-.5, 1.3, "phrase 4", pos=4)
daijiajie1@1 319 dev.off()
daijiajie1@1 320
daijiajie1@1 321 pdf("../figures/pitch_error_by_interval_boxplot.pdf", width = 5.5, height = 4)
daijiajie1@1 322 par(mar=c(2,4,1,.5))
daijiajie1@1 323 plot(c(1,18), c(-1.6,1.6), type='n', xaxt='n', xlab = '', ylab='', yaxt='n')
daijiajie1@1 324 abline(h=0)
daijiajie1@1 325 abline(h=-1, lty=2)
daijiajie1@1 326 abline(h=1, lty=2)
daijiajie1@1 327 plot(pitcherror ~ factor(expectedinterval, levels=-5:12), data=data, subset = !ispoor,
daijiajie1@1 328 pch=20, col=rgb(0.9,0.9,0.9), ylim = c(-2,2), outline=F, xaxt='n', yaxt='n', add=T,
daijiajie1@1 329 ylab="pitch error (with respect to ET)", xlab="interval in semitones",
daijiajie1@1 330 cex.axis=0.8, lty=1)
daijiajie1@1 331 posi <- c(1:6, 8, 11, 13, 14, 18)
daijiajie1@1 332 axis(2, at=c(-1,0,1), cex.axis=0.8)
daijiajie1@1 333 axis(1, at=posi, labels=posi-6, cex.axis=0.8)
daijiajie1@1 334 # text(counts$interval + 6, rep(2,11), counts$count, cex=0.7)
daijiajie1@1 335 # mtext(c("n=", countsByInterval$count), at=c(-.1,countsByInterval$interval + 6), cex=0.7)
daijiajie1@1 336 dev.off()
daijiajie1@1 337
daijiajie1@1 338 countsBySemitone <- with(data[!data$ispoor,], aggregate(data.frame(count=data$pitcherror), list(interval=data$semitone), function(x){sum(!is.na(x))}))
daijiajie1@1 339 pdf("../figures/pitch_error_by_semitone_boxplot.pdf", width = 4.5, height = 4)
daijiajie1@1 340 par(mar=c(2,4,1,.5))
daijiajie1@1 341 plot(c(.5,13.5), c(-1.6,1.6), type='n', xaxt='n', xlab = '', ylab='', yaxt='n')
daijiajie1@1 342 abline(h=0)
daijiajie1@1 343 abline(h=-1, lty=2)
daijiajie1@1 344 abline(h=1, lty=2)
daijiajie1@1 345 plot(pitcherror ~ factor(semitone, levels=-5:7), data=data, subset = !ispoor,
daijiajie1@1 346 pch=20, col=rgb(0.9,0.9,0.9), ylim = c(-2,2), outline=F, xaxt='n', yaxt='n', add=T,
daijiajie1@1 347 ylab="pitch error (with respect to ET)", xlab="interval in semitones",
daijiajie1@1 348 cex.axis=0.8, lty=1)
daijiajie1@1 349 posi <- c(1, 3, 5, 6, 8, 10, 11, 13)
daijiajie1@1 350 axis(2, at=c(-1,0,1), cex.axis=0.8)
daijiajie1@1 351 axis(1, at=posi, labels=posi-6, cex.axis=0.8)
daijiajie1@1 352 # text(counts$interval + 6, rep(2,11), counts$count, cex=0.7)
daijiajie1@1 353 # mtext(c("n=", countsByInterval$count), at=c(-.1,countsByInterval$interval + 6), cex=0.7)
daijiajie1@1 354 dev.off()
daijiajie1@1 355
daijiajie1@1 356 pdf("../figures/pitch_error_by_notenumber_boxplot.pdf", width = 7, height = 4)
daijiajie1@1 357 par(mar=c(2,.5,1,1))
daijiajie1@1 358 plot(c(1,25), c(-1.6,1.6), type='n', xaxt='n', xlab = '', ylab='', yaxt='n')
daijiajie1@1 359 abline(h=0)
daijiajie1@1 360 abline(h=-1, lty=2)
daijiajie1@1 361 abline(h=1, lty=2)
daijiajie1@1 362 plot(pitcherror ~ factor(noteid, levels=1:75), data=data, subset = !ispoor,
daijiajie1@1 363 pch=20, col=rgb(0.9,0.9,0.9), ylim = c(-2,2), outline=F, add=T,
daijiajie1@1 364 ylab="pitch error (with respect to ET)", xlab="interval in semitones",
daijiajie1@1 365 cex.axis=0.8, lty=1, yaxt='n', boxwex=0.6)
daijiajie1@1 366 # posi <- c(1:6, 8, 11, 13, 14, 18)
daijiajie1@1 367 # axis(1, at=posi, labels=posi-6, cex.axis=0.8)
daijiajie1@1 368 # text(countsByNoteID$noteid, rep(2,11), countsByNoteID$count, cex=0.7)
daijiajie1@1 369 # mtext(c(countsByNoteID$count), at=c(countsByNoteID$noteid), cex=0.7)
daijiajie1@1 370 text(1:25, rep(-1.5,11), gtdata$pitch_ion_cents_et/100, cex=0.7)
daijiajie1@1 371 text(2.7, -1.35 , "pitch relative to tonic", cex=0.7)
daijiajie1@1 372 text(1-.5, 1.3, "phrase 1", pos=4)
daijiajie1@1 373 abline(v=6.5, lty=1, col='gray')
daijiajie1@1 374 text(7-.5, 1.3, "phrase 2", pos=4)
daijiajie1@1 375 abline(v=12.5, lty=1, col='gray')
daijiajie1@1 376 text(13-.5, 1.3, "phrase 3", pos=4)
daijiajie1@1 377 abline(v=19.5, lty=1, col='gray')
daijiajie1@1 378 text(20-.5, 1.3, "phrase 4", pos=4)
daijiajie1@1 379 dev.off()
daijiajie1@1 380
daijiajie1@1 381 # linear fit example plot
daijiajie1@1 382 pdf("../figures/pitch_error_example.pdf", width = 6, height = 5)
daijiajie1@1 383 par(mar=c(4,4,.1,.1))
daijiajie1@1 384 ind <- which(data$singer == "jp" & data$mode == "imagined" & data$run == 1)
daijiajie1@1 385 plot(data$newmedian[ind], pch = 5,
daijiajie1@1 386 xlab="note number", ylab="pitch",
daijiajie1@1 387 xlim = c(0,25), las = 1)
daijiajie1@1 388 points((data$newmedian-data$semitone)[ind], pch=18)
daijiajie1@1 389 fit <- lm(I(newmedian-semitone)~notenumber, data = data[ind,])
daijiajie1@1 390 for (ii in 1:25)
daijiajie1@1 391 {
daijiajie1@1 392 lines(c(ii,ii), c(fit$fitted.values[ii], (data$newmedian-data$semitone)[ind[ii]]))
daijiajie1@1 393 }
daijiajie1@1 394 abline(a=fit$coefficients[1], b=fit$coefficients[2])
daijiajie1@1 395 text(0, fit$coefficients[1]+0.3, 0, cex = 0.7)
daijiajie1@1 396 for (offs in 1:8)
daijiajie1@1 397 {
daijiajie1@1 398 abline(a=fit$coefficients[1]+offs, b=fit$coefficients[2], lty = 2)
daijiajie1@1 399 abline(a=fit$coefficients[1]-offs, b=fit$coefficients[2], lty = 2)
daijiajie1@1 400 text(0, fit$coefficients[1]+offs+0.3, +offs, cex = 0.7)
daijiajie1@1 401 text(0, fit$coefficients[1]-offs+0.3, -offs, cex = 0.7)
daijiajie1@1 402 }
daijiajie1@1 403 dev.off()
daijiajie1@1 404
daijiajie1@1 405 # drift histogram
daijiajie1@1 406 pdf("../figures/drift_histogram.pdf", width = 6, height = 4)
daijiajie1@1 407 par(mar=c(4,4,.3,.5))
daijiajie1@1 408 hist(agg.drifts$diffs, seq(-1.5,1.5,by=0.2), col="dark gray", border="black",
daijiajie1@1 409 xlab = "drift", ylab = "number of recordings", main = "")
daijiajie1@1 410 dev.off()
daijiajie1@1 411
daijiajie1@1 412 # mean absolute pitch error histogram
daijiajie1@1 413 pdf("../figures/mape_histogram.pdf", width = 3.3, height = 4)
daijiajie1@1 414 par(mar=c(4,4,.3,.5))
daijiajie1@1 415 hist(agg.mape$mape, seq(0,0.4,by=0.05), col="dark gray", border="black",
daijiajie1@1 416 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 417 ylim=c(0,24))
daijiajie1@1 418 abline(h=5, col = "gray")
daijiajie1@1 419 abline(h=10, col = "gray")
daijiajie1@1 420 abline(h=15, col = "gray")
daijiajie1@1 421 abline(h=20, col = "gray")
daijiajie1@1 422 hist(agg.mape$mape, seq(0,0.4,by=0.05), col="dark gray", border="black",
daijiajie1@1 423 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 424 ylim=c(0,24), add = T)
daijiajie1@1 425 dev.off()
daijiajie1@1 426
daijiajie1@1 427 # mean absolute interval error histogram
daijiajie1@1 428 pdf("../figures/maie_histogram.pdf", width = 3.3, height = 4)
daijiajie1@1 429 par(mar=c(4,1,.3,.5))
daijiajie1@1 430 hist(agg.maie$maie, seq(0,.5,by=0.05), col="dark gray", border="black",
daijiajie1@1 431 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 432 ylim=c(0,24), yaxt="n")
daijiajie1@1 433 abline(h=5, col = "gray")
daijiajie1@1 434 abline(h=10, col = "gray")
daijiajie1@1 435 abline(h=15, col = "gray")
daijiajie1@1 436 abline(h=20, col = "gray")
daijiajie1@1 437 hist(agg.maie$maie, seq(0,.5,by=0.05), col="dark gray", border="black",
daijiajie1@1 438 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 439 ylim=c(0,24), yaxt="n", add = T)
daijiajie1@1 440 dev.off()
daijiajie1@1 441 mean(agg.maie$maie)
daijiajie1@1 442 median(agg.maie$maie)
daijiajie1@1 443 sd(agg.maie$maie)
daijiajie1@1 444
daijiajie1@1 445 # MAR
daijiajie1@1 446 pdf("../figures/mar_histogram.pdf", width = 3.3, height = 4)
daijiajie1@1 447 par(mar=c(4,1,.3,.5))
daijiajie1@1 448 hist(agg.rise$rise, seq(0,.5,by=0.05), col="dark gray", border="black",
daijiajie1@1 449 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 450 ylim=c(0,24), yaxt="n")
daijiajie1@1 451 abline(h=5, col = "gray")
daijiajie1@1 452 abline(h=10, col = "gray")
daijiajie1@1 453 abline(h=15, col = "gray")
daijiajie1@1 454 abline(h=20, col = "gray")
daijiajie1@1 455 hist(agg.rise$rise, seq(0,.5,by=0.05), col="dark gray", border="black",
daijiajie1@1 456 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 457 ylim=c(0,24), yaxt="n", add = T)
daijiajie1@1 458 dev.off()
daijiajie1@1 459 mean(agg.rise$rise)
daijiajie1@1 460 median(agg.rise$rise)
daijiajie1@1 461 sd(agg.rise$rise)
daijiajie1@1 462
daijiajie1@1 463 # drift
daijiajie1@1 464 pdf("../figures/d_histogram.pdf", width = 3.3, height = 4)
daijiajie1@1 465 par(mar=c(4,1,.3,.5))
daijiajie1@1 466 hist(agg.drifts$diffs, seq(-.6,.6,by=0.1), col="dark gray", border="black",
daijiajie1@1 467 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 468 ylim=c(0,24), yaxt="n")
daijiajie1@1 469 abline(h=5, col = "gray")
daijiajie1@1 470 abline(h=10, col = "gray")
daijiajie1@1 471 abline(h=15, col = "gray")
daijiajie1@1 472 abline(h=20, col = "gray")
daijiajie1@1 473 hist(agg.drifts$diffs, seq(-.6,.6,by=0.1), col="dark gray", border="black",
daijiajie1@1 474 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 475 ylim=c(0,24), yaxt="n", add = T)
daijiajie1@1 476 dev.off()
daijiajie1@1 477
daijiajie1@1 478 # absolute drift
daijiajie1@1 479 pdf("../figures/abs_d_histogram.pdf", width = 3.3, height = 4)
daijiajie1@1 480 par(mar=c(4,1,.3,.5))
daijiajie1@1 481 hist(abs(agg.drifts$diffs), seq(0,.6,by=0.05), col="dark gray", border="black",
daijiajie1@1 482 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 483 ylim=c(0,24), yaxt="n")
daijiajie1@1 484 abline(h=5, col = "gray")
daijiajie1@1 485 abline(h=10, col = "gray")
daijiajie1@1 486 abline(h=15, col = "gray")
daijiajie1@1 487 abline(h=20, col = "gray")
daijiajie1@1 488 hist(abs(agg.drifts$diffs), seq(0,.6,by=0.05), col="dark gray", border="black",
daijiajie1@1 489 xlab = "semitones", ylab = "number of recordings", main = "",
daijiajie1@1 490 ylim=c(0,24), yaxt="n", add = T)
daijiajie1@1 491 dev.off()
daijiajie1@1 492
daijiajie1@1 493 # linear drift
daijiajie1@1 494 pdf("../figures/lineard_histogram.pdf", width = 3.3, height = 4)
daijiajie1@1 495 par(mar=c(4,1,.3,.5))
daijiajie1@1 496 hist(100*linear.drift$lineardrift, seq(-1.2,1.2,by=0.2), col="dark gray", border="black",
daijiajie1@1 497 xlab = "cents", ylab = "number of recordings", main = "",
daijiajie1@1 498 ylim=c(0,24), yaxt="n")
daijiajie1@1 499 abline(h=5, col = "gray")
daijiajie1@1 500 abline(h=10, col = "gray")
daijiajie1@1 501 abline(h=15, col = "gray")
daijiajie1@1 502 abline(h=20, col = "gray")
daijiajie1@1 503 hist(100*linear.drift$lineardrift, seq(-1.2,1.2,by=0.2), col="dark gray", border="black",
daijiajie1@1 504 xlab = "cents", ylab = "number of recordings", main = "",
daijiajie1@1 505 ylim=c(0,24), yaxt="n", add = T)
daijiajie1@1 506 dev.off()
daijiajie1@1 507
daijiajie1@1 508 # mu
daijiajie1@1 509 pdf("../figures/mu_histogram.pdf", width = 4.3, height = 3)
daijiajie1@1 510 par(mar=c(4,4,.3,.5))
daijiajie1@1 511 hist(singer.mus[,2], seq(0.6, 1.0, 0.4/5), col="dark gray", border="black",
daijiajie1@1 512 xlab = expression(mu), ylab = "number of singers", main = "",
daijiajie1@1 513 add = F)
daijiajie1@1 514 dev.off()
daijiajie1@1 515
daijiajie1@1 516
daijiajie1@1 517
daijiajie1@1 518 # drift significance plot
daijiajie1@1 519 pdf("../figures/drift_significance_plot.pdf", width = 6, height = 3.5)
daijiajie1@1 520 plot(agg.drifts$diffs, agg.drifts.p$p, log="y", col = rgb(0,0,0,0.4),
daijiajie1@1 521 pch=19, yaxt = "n", ylab = "p-value ",
daijiajie1@1 522 xlab = "drift magnitude in semitones",
daijiajie1@1 523 xlim=c(-1,1))
daijiajie1@1 524 axis(2, at = 10^(-(1:4)), label = c("0.1","0.01","0.001","0.0001"),las=1)
daijiajie1@1 525 abline(h=0.01, lty = 2)
daijiajie1@1 526 abline(v=0.0)
daijiajie1@1 527 text(0.75,0.0000005,"significant\nupward\ndrift")
daijiajie1@1 528 text(-0.75,0.0000005,"significant\ndownward\ndrift")
daijiajie1@1 529 dev.off()
daijiajie1@1 530
daijiajie1@1 531 # drift significance plot
daijiajie1@1 532 pdf("../figures/lineardrift_significance_plot.pdf", width = 6, height = 4.8)
daijiajie1@1 533 plot(linear.drift$lineardrift, linear.drift$p.value, log="y", col = rgb(0,0,0,0.4),
daijiajie1@1 534 pch=19, yaxt = "n", ylab = "p-value ",
daijiajie1@1 535 xlab = "linear drift per note in semitones")
daijiajie1@1 536 axis(2, at = 10^(-(1:4)), label = c("0.1","0.01","0.001","0.0001"),las=1)
daijiajie1@1 537 abline(h=0.01, lty = 2)
daijiajie1@1 538 abline(v=0.0)
daijiajie1@1 539 text(0.0035,0.0000005,"significant\nupward\ndrift")
daijiajie1@1 540 text(-0.0035,0.0000005,"significant\ndownward\ndrift")
daijiajie1@1 541 dev.off()
daijiajie1@1 542
daijiajie1@1 543
daijiajie1@1 544 # how many are significantly adrift?
daijiajie1@1 545 # sum(agg.drifts.p$p<0.01)
daijiajie1@1 546 # mean(agg.drifts.p$p<0.01)
daijiajie1@1 547
daijiajie1@1 548 # drift vs mape
daijiajie1@1 549 pdf("../figures/drift_vs_mape.pdf", width = 5.5, height = 4)
daijiajie1@1 550 par(mar=c(4,4,.3,.5))
daijiajie1@1 551 outl <- agg.mape$mape>0.35
daijiajie1@1 552 fit1 <- lm(agg.mape$mape~agg.drifts$diffs)
daijiajie1@1 553 fit2 <- lm(agg.mape$mape~agg.drifts$diffs, subset=!outl)
daijiajie1@1 554 plot(agg.drifts$diffs, agg.mape$mape, type="n",
daijiajie1@1 555 xlab="drift magnitude in semitones",
daijiajie1@1 556 ylab="mean absolute pitch error")
daijiajie1@1 557 points(agg.drifts$diffs[outl], agg.mape$mape[outl], pch=19)
daijiajie1@1 558 points(agg.drifts$diffs[!outl], agg.mape$mape[!outl], pch=21)
daijiajie1@1 559 abline(fit1, lty=2)
daijiajie1@1 560 abline(fit2)
daijiajie1@1 561 dev.off()
daijiajie1@1 562
daijiajie1@1 563 # drift vs maie
daijiajie1@1 564 pdf("../figures/drift_vs_maie.pdf", width = 5.5, height = 4)
daijiajie1@1 565 par(mar=c(4,4,.3,.5))
daijiajie1@1 566 outl <- agg.mape$mape>0.35
daijiajie1@1 567 fit1 <- lm(agg.maie$maie~agg.drifts$diffs)
daijiajie1@1 568 fit2 <- lm(agg.maie$maie~agg.drifts$diffs, subset=!outl)
daijiajie1@1 569 plot(agg.drifts$diffs, agg.maie$maie, type="n",
daijiajie1@1 570 xlab="drift magnitude in semitones",
daijiajie1@1 571 ylab="mean absolute pitch error")
daijiajie1@1 572 points(agg.drifts$diffs[outl], agg.maie$maie[outl], pch=19)
daijiajie1@1 573 points(agg.drifts$diffs[!outl], agg.maie$maie[!outl], pch=21)
daijiajie1@1 574 abline(fit1, lty=2)
daijiajie1@1 575 abline(fit2)
daijiajie1@1 576 dev.off()
daijiajie1@1 577
daijiajie1@1 578 # drift vs IB
daijiajie1@1 579 pdf("../figures/drift_vs_ib.pdf", width = 5.5, height = 4)
daijiajie1@1 580 par(mar=c(4,4,.3,.5))
daijiajie1@1 581 fit1 <- lm(agg.ib$ib~agg.drifts$diffs)
daijiajie1@1 582 plot(agg.drifts$diffs, agg.ib$ib, type="n",
daijiajie1@1 583 xlab="drift magnitude in semitones",
daijiajie1@1 584 ylab="mean interval error")
daijiajie1@1 585 points(agg.drifts$diffs, agg.ib$ib, pch=21)
daijiajie1@1 586 abline(fit1, lty=2)
daijiajie1@1 587 dev.off()
daijiajie1@1 588
daijiajie1@1 589
daijiajie1@1 590 # cor(merged.singeragg$maie, merged.singeragg$mape)
daijiajie1@1 591
daijiajie1@1 592 pdf("../figures/mape_maie_drift.pdf", width = 5, height = 5)
daijiajie1@1 593 # par(mar=c(1,1,1,1))
daijiajie1@1 594 plot(data.frame(MAPE=agg.mape$mape, MAIE=agg.maie$maie, Drift=agg.drifts$diffs))
daijiajie1@1 595 dev.off()
daijiajie1@1 596 # and their correlations
daijiajie1@1 597 cor.test(agg.mape$mape, agg.maie$maie)
daijiajie1@1 598 cor.test(agg.mape$mape, agg.drifts$diffs)
daijiajie1@1 599 cor.test(agg.maie$maie, agg.drifts$diffs)
daijiajie1@1 600
daijiajie1@1 601 # corrgram(data.frame(merged.singeragg$maie, merged.singeragg$mape, merged.singeragg$diffs, as.numeric(merged.singeragg$sing.ability), as.numeric(merged.singeragg$musical.background), as.numeric(merged.singeragg$choir.experience)))
daijiajie1@1 602 # corrgram(data.frame(merged.agg$maie, merged.agg$mape, merged.agg$diffs, as.numeric(merged.agg$sing.ability), as.numeric(merged.agg$musical.background), as.numeric(merged.agg$choir.experience)))
daijiajie1@1 603
daijiajie1@1 604 # pdf("../figures/corrgram.pdf", width = 5, height = 5)
daijiajie1@1 605 # corrgram(data.frame(MAIE=merged.agg$maie, ib=merged.agg$ib, MAPE=merged.agg$mape, D=merged.agg$diffs, singing.ability=as.numeric(merged.agg$sing.ability), musical.bg=as.numeric(merged.agg$musical.background), choir.exp=as.numeric(merged.agg$choir.experience)), lower.panel=panel.conf, upper.panel=panel.pie)
daijiajie1@1 606 # dev.off()
daijiajie1@1 607
daijiajie1@1 608 # slope figure
daijiajie1@1 609 pdf("../figures/rise_by_notenumber_boxplot.pdf", width = 5.5, height = 4)
daijiajie1@1 610 par(mar=c(2,3.8,.1,.1))
daijiajie1@1 611 plot(c(1,25), c(-1.6,1.6), type='n', xaxt='n', xlab = '', ylab='', yaxt='n')
daijiajie1@1 612 abline(h=0)
daijiajie1@1 613 abline(h=-1, lty=2)
daijiajie1@1 614 abline(h=1, lty=2)
daijiajie1@1 615 plot(I(slope * duration * 44100/1024) ~ factor(noteid, levels=1:75), data=data, subset = !ispoor,
daijiajie1@1 616 pch=20, col=rgb(0.9,0.9,0.9), ylim = c(-2,2), outline=F, add=T,
daijiajie1@1 617 ylab="rise (semitones)", xlab="interval in semitones",
daijiajie1@1 618 cex.axis=0.8, lty=1, boxwex=0.6)
daijiajie1@1 619 # posi <- c(1:6, 8, 11, 13, 14, 18)
daijiajie1@1 620 # axis(1, at=posi, labels=posi-6, cex.axis=0.8)
daijiajie1@1 621 # text(countsByNoteID$noteid, rep(2,11), countsByNoteID$count, cex=0.7)
daijiajie1@1 622 mtext(c(countsByNoteID$count), at=c(countsByNoteID$noteid), cex=0.7)
daijiajie1@1 623 # text(1:25, rep(-1.5,11), c("(-5)", gtdata$interval_ST[-25]), cex=0.7)
daijiajie1@1 624 # text(2.7, -1.35 , "intervals in semitones", cex=0.7)
daijiajie1@1 625 text(1-.5, 1.3, "phrase 1", pos=4)
daijiajie1@1 626 abline(v=6.5, lty=1, col='gray')
daijiajie1@1 627 text(7-.5, 1.3, "phrase 2", pos=4)
daijiajie1@1 628 abline(v=12.5, lty=1, col='gray')
daijiajie1@1 629 text(13-.5, 1.3, "phrase 3", pos=4)
daijiajie1@1 630 abline(v=19.5, lty=1, col='gray')
daijiajie1@1 631 text(20-.5, 1.3, "phrase 4", pos=4)
daijiajie1@1 632 dev.off()
daijiajie1@1 633
daijiajie1@1 634 # mu versus model MAPE
daijiajie1@1 635 pdf("../figures/memory_vs_model_mape.pdf", width = 4.3, height = 3)
daijiajie1@1 636 par(mar=c(4,4,.3,.5))
daijiajie1@1 637 plot(mus,
daijiajie1@1 638 apply(md[!md$ispoor,(1:nmu)+8], 2, function(x) {mean(abs(x),na.rm=T)}),
daijiajie1@1 639 type='l',
daijiajie1@1 640 pch=20,
daijiajie1@1 641 xlab=expression(mu),
daijiajie1@1 642 ylab="mean absolute pitch error",
daijiajie1@1 643 ylim=c(0.18,0.30))
daijiajie1@1 644 abline(h=mean(abs(data$pitcherror[!data$ispoor]), na.rm=T), lty=2)
daijiajie1@1 645 dev.off()