逐步回归(stepwise)的思想

从大量的变量中,选择对建立回归模型起重要影响作用变量的方法。

  • 每一步只引入或剔除一个变量,即每次引入对因变量影响最显著的自变量,并对已在模型中的变量进行逐个检验,把编委不显著的变量从方程中剔除,最终得到的模型中既不漏掉对因变量显著的,又不包含对因变量影响不显著的变量。
  • 需要设置引入变量和剔除变量的显著性水平,alpha(in)<=alpha(out),否则会出现死循环,即被剔除的自变量又被选入了。
  • 一般来说,对小样本,会考虑alpha(in)=0.05,alpha(out)=0.1;对大样本,会考虑alpha(in)=0.1,alpha(out)=0.15;
  • 当自变量的F检验的p值<alpha(in)时,变量被引入;引入新变量后,如果模型中有自变量的F检验的P值>alpha(out),则应该被剔除;
  • 显著性水平的设定,对回归方程还是有较大的影响的。

逐步回归本质上就是一般的最小二乘回归,只是在回归后会考虑自变量对因变量的显著性而进行重新的变量选择。
在Python中会主要借助 statsmodels.api模块中的OLS做最小二乘回归。

代码实现:

import pandas as pd
import numpy as np
import statsmodels.api as sm
def stepwise(X,y,alpha_in=0.1,alpha_out=0.15):'''X为所有可能的自变量构成的DataFrame,y为响应变量,alpha_in为引入变量的显著性水平,alpha_out为剔除变量的显著性水平'''included=[]while True:changed=Falseexcluded=list(set(X.columns)-set(included))p_val=pd.Series(index=excluded)for new_column in excluded:model=sm.OLS(y,sm.add_constant(X[included+[new_column]])).fit()p_val[new_column]=model.pvalues[new_column]min_pval=p_val.min()#forward stepif min_pval < alpha_in:changed=Trueadd_feature=p_val.idxmin()included.append(add_feature)print("Add {:20} with p_value   {:.6}".format(add_feature,min_pval))#backward stepmodel=sm.OLS(y,sm.add_constant(X[included])).fit()p_val=model.pvalues.iloc[1:]max_pval=p_val.max()if max_pval > alpha_out:changed=Truedrop_feature=p_val.idxmax()included.remove(drop_feature)print("Drop {:20} with p_value   {:.6}".format(drop_feature,max_pval))if not changed:breakreturn included

数据示例

data=pd.read_csv("/Users/mac/Desktop/test.csv",sep=",")
columns=['x1', 'x2', 'x3', 'x4']
X=data[columns]
y=data["y"]
result = stepwise(X,y)
print('resulting features:')
print(result)
####在找到了最优自变量时,下面就使用该变量建立回归方程
new_colmuns=result
model=sm.OLS(y,sm.add_constant(X[new_colmuns])).fit()
model.summary2()

根据最大调整R方前向逐步回选模型

#根据最大调整R方前向逐步回选模型
def  forward_selection(X,y):included=[]current_R,best_R=0.0,0.0while True:changed=Falseexcluded=list(set(X.columns)-set(included))adj_R=pd.Series(index=excluded)for new_column in excluded:model=sm.OLS(y,sm.add_constant(X[included+[new_column]])).fit()adj_R[new_column]=model.rsquared_adjbest_R=adj_R.max()add_feature=adj_R.idxmax()if best_R > current_R:changed=Trueincluded.append(add_feature)current_R=best_Rprint("Add {}".format(add_feature))if not changed:breakreturn included

Python实现逐步回归相关推荐

  1. python逐步回归筛选变量_利用python实现逐步回归

    逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...

  2. python直接进行逐步回归_【Python】逐步回归

    [Python]逐步回归 1. 模型选择之AIC与BIC 此处模型选择我们只考虑模型参数数量,不涉及模型结构的选择. 很多参数估计问题均采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精 ...

  3. 用Python做逐步回归

    用Python做逐步回归 算法介绍 数据情况 案例 数据 代码 结果 算法介绍 逐步回归是一种线性回归模型自变量选择方法: 逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验, ...

  4. python实现逐步回归_Python怎么做逐步回归?

    逐步回归基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新的 ...

  5. python直接进行逐步回归,Python实现逐步回归(stepwise regression)

    从0到1Python数据科学之旅(博主录制) http://dwz.date/cqpw 逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验 ...

  6. 【Python】逐步回归

    [参考] 1.  https://datascience.stackexchange.com/questions/937/does-scikit-learn-have-forward-selectio ...

  7. Python 实现逐步回归

    常用评价指标简介        当前统计学以计算机科学作为支撑,机器于人工的优势是计算速度,但机器无法自行判断运算何时退出,因此需要定量指标作为运算退出的标志.对于预测类的统计模型来说,常见的指标有赤 ...

  8. python向前逐步回归

    一,向前逐步回归,相除多重共线性 import statsmodels.formula.api as smf def forward_selected(data, response): "& ...

  9. python实现逐步回归分析_Python实现逐步回归(stepwise regression)

    逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...

最新文章

  1. 探寻《魔兽争霸3》中最不为人知的按键
  2. CMake的几种Include
  3. 机器视觉行业市场现状及发展前景分析
  4. C# 用IrisSkin4.dll美化你的WinForm
  5. 大型程序是如何开发的_大型小程序如何研发提效
  6. [老文章搬家] 插件化软件设计的头疼问题以及可能的解决思路
  7. MySQL Server 安装失败
  8. php 批量上传图片插件,diyUpload - jQuery多张图片批量上传插件
  9. tableau如何生成HTML文件,Tableau 入门
  10. 轻量级交通仿真——Flow
  11. 我父亲给我姐姐带来了一台计算机英语,写我的家人的作文400字
  12. 男人,就要对自己下手狠一点
  13. 冷知识 - 你可能不知道的100个冷知识
  14. clickhouse列转行
  15. 一行代码实现自制炫酷二维码
  16. java并发包详解(jdk7)
  17. 某校教务管理系统post分析,Python实现自动查询成绩并发送短信
  18. TextWatcher初识
  19. 利用nodejs对接232接口电子秤
  20. 用python爬荣耀皮肤图片(爬虫最基础题,python爬虫教程,超详细+完整代码)

热门文章

  1. mac必备的mac解压缩软件:BetterZip for mac中文版
  2. PHP与memcached实战
  3. 针式打印机步进电机介绍
  4. HTML+CSS画一朵向日葵
  5. 一个点击日历框取得时间的例子
  6. 没有灵感,青少年科技创新学生没有好点子怎么办?
  7. 人工智能之语音合成,语音识别
  8. CloudCompare:点云间重叠区可视化对比
  9. 8.5.4. Interval Input
  10. 计算机电子信息类专业大学排名,电子信息工程专业大学排名 2020全国排行榜