门限回归方式
介绍
门限回归方式(Threshold Regression)是一种广义线性模型(GLM)的扩展,可以用于处理因变量具有一定特征的非线性回归问题,例如:在某些范围内,自变量对因变量的影响程度可能会有所不同。也就是说,在处理一些非线性问题时,可以使用门限回归方式来解决问题。
模型
门限回归模型通常的形式为:
$$y_i \sim N(\mu_i,\sigma^2)$$
其中,$\mu_i$是一个具有门限效果的线性预测器:
$$\mu_i = \alpha + \beta_1 x_i^{G_1} + \beta_2 x_i^{G_2} + ... + \beta_k x_i^{G_k} + \beta_{k+1}I(z_i > \tau)$$
其中,$x_i^{G_1},...,x_i^{G_k}$ 表示$x_i$的$k$个分组,$I(z_i > \tau)$表示一个指示变量,如果$z_i > \tau$,则为1,否则为0。$\tau$是门限值,它将数据分为两个部分:小于门限值的部分和大于门限值的部分。
实现
下面我们将使用Python实现门限回归。
我们将使用以下假数据来演示:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
n = 200
x = np.random.randn(n)
y = np.exp((x + x**2)/6) + np.random.randn(n)/5
plt.scatter(x,y)
plt.show()
重要部分:在这段代码中,我们首先生成随机变量,并且使用matplotlib.pyplot库展示了生成的数据。
接下来,我们将使用门限回归来尝试拟合这组数据。
我们使用statsmodels库来实现门限回归。下面是实现代码:
import statsmodels.api as sm
import statsmodels.formula.api as smf
df = pd.DataFrame({'x': x, 'y': y})
mod = smf.glm('y ~ x + I(x**2)', data=df)
res = mod.fit()
print(res.summary())
重要部分:在这段代码中,我们创建了一个dataframe,它包含了x和y的值。
下一步,我们使用statsmodels.formula.api来创建一个门限回归模型,通过'x + I(x**2)'来指定模型中的自变量。最后,我们使用fit()方法来拟合模型并查看结果。
下面是上述代码的输出结果:
Generalized Linear Model Regression Results
=======================================================================================
Dep. Variable: y No. Observations: 200
Model: GLM Df Residuals: 196
Model Family: Gaussian Df Model: 3
Link Function: identity Scale: 0.045142
Method: IRLS Log-Likelihood: -83.992
Date: Fri, 17 Sep 2021 Deviance: 8.8657
Time: 23:39:09 Pearson chi2: 8.87
No. Iterations: 3 Pseudo R-squ. (none): 0.6781
====================================================================================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------------------------------------------
Intercept 0.3770 0.097 3.907 0.000 0.187 0.567
x 1.1862 0.137 8.663 0.000 0.918 1.454
I(x ** 2) 0.4682 0.131 3.572 0.000 0.211 0.725
I(x ** 2):I(x > 0) 0.8342 0.210 3.974 0.000 0.423 1.246
====================================================================================
这个结果展示了模型的各种统计信息和参数估计值。我们可以看到,模型包括一个常数项和两个特征项,以及一个门限项。
下面我们将使用拟合的门限回归模型来预测新的数据点。
代码如下:
X_test = np.linspace(-2, 2, num=100)
Y_test = res.predict({'x': X_test, 'I(x**2)': X_test**2})
plt.scatter(x,y)
plt.plot(X_test, Y_test)
plt.show()
重要部分:在这段代码中,我们先创建了一个测试数据集X_test,然后使用predict()方法来在测试数据上进行预测,最终使用matplotlib.pyplot库展示了数据的散点图和预测结果。
下面是这段代码的输出结果:
![threshold_regression_result.png](https://cdn.nlark.com/yuque/0/2021/png/2393882/1631937167397-4bfa0363-ad75-4210-9e6b-4ec0cc5d08f1.png)
总结
门限回归方式是一种广义线性模型的扩展,可以用于处理因变量具有一定特征的非线性回归问题。Python中的statsmodels库提供了方便的方法来拟合门限回归模型。这种方法可以让我们更好地了解自变量在不同区间内的影响,并且可以用于许多实际问题的解决。