Skip to content

Commit bb54b9a

Browse files
committed
Add ensemble
1 parent 014b9fe commit bb54b9a

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.kylecorry.sol.math.ensemble
2+
3+
data class ConfidenceScore<T>(val value: T, val confidence: Float)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.kylecorry.sol.math.ensemble
2+
3+
import com.kylecorry.sol.math.statistics.ConfidenceInterval
4+
import com.kylecorry.sol.math.statistics.Statistics
5+
6+
object Ensemble {
7+
fun <T> discrete(values: List<T>): List<ConfidenceScore<T>> {
8+
val total = values.size
9+
if (total == 0) {
10+
return emptyList()
11+
}
12+
return values
13+
.groupBy { it }
14+
.map { ConfidenceScore(it.key, it.value.size / total.toFloat()) }
15+
}
16+
17+
fun continuous(values: List<Float>, confidenceIntervalSize: Float = 0.95f): ConfidenceInterval<Float> {
18+
val median = Statistics.median(values)
19+
val lower = Statistics.quantile(values, 1f - confidenceIntervalSize)
20+
val upper = Statistics.quantile(values, confidenceIntervalSize)
21+
return ConfidenceInterval(median, lower, upper, confidenceIntervalSize)
22+
}
23+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package com.kylecorry.sol.math.statistics
22

3-
data class ConfidenceInterval<T>(val value: T, val upper: T, val lower: T)
3+
data class ConfidenceInterval<T>(val value: T, val lower: T, val upper: T, val confidence: Float)

src/main/kotlin/com/kylecorry/sol/math/statistics/TimeSeriesEnsemble.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.kylecorry.sol.math.statistics
22

33
import com.kylecorry.sol.math.Vector2
4+
import com.kylecorry.sol.math.ensemble.Ensemble
45
import com.kylecorry.sol.math.regression.ITimeSeriesPredictor
56

67
class TimeSeriesEnsemble(
@@ -16,10 +17,15 @@ class TimeSeriesEnsemble(
1617
if (values.isEmpty()) {
1718
continue
1819
}
19-
val median = Statistics.median(values)
20-
val lower = Statistics.quantile(values, 1f - confidenceIntervalSize)
21-
val upper = Statistics.quantile(values, confidenceIntervalSize)
22-
result.add(ConfidenceInterval(Vector2(x, median), Vector2(x, upper), Vector2(x, lower)))
20+
val interval = Ensemble.continuous(values, confidenceIntervalSize)
21+
result.add(
22+
ConfidenceInterval(
23+
Vector2(x, interval.value),
24+
Vector2(x, interval.lower),
25+
Vector2(x, interval.upper),
26+
interval.confidence
27+
)
28+
)
2329
}
2430
return result
2531
}

0 commit comments

Comments
 (0)