@@ -30,7 +30,7 @@ def create_mock_weights(obj, com, adjust, ignore_na):
30
30
31
31
32
32
def create_mock_series_weights (s , com , adjust , ignore_na ):
33
- w = Series (np .nan , index = s .index )
33
+ w = Series (np .nan , index = s .index , name = s . name )
34
34
alpha = 1.0 / (1.0 + com )
35
35
if adjust :
36
36
count = 0
@@ -58,63 +58,66 @@ def create_mock_series_weights(s, com, adjust, ignore_na):
58
58
return w
59
59
60
60
61
- def test_ewm_consistency_mean (consistency_data , adjust , ignore_na , min_periods ):
62
- x , is_constant , no_nans = consistency_data
61
+ def test_ewm_consistency_mean (all_data , adjust , ignore_na , min_periods ):
63
62
com = 3.0
64
63
65
- result = x .ewm (
64
+ result = all_data .ewm (
66
65
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
67
66
).mean ()
68
- weights = create_mock_weights (x , com = com , adjust = adjust , ignore_na = ignore_na )
67
+ weights = create_mock_weights (all_data , com = com , adjust = adjust , ignore_na = ignore_na )
69
68
expected = (
70
- x .multiply (weights ).cumsum ().divide (weights .cumsum ()).fillna (method = "ffill" )
69
+ all_data .multiply (weights )
70
+ .cumsum ()
71
+ .divide (weights .cumsum ())
72
+ .fillna (method = "ffill" )
71
73
)
72
74
expected [
73
- x .expanding ().count () < (max (min_periods , 1 ) if min_periods else 1 )
75
+ all_data .expanding ().count () < (max (min_periods , 1 ) if min_periods else 1 )
74
76
] = np .nan
75
77
tm .assert_equal (result , expected .astype ("float64" ))
76
78
77
79
78
- def test_ewm_consistency_consistent (consistency_data , adjust , ignore_na , min_periods ):
79
- x , is_constant , no_nans = consistency_data
80
+ def test_ewm_consistency_consistent (consistent_data , adjust , ignore_na , min_periods ):
80
81
com = 3.0
81
82
82
- if is_constant :
83
- count_x = x .expanding ().count ()
84
- mean_x = x .ewm (
85
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
86
- ).mean ()
87
- # check that correlation of a series with itself is either 1 or NaN
88
- corr_x_x = x .ewm (
89
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
90
- ).corr (x )
91
- exp = x .max () if isinstance (x , Series ) else x .max ().max ()
83
+ count_x = consistent_data .expanding ().count ()
84
+ mean_x = consistent_data .ewm (
85
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
86
+ ).mean ()
87
+ # check that correlation of a series with itself is either 1 or NaN
88
+ corr_x_x = consistent_data .ewm (
89
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
90
+ ).corr (consistent_data )
91
+ exp = (
92
+ consistent_data .max ()
93
+ if isinstance (consistent_data , Series )
94
+ else consistent_data .max ().max ()
95
+ )
92
96
93
- # check mean of constant series
94
- expected = x * np .nan
95
- expected [count_x >= max (min_periods , 1 )] = exp
96
- tm .assert_equal (mean_x , expected )
97
+ # check mean of constant series
98
+ expected = consistent_data * np .nan
99
+ expected [count_x >= max (min_periods , 1 )] = exp
100
+ tm .assert_equal (mean_x , expected )
97
101
98
- # check correlation of constant series with itself is NaN
99
- expected [:] = np .nan
100
- tm .assert_equal (corr_x_x , expected )
102
+ # check correlation of constant series with itself is NaN
103
+ expected [:] = np .nan
104
+ tm .assert_equal (corr_x_x , expected )
101
105
102
106
103
107
def test_ewm_consistency_var_debiasing_factors (
104
- consistency_data , adjust , ignore_na , min_periods
108
+ all_data , adjust , ignore_na , min_periods
105
109
):
106
- x , is_constant , no_nans = consistency_data
107
110
com = 3.0
108
111
109
112
# check variance debiasing factors
110
- var_unbiased_x = x .ewm (
113
+ var_unbiased_x = all_data .ewm (
111
114
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
112
115
).var (bias = False )
113
- var_biased_x = x .ewm (
116
+ var_biased_x = all_data .ewm (
114
117
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
115
118
).var (bias = True )
116
119
117
- weights = create_mock_weights (x , com = com , adjust = adjust , ignore_na = ignore_na )
120
+ weights = create_mock_weights (all_data , com = com , adjust = adjust , ignore_na = ignore_na )
118
121
cum_sum = weights .cumsum ().fillna (method = "ffill" )
119
122
cum_sum_sq = (weights * weights ).cumsum ().fillna (method = "ffill" )
120
123
numerator = cum_sum * cum_sum
@@ -126,24 +129,21 @@ def test_ewm_consistency_var_debiasing_factors(
126
129
127
130
128
131
@pytest .mark .parametrize ("bias" , [True , False ])
129
- def test_moments_consistency_var (
130
- consistency_data , adjust , ignore_na , min_periods , bias
131
- ):
132
- x , is_constant , no_nans = consistency_data
132
+ def test_moments_consistency_var (all_data , adjust , ignore_na , min_periods , bias ):
133
133
com = 3.0
134
134
135
- mean_x = x .ewm (
135
+ mean_x = all_data .ewm (
136
136
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
137
137
).mean ()
138
- var_x = x .ewm (
138
+ var_x = all_data .ewm (
139
139
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
140
140
).var (bias = bias )
141
141
assert not (var_x < 0 ).any ().any ()
142
142
143
143
if bias :
144
144
# check that biased var(x) == mean(x^2) - mean(x)^2
145
145
mean_x2 = (
146
- (x * x )
146
+ (all_data * all_data )
147
147
.ewm (com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na )
148
148
.mean ()
149
149
)
@@ -152,45 +152,42 @@ def test_moments_consistency_var(
152
152
153
153
@pytest .mark .parametrize ("bias" , [True , False ])
154
154
def test_moments_consistency_var_constant (
155
- consistency_data , adjust , ignore_na , min_periods , bias
155
+ consistent_data , adjust , ignore_na , min_periods , bias
156
156
):
157
- x , is_constant , no_nans = consistency_data
158
157
com = 3.0
159
- if is_constant :
160
- count_x = x .expanding (min_periods = min_periods ).count ()
161
- var_x = x .ewm (
162
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
163
- ).var (bias = bias )
158
+ count_x = consistent_data .expanding (min_periods = min_periods ).count ()
159
+ var_x = consistent_data .ewm (
160
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
161
+ ).var (bias = bias )
164
162
165
- # check that variance of constant series is identically 0
166
- assert not (var_x > 0 ).any ().any ()
167
- expected = x * np .nan
168
- expected [count_x >= max (min_periods , 1 )] = 0.0
169
- if not bias :
170
- expected [count_x < 2 ] = np .nan
171
- tm .assert_equal (var_x , expected )
163
+ # check that variance of constant series is identically 0
164
+ assert not (var_x > 0 ).any ().any ()
165
+ expected = consistent_data * np .nan
166
+ expected [count_x >= max (min_periods , 1 )] = 0.0
167
+ if not bias :
168
+ expected [count_x < 2 ] = np .nan
169
+ tm .assert_equal (var_x , expected )
172
170
173
171
174
172
@pytest .mark .parametrize ("bias" , [True , False ])
175
- def test_ewm_consistency_std (consistency_data , adjust , ignore_na , min_periods , bias ):
176
- x , is_constant , no_nans = consistency_data
173
+ def test_ewm_consistency_std (all_data , adjust , ignore_na , min_periods , bias ):
177
174
com = 3.0
178
- var_x = x .ewm (
175
+ var_x = all_data .ewm (
179
176
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
180
177
).var (bias = bias )
181
178
assert not (var_x < 0 ).any ().any ()
182
179
183
- std_x = x .ewm (
180
+ std_x = all_data .ewm (
184
181
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
185
182
).std (bias = bias )
186
183
assert not (std_x < 0 ).any ().any ()
187
184
188
185
# check that var(x) == std(x)^2
189
186
tm .assert_equal (var_x , std_x * std_x )
190
187
191
- cov_x_x = x .ewm (
188
+ cov_x_x = all_data .ewm (
192
189
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
193
- ).cov (x , bias = bias )
190
+ ).cov (all_data , bias = bias )
194
191
assert not (cov_x_x < 0 ).any ().any ()
195
192
196
193
# check that var(x) == cov(x, x)
@@ -199,57 +196,53 @@ def test_ewm_consistency_std(consistency_data, adjust, ignore_na, min_periods, b
199
196
200
197
@pytest .mark .parametrize ("bias" , [True , False ])
201
198
def test_ewm_consistency_series_cov_corr (
202
- consistency_data , adjust , ignore_na , min_periods , bias
199
+ series_data , adjust , ignore_na , min_periods , bias
203
200
):
204
- x , is_constant , no_nans = consistency_data
205
201
com = 3.0
206
202
207
- if isinstance (x , Series ):
208
- var_x_plus_y = (
209
- (x + x )
210
- .ewm (com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na )
211
- .var (bias = bias )
212
- )
213
- var_x = x .ewm (
214
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
215
- ).var (bias = bias )
216
- var_y = x .ewm (
217
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
218
- ).var (bias = bias )
219
- cov_x_y = x .ewm (
220
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
221
- ).cov (x , bias = bias )
222
- # check that cov(x, y) == (var(x+y) - var(x) -
223
- # var(y)) / 2
224
- tm .assert_equal (cov_x_y , 0.5 * (var_x_plus_y - var_x - var_y ))
225
-
226
- # check that corr(x, y) == cov(x, y) / (std(x) *
227
- # std(y))
228
- corr_x_y = x .ewm (
229
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
230
- ).corr (x , bias = bias )
231
- std_x = x .ewm (
203
+ var_x_plus_y = (
204
+ (series_data + series_data )
205
+ .ewm (com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na )
206
+ .var (bias = bias )
207
+ )
208
+ var_x = series_data .ewm (
209
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
210
+ ).var (bias = bias )
211
+ var_y = series_data .ewm (
212
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
213
+ ).var (bias = bias )
214
+ cov_x_y = series_data .ewm (
215
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
216
+ ).cov (series_data , bias = bias )
217
+ # check that cov(x, y) == (var(x+y) - var(x) -
218
+ # var(y)) / 2
219
+ tm .assert_equal (cov_x_y , 0.5 * (var_x_plus_y - var_x - var_y ))
220
+
221
+ # check that corr(x, y) == cov(x, y) / (std(x) *
222
+ # std(y))
223
+ corr_x_y = series_data .ewm (
224
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
225
+ ).corr (series_data , bias = bias )
226
+ std_x = series_data .ewm (
227
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
228
+ ).std (bias = bias )
229
+ std_y = series_data .ewm (
230
+ com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
231
+ ).std (bias = bias )
232
+ tm .assert_equal (corr_x_y , cov_x_y / (std_x * std_y ))
233
+
234
+ if bias :
235
+ # check that biased cov(x, y) == mean(x*y) -
236
+ # mean(x)*mean(y)
237
+ mean_x = series_data .ewm (
232
238
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
233
- ).std ( bias = bias )
234
- std_y = x .ewm (
239
+ ).mean ( )
240
+ mean_y = series_data .ewm (
235
241
com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
236
- ).std (bias = bias )
237
- tm .assert_equal (corr_x_y , cov_x_y / (std_x * std_y ))
238
-
239
- if bias :
240
- # check that biased cov(x, y) == mean(x*y) -
241
- # mean(x)*mean(y)
242
- mean_x = x .ewm (
243
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
244
- ).mean ()
245
- mean_y = x .ewm (
246
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
247
- ).mean ()
248
- mean_x_times_y = (
249
- (x * x )
250
- .ewm (
251
- com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na
252
- )
253
- .mean ()
254
- )
255
- tm .assert_equal (cov_x_y , mean_x_times_y - (mean_x * mean_y ))
242
+ ).mean ()
243
+ mean_x_times_y = (
244
+ (series_data * series_data )
245
+ .ewm (com = com , min_periods = min_periods , adjust = adjust , ignore_na = ignore_na )
246
+ .mean ()
247
+ )
248
+ tm .assert_equal (cov_x_y , mean_x_times_y - (mean_x * mean_y ))
0 commit comments