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() |