具有推理测试、残差分析、离群值可视化、多重共线性测试和其他特征的线性回归实用程序
mlr的Python项目详细描述
最大似然比(pip install mlr
)
一个轻量级的、易于使用的python包,它结合了类似scikit-learn
的简单api和统计推断测试、可视化残差分析、异常可视化、多重共线性测试的功能,可以在类似statsmodels
和r语言的包中找到。
由tirthajyoti-sarkar博士编写和维护(Website,LinkedIn profile)
有用的回归指标,
- MSE、SSE、SST
- r^2,调整r^2
- aic(akaike信息准则)和bic(bayesian信息准则)
推论统计,
- 标准错误
- 置信区间
- p值
- t-测试值
- F-统计量
视觉残留分析,
- 拟合与特征图,
- 拟合与残差图,
- 标准化残差直方图
- 标准残差q-q图
异常值检测
- 影响图
- 库克距离图
多重共线性
- 成对批次
- 方差拐点因子(vif)
- 协方差矩阵
- 相关矩阵
- 相关矩阵热图
要求
- 纽米(
pip install numpy
) - 熊猫(
pip install pandas
) - matplotlib(
pip install matplotlib
) - 肖伯恩(
pip install seaborn
) - scipy(
pip install scipy
) - statsmodels(
pip install statsmodels
)
安装
(在Linux和Windows上)您可以使用pip
pip install mlr
(在Mac OS上),首先安装PIP,
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
然后按上述步骤进行。
快速启动
导入MyLinearRegression
类,
from MLR import MyLinearRegression as mlr
import numpy as np
生成一些随机数据
num_samples=40
num_dim = 5
X = 10*np.random.random(size=(num_samples,num_dim))
coeff = np.array([2,-3.5,1.2,4.1,-2.5])
y = np.dot(coeff,X.T)+10*np.random.randn(num_samples)
创建一个模型实例,
model = mlr()
接收数据
model.ingest_data(X,y)
适合,
model.fit()
直接从pandas数据框中读取
您可以直接从pandas数据框中读取。只需将features/predictor的列名作为列表,将目标列名作为字符串赋给fit_dataframe
方法。
目前,只支持数字特性/目标,但在将来的版本中,我们也将支持分类变量。
<... obtain a Pandas DataFrame by some processing>
df = pd.DataFrame(...)
feature_cols = ['X1','X2','X3']
target_col = 'output'
model = mlr()
model.fit_dataframe(X=feature_cols,y = target_col,dataframe=df)
指标
到目前为止,它看起来与scikit learn的线性回归估计相似,不是吗?
区别就在这里,
逐一打印各种回归模型度量,
print ("R-squared: ",model.r_squared())
print ("Adjusted R-squared: ",model.adj_r_squared())
print("MSE: ",model.mse())
>> R-squared: 0.8344327025902752
Adjusted R-squared: 0.8100845706182569
MSE: 72.2107655649954
或者,立即打印所有指标!
model.print_metrics()
>> sse: 2888.4306
sst: 17445.6591
mse: 72.2108
r^2: 0.8344
adj_r^2: 0.8101
AIC: 296.6986
BIC: 306.8319
相关矩阵,热图,协方差
我们可以在接收数据后立即建立相关矩阵。该矩阵给出了特征/预测因子之间的多重共线性程度。
相关矩阵
model.ingest_data(X,y)
model.corrcoef()
>> array([[ 1. , 0.18424447, -0.00207883, 0.144186 , 0.08678109],
[ 0.18424447, 1. , -0.08098705, -0.05782733, 0.19119872],
[-0.00207883, -0.08098705, 1. , 0.03602977, -0.17560097],
[ 0.144186 , -0.05782733, 0.03602977, 1. , 0.05216212],
[ 0.08678109, 0.19119872, -0.17560097, 0.05216212, 1. ]])
协方差
model.covar()
>> array([[10.28752086, 1.51237819, -0.01770701, 1.47414685, 0.79121778],
[ 1.51237819, 6.54969628, -0.5504233 , -0.47174359, 1.39094876],
[-0.01770701, -0.5504233 , 7.05247111, 0.30499622, -1.32560195],
[ 1.47414685, -0.47174359, 0.30499622, 10.16072256, 0.47264283],
[ 0.79121778, 1.39094876, -1.32560195, 0.47264283, 8.08036806]])
相关热图
model.corrplot(cmap='inferno',annot=True)
统计推断
进行总体显著性
的f检验它重新解释了检验的f统计量和p值。
如果p值是一个小数值,你可以拒绝所有回归系数都为零的零假设。这意味着一个很小的p值(通常为-lt;0.01)表明总体回归具有统计学意义。
model.ftest()
>> (34.270912591948814, 2.3986657277649282e-12)
p值、t检验统计量和系数的标准误差如何?
标准误差和相应的t检验给出了每个回归系数的p值,它告诉我们特定系数是否具有统计显著性(基于给定的数据)。
print("P-values:",model.pvalues())
print("t-test values:",model.tvalues())
print("Standard errors:",model.std_err())
>> P-values: [8.33674608e-01 3.27039586e-03 3.80572234e-05 2.59322037e-01 9.95094748e-11 2.82226752e-06]
t-test values: [ 0.21161008 3.1641696 -4.73263963 1.14716519 9.18010412 -5.60342256]
Standard errors: [5.69360847 0.47462621 0.59980706 0.56580141 0.47081187 0.5381103 ]
置信区间
model.conf_int()
>> array([[-10.36597959, 12.77562953],
[ 0.53724132, 2.46635435],
[ -4.05762528, -1.61971606],
[ -0.50077913, 1.79891449],
[ 3.36529718, 5.27890687],
[ -4.10883113, -1.92168771]])
残差的可视化分析
残差分析是检验线性回归模型假设的关键。mlr
通过为残差提供直观的分析方法,帮助您轻松检查这些假设。
拟合与残差图
使用此图检查恒定方差和不相关特征(独立性)的假设
model.fitted_vs_residual()
拟合vs特征图
用此图检查线性假设
model.fitted_vs_features()
标准化残差
的直方图和q-q图使用这些图检查误差项的正态性假设,
model.histogram_resid()
model.qqplot_resid()
做得更多
用你的回归模型做更多有趣的事情。 更多的功能将在未来的版本中添加!
- 异常值检测和绘图
- 多重共线性检查