# Ceteris Lab downloadable Python script
# Course: Fundamentals of Python for Financial Econometrics

import numpy as np

rng = np.random.default_rng(23)
x = np.zeros(300)
for t in range(1, len(x)):
    phi = -1.2 if x[t-1] < 0 else 0.55
    x[t] = phi*x[t-1] + rng.normal()
print(round(x.mean(), 3), round((x < 0).mean(), 3))

import numpy as np
import pandas as pd
from statsmodels.miscmodels.ordinal_model import OrderedModel

rng = np.random.default_rng(2301)
x = rng.normal(size=700)
latent = 0.8*x + rng.normal(size=700)
y = pd.cut(latent, [-np.inf, -0.7, 0.7, np.inf], labels=[0,1,2], ordered=True)
model = OrderedModel(y, pd.DataFrame({"x": x}), distr="probit").fit(method="bfgs", disp=False)
print(round(model.params["x"], 3))
print(np.round(model.model.predict(model.params, exog=pd.DataFrame({"x": [0.0]}))[0], 3))

import numpy as np
rng = np.random.default_rng(23)
x = np.zeros(300)
x[t] = phi*x[t-1] + rng.normal()
print(round(x.mean(), 3), round((x < 0).mean(), 3))
import numpy as np
