-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_evaluate_plays.R
121 lines (97 loc) · 2.9 KB
/
run_evaluate_plays.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require('circular')
require('Rcpp')
require('stringr')
source('configuration.R')
source('visualization.R')
source('sampler/circular_sampler.R')
Rcpp::sourceCpp('sampler/lib/VenterMode.cpp')
set.seed(18081992)
load('plays.RData')
plays.counts <- sapply(plays, length)
burnin <- 10^4
iterations <- 10^4
data <- circular(unlist(plays), template="clock24")
start <- InitialParams(data)
results <- RunSampler(data, start, burnin+iterations)
output <- results[(burnin+1):(burnin+iterations)]
SummarizeOutput <- function(output) {
ExpandOutput(output)
mus <- t(sapply(output, function(sample) {
v <- rep(NA, max(ks))
mu <- sample$mu
mu <- NormalizeMu(mu)
v[1:length(mu)] <- mu
v
}))
kappas <- t(sapply(output, function(sample) {
v <- rep(NA, max(ks))
kappa <- sample$kappa
v[1:length(kappa)] <- kappa
v
}))
weights <- t(sapply(output, function(sample) {
v <- rep(NA, max(ks)+1)
weight <- sample$weight
v[1:length(weight)] <- weight
v
}))
if (max(ks) > 1) {
permutation <- t(row.apply(mus, function(mu) {
order(mu)
}))
for (i in 1:nrow(permutation)) {
mus[i, ] <- mus[i, permutation[i, ]]
kappas[i, ] <- kappas[i, permutation[i, ]]
weights[i, ] <- weights[i, permutation[i, ]]
}
} else {
mus <- t(mus)
kappas <- t(kappas)
}
k.mode <- unique(ks)[which.max(table(ks))]
mu.mean <- circular(col.apply(as.matrix(mus[ks==k.mode, 1:k.mode]), mean), template="clock24")
HoursForRad(mu.mean)
kappa.mean <- col.apply(as.matrix(kappas[ks==k.mode, 1:k.mode]), function(x) {
hmode(x, 0.10)
})
kappa.mean
weight.mean <- col.apply(as.matrix(weights[ks==k.mode, 1:(k.mode+1)]), mean)
weight.mean
frame <- 1.8
sample <- output[[10^4]]
par(mfrow=c(1, 2), mar=c(0, 0, 0, 0))
plot(sample$mu, xlim=c(-frame, frame), ylim=c(-frame, frame))
CurvesForParameters(sample, add=TRUE)
plot(sample$mu, xlim=c(-frame, frame), ylim=c(-frame, frame))
CurveForParameters(sample, add=TRUE)
scenario <- list(
mu=mu.mean,
kappa=kappa.mean,
weight=weight.mean,
allocation=sample(1:k.mode, length(data), replace=TRUE),
k=k.mode
)
print(table(ks)/length(ks))
for (j in 1:(scenario$k+1)) {
cat("Weight :", scenario$weight[j])
cat("; Mu :", TimeForRad(scenario$mu[j]))
cat("; Kappa :", scenario$kappa[j])
cat("; LB :", TimeForRad(qvonmises(0.025, mu=scenario$mu[j], kappa=scenario$kappa[j])))
cat("; RB :", TimeForRad(qvonmises(0.975, mu=scenario$mu[j], kappa=scenario$kappa[j])))
cat("\n")
}
}
SummarizeOutput(output)
#
# Separate genres
#
source('sampler/circular_sampler_hacked.R')
load('plays_joined_scenario.RData')
set.seed(18081992)
plays.index <- 2
data <- plays[[plays.index]]
start <- InitialParams(data)
start$weight <- c(start$weight, 0.0)
results <- RunSampler(data, start, burnin+iterations, scenario)
output <- results[(burnin+1):(burnin+iterations)]
SummarizeOutput(output)