-
Notifications
You must be signed in to change notification settings - Fork 0
/
weighted_statistics.dm42
93 lines (83 loc) · 1.1 KB
/
weighted_statistics.dm42
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
export def wstat {
if { MAT? } else {
"X is not a matrix", AVIEW
STOP
}
STO "A"
GTO menu
}
def menu {
CLMENU
"mean", KEY 1 XEQ mean
"std", KEY 2 XEQ std
"tsam", KEY 6 XEQ tsam
FS? 03, KEY 9 GTO custom_menu
MENU
STOP
GTO menu
}
def custom_menu {
SF 27
STOP
}
// Toggles flag 05
def tsam {
if { FC? 05 } {
SF 05
} else {
CF 05
}
}
def index {
INDEX "A"
1, 1
STOIJ
DROPN 2
J+, J- // For some reason, this is needed to clear flag 76
// TODO: Assert N*2
}
// Sum(x * y) / Sum(y)
def mean {
index()
0, 0
while { FC? 76} {
RCLEL
J+
RCLEL
STO+ ST T
J-
*
+
I+
}
X<>Y
/
}
// Sqrt(Sum((x-mean)^2)*y))/Sum(y))
def std {
mean()
STO "B"
DROP
index()
0, 0
while { FC? 76} {
RCLEL
RCL "B"
-
X↑2
J+
RCLEL
STO+ ST T
J-
*
+
I+
}
X<>Y
if { FC? 05 } {
1
-
}
/
SQRT
}