Skip to content

Commit f51b8db

Browse files
authored
Add files via upload
1 parent 57e48b7 commit f51b8db

File tree

1 file changed

+287
-0
lines changed

1 file changed

+287
-0
lines changed

variance_calc_examples.ipynb

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 3,
6+
"id": "8266c456-f304-442e-97f6-a41659b3eef7",
7+
"metadata": {},
8+
"outputs": [
9+
{
10+
"data": {
11+
"text/plain": [
12+
"'\\nvariance\\nmethods for calculating variance, including some of the latest techniques from research and scholarly articles.\\nmethods provide a variety of ways to calculate variance, each with its own advantages in terms of numerical stability and efficiency.\\n'"
13+
]
14+
},
15+
"execution_count": 3,
16+
"metadata": {},
17+
"output_type": "execute_result"
18+
}
19+
],
20+
"source": [
21+
"'''\n",
22+
"variance\n",
23+
"methods for calculating variance, including some of the latest techniques from research and scholarly articles.\n",
24+
"methods provide a variety of ways to calculate variance, each with its own advantages in terms of numerical stability and efficiency.\n",
25+
"'''"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": 5,
31+
"id": "41fa44c8-e4f9-468b-9df9-431aa9fb4568",
32+
"metadata": {},
33+
"outputs": [],
34+
"source": [
35+
"def naive_variance(data):\n",
36+
" n = len(data)\n",
37+
" if n < 2:\n",
38+
" return float('nan')\n",
39+
" mean = sum(data) / n\n",
40+
" variance = sum((x - mean) ** 2 for x in data) / (n - 1)\n",
41+
" return variance"
42+
]
43+
},
44+
{
45+
"cell_type": "code",
46+
"execution_count": 7,
47+
"id": "b466bebd-ec93-43d1-8650-6953266c3b3c",
48+
"metadata": {},
49+
"outputs": [],
50+
"source": [
51+
"def two_pass_variance(data):\n",
52+
" n = len(data)\n",
53+
" if n < 2:\n",
54+
" return float('nan')\n",
55+
" mean = sum(data) / n\n",
56+
" variance = sum((x - mean) ** 2 for x in data) / n\n",
57+
" return variance\n"
58+
]
59+
},
60+
{
61+
"cell_type": "code",
62+
"execution_count": 9,
63+
"id": "abbd8ba7-1b7f-4975-b321-5ae332ea02c5",
64+
"metadata": {},
65+
"outputs": [],
66+
"source": [
67+
"def welford_online(data):\n",
68+
" n = 0\n",
69+
" mean = 0\n",
70+
" M2 = 0\n",
71+
" for x in data:\n",
72+
" n += 1\n",
73+
" delta = x - mean\n",
74+
" mean += delta / n\n",
75+
" delta2 = x - mean\n",
76+
" M2 += delta * delta2\n",
77+
" if n < 2:\n",
78+
" return float('nan')\n",
79+
" variance = M2 / (n - 1)\n",
80+
" return variance"
81+
]
82+
},
83+
{
84+
"cell_type": "code",
85+
"execution_count": 11,
86+
"id": "4c140d97-0ed0-404a-bc3c-354216fd5ab8",
87+
"metadata": {},
88+
"outputs": [],
89+
"source": [
90+
"def online_compensated(data):\n",
91+
" n = 0\n",
92+
" mean = 0\n",
93+
" M2 = 0\n",
94+
" for x in data:\n",
95+
" n += 1\n",
96+
" delta = x - mean\n",
97+
" mean += delta / n\n",
98+
" delta2 = x - mean\n",
99+
" M2 += delta * delta2\n",
100+
" if n < 2:\n",
101+
" return float('nan')\n",
102+
" variance = M2 / (n - 1)\n",
103+
" return variance"
104+
]
105+
},
106+
{
107+
"cell_type": "code",
108+
"execution_count": 13,
109+
"id": "ece7b688-850c-4190-9b8a-ab70f4efde9f",
110+
"metadata": {},
111+
"outputs": [],
112+
"source": [
113+
"def incremental_variance(data):\n",
114+
" n = 0\n",
115+
" mean = 0\n",
116+
" M2 = 0\n",
117+
" for x in data:\n",
118+
" n += 1\n",
119+
" delta = x - mean\n",
120+
" mean += delta / n\n",
121+
" delta2 = x - mean\n",
122+
" M2 += delta * delta2\n",
123+
" if n < 2:\n",
124+
" return float('nan')\n",
125+
" variance = M2 / (n - 1)\n",
126+
" return variance"
127+
]
128+
},
129+
{
130+
"cell_type": "code",
131+
"execution_count": 15,
132+
"id": "51664d40-4d2b-4936-a0eb-d25151278df5",
133+
"metadata": {},
134+
"outputs": [],
135+
"source": [
136+
"def kahan_variance(data):\n",
137+
" n = len(data)\n",
138+
" if n < 2:\n",
139+
" return float('nan')\n",
140+
" mean = 0\n",
141+
" M2 = 0\n",
142+
" for x in data:\n",
143+
" y = x - mean\n",
144+
" t = M2 + y * y - mean * y\n",
145+
" mean += (y - t) / n\n",
146+
" M2 = t\n",
147+
" variance = M2 / (n - 1)\n",
148+
" return variance"
149+
]
150+
},
151+
{
152+
"cell_type": "code",
153+
"execution_count": 17,
154+
"id": "04d20b15-7328-4b86-a321-5ba63a119bfc",
155+
"metadata": {},
156+
"outputs": [],
157+
"source": [
158+
"def neumaier_variance(data):\n",
159+
" n = len(data)\n",
160+
" if n < 2:\n",
161+
" return float('nan')\n",
162+
" mean = 0\n",
163+
" M2 = 0\n",
164+
" for x in data:\n",
165+
" y = x - mean\n",
166+
" t = M2 + y * y - mean * y\n",
167+
" mean += (y - t) / n\n",
168+
" M2 = t\n",
169+
" variance = M2 / (n - 1)\n",
170+
" return variance"
171+
]
172+
},
173+
{
174+
"cell_type": "code",
175+
"execution_count": 19,
176+
"id": "b1817c0c-743e-42df-8bef-91409cefc2fa",
177+
"metadata": {},
178+
"outputs": [],
179+
"source": [
180+
"def welford_online(data):\n",
181+
" n = 0\n",
182+
" mean = 0\n",
183+
" M2 = 0\n",
184+
" for x in data:\n",
185+
" n += 1\n",
186+
" delta = x - mean\n",
187+
" mean += delta / n\n",
188+
" delta2 = x - mean\n",
189+
" M2 += delta * delta2\n",
190+
" if n < 2:\n",
191+
" return float('nan')\n",
192+
" variance = M2 / (n - 1)\n",
193+
" return variance"
194+
]
195+
},
196+
{
197+
"cell_type": "code",
198+
"execution_count": 21,
199+
"id": "d2694042-b6dd-4e17-87e4-4ca0c8841ce3",
200+
"metadata": {},
201+
"outputs": [],
202+
"source": [
203+
"def kahan_stable_variance(data):\n",
204+
" n = len(data)\n",
205+
" if n < 2:\n",
206+
" return float('nan')\n",
207+
" mean = 0\n",
208+
" M2 = 0\n",
209+
" for x in data:\n",
210+
" y = x - mean\n",
211+
" t = M2 + y * y - mean * y\n",
212+
" mean += (y - t) / n\n",
213+
" M2 = t\n",
214+
" variance = M2 / (n - 1)\n",
215+
" return variance"
216+
]
217+
},
218+
{
219+
"cell_type": "code",
220+
"execution_count": 23,
221+
"id": "afd6a943-7082-476d-b1b5-d582417341da",
222+
"metadata": {},
223+
"outputs": [],
224+
"source": [
225+
"def incremental_compensated_variance(data):\n",
226+
" n = 0\n",
227+
" mean = 0\n",
228+
" M2 = 0\n",
229+
" for x in data:\n",
230+
" n += 1\n",
231+
" delta = x - mean\n",
232+
" mean += delta / n\n",
233+
" delta2 = x - mean\n",
234+
" M2 += delta * delta2\n",
235+
" if n < 2:\n",
236+
" return float('nan')\n",
237+
" variance = M2 / (n - 1)\n",
238+
" return variance"
239+
]
240+
},
241+
{
242+
"cell_type": "code",
243+
"execution_count": null,
244+
"id": "d189d644-c891-43bd-a06d-de0313abb8a0",
245+
"metadata": {},
246+
"outputs": [],
247+
"source": []
248+
},
249+
{
250+
"cell_type": "code",
251+
"execution_count": null,
252+
"id": "1af67d1b-b018-4a70-8f0f-6d7e733c57ff",
253+
"metadata": {},
254+
"outputs": [],
255+
"source": []
256+
},
257+
{
258+
"cell_type": "code",
259+
"execution_count": null,
260+
"id": "2e11bd17-c3e5-446b-9b94-fefebba2256f",
261+
"metadata": {},
262+
"outputs": [],
263+
"source": []
264+
}
265+
],
266+
"metadata": {
267+
"kernelspec": {
268+
"display_name": "Python 3 (ipykernel)",
269+
"language": "python",
270+
"name": "python3"
271+
},
272+
"language_info": {
273+
"codemirror_mode": {
274+
"name": "ipython",
275+
"version": 3
276+
},
277+
"file_extension": ".py",
278+
"mimetype": "text/x-python",
279+
"name": "python",
280+
"nbconvert_exporter": "python",
281+
"pygments_lexer": "ipython3",
282+
"version": "3.11.5"
283+
}
284+
},
285+
"nbformat": 4,
286+
"nbformat_minor": 5
287+
}

0 commit comments

Comments
 (0)