AnomalyLab 0.2.4__tar.gz → 0.2.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {anomalylab-0.2.4 → anomalylab-0.2.6/AnomalyLab.egg-info}/PKG-INFO +1 -1
- {anomalylab-0.2.4/AnomalyLab.egg-info → anomalylab-0.2.6}/PKG-INFO +1 -1
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/fm_regression.py +7 -6
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/structure/panel_data.py +8 -3
- {anomalylab-0.2.4 → anomalylab-0.2.6}/setup.py +1 -1
- {anomalylab-0.2.4 → anomalylab-0.2.6}/.gitattributes +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/.github/workflows/python-publish.yml +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/.gitignore +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/AnomalyLab.egg-info/SOURCES.txt +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/AnomalyLab.egg-info/dependency_links.txt +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/AnomalyLab.egg-info/requires.txt +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/AnomalyLab.egg-info/top_level.txt +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/LICENSE +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/MANIFEST.in +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/README.md +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/config.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/core/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/core/core.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/datasets/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/datasets/dataset.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/datasets/panel_data.csv +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/datasets/time_series_data.csv +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/datasets/transition_matrix.png +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/correlation.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/empirical.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/persistence.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/portfolio.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/empirical/summary.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/fillna.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/normalize.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/outliers.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/preprocessor.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/shift.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/preprocess/truncate.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/structure/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/structure/data.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/structure/time_series.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/utils/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/utils/imports.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/utils/utils.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/visualization/__init__.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/anomalylab/visualization/format.py +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/requirements.txt +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/setup.cfg +0 -0
- {anomalylab-0.2.4 → anomalylab-0.2.6}/tests/__init__.py +0 -0
|
@@ -38,7 +38,8 @@ class FamaMacBethRegression(Empirical):
|
|
|
38
38
|
OutlierHandler(panel_data=self.panel_data)
|
|
39
39
|
.winsorize(
|
|
40
40
|
columns=exog,
|
|
41
|
-
|
|
41
|
+
method="winsorize",
|
|
42
|
+
group_columns=self.panel_data.time,
|
|
42
43
|
)
|
|
43
44
|
.panel_data
|
|
44
45
|
)
|
|
@@ -317,10 +318,10 @@ if __name__ == "__main__":
|
|
|
317
318
|
# exog="MktCap",
|
|
318
319
|
exog_order=["MktCap"],
|
|
319
320
|
regs=[
|
|
320
|
-
"return",
|
|
321
|
-
"MktCap",
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
# "return",
|
|
322
|
+
# "MktCap",
|
|
323
|
+
["return", "Illiq"],
|
|
324
|
+
["return", "IdioVol"],
|
|
324
325
|
# ["return", "MktCap", "Illiq", "IdioVol"],
|
|
325
326
|
],
|
|
326
327
|
# models=[
|
|
@@ -332,7 +333,7 @@ if __name__ == "__main__":
|
|
|
332
333
|
industry="industry",
|
|
333
334
|
industry_weighed_method="value",
|
|
334
335
|
weight="MktCap",
|
|
335
|
-
|
|
336
|
+
is_winsorize=True,
|
|
336
337
|
is_normalize=True,
|
|
337
338
|
# decimal=2,
|
|
338
339
|
)
|
|
@@ -61,12 +61,15 @@ class PanelData(Data):
|
|
|
61
61
|
self.df[self.time] = pd.to_datetime(self.df[self.time], format="ISO8601")
|
|
62
62
|
self.df[self.time] = self.df[self.time].dt.to_period(freq=self.frequency)
|
|
63
63
|
self.df = self.df.sort_values(by=[self.time, self.id])
|
|
64
|
+
basic_column = (
|
|
65
|
+
[self.id, self.time] if self.ret is None else [self.id, self.time, self.ret]
|
|
66
|
+
)
|
|
64
67
|
# Identify remaining columns and set them as firm characteristics, excluding classifications
|
|
65
68
|
self.firm_characteristics: set[str] = set(
|
|
66
69
|
filter(
|
|
67
70
|
lambda x: (
|
|
68
71
|
x
|
|
69
|
-
not in
|
|
72
|
+
not in basic_column
|
|
70
73
|
+ (
|
|
71
74
|
self.classifications
|
|
72
75
|
if isinstance(self.classifications, list)
|
|
@@ -111,9 +114,10 @@ class PanelData(Data):
|
|
|
111
114
|
if isinstance(self.classifications, str):
|
|
112
115
|
self.classifications = [self.classifications]
|
|
113
116
|
# Check if the required columns are present in the DataFrame
|
|
114
|
-
|
|
115
|
-
[self.id, self.time
|
|
117
|
+
basic_column = (
|
|
118
|
+
[self.id, self.time] if self.ret is None else [self.id, self.time, self.ret]
|
|
116
119
|
)
|
|
120
|
+
required_columns: set[str] = set(basic_column + (self.classifications or []))
|
|
117
121
|
missing_columns: set[str] = required_columns - set(self.df.columns)
|
|
118
122
|
if missing_columns:
|
|
119
123
|
raise ValueError(f"Missing columns in the DataFrame: {missing_columns}")
|
|
@@ -201,6 +205,7 @@ if __name__ == "__main__":
|
|
|
201
205
|
name="Stocks",
|
|
202
206
|
id="permno",
|
|
203
207
|
time="date",
|
|
208
|
+
ret="return",
|
|
204
209
|
classifications="industry",
|
|
205
210
|
drop_all_chars_missing=True,
|
|
206
211
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|