以伍德里奇《计量经济学导论:现代方法》的”第7章 含有定性信息的多元回归分析:二值(或虚拟)变量“的案例7.8为例,讲解Python如何对虚拟变量进行回归分析。

例7.8 文件LAWSCH85包含了法学院毕业生起薪中位数的数据。一个关键的解释变量是法学院的排名。由于每个法学院都有一个排名,所以我们显然不能对每个排名都包括进来一个虚拟变量。因此我们可以将排名转换为排名范围,这需要用到pandas.cut函数。

目录

一、导入数据

二、将连续变量转变为分类变量

三、对包含虚拟变量的自变量进行回归

一、导入数据

import wooldridge as woo
import numpy as np
import pandas as pd
import statsmodels.formula.api as smflawsch85 = woo.dataWoo('lawsch85')

二、将连续变量转变为分类变量

pandas.cut将一组连续值分成离散间隔。适用于将连续变量转变为分类变量。

pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)参数意义:
x: 进行划分的一维数组
bins: 分组依据
-int:整数,代表将x平分成bins份。x的范围在每侧扩展0.1%,以包括x的最大值和最小值。
-sequence of scalars:标量序列,标量序列定义了被分割后每一个bin的区间边缘,此时x没有扩展。
-IntervalIndex:定义要使用的精确区间。
right : 默认为True,是否包含区间右部。如果bins是[1, 2, 3, 4],区间就是(1,2], (2,3], (3,4]。如果为False,不包含区间右部,区间就是(1,2), (2,3), (3,4)
labels :每组的标签。
retbins : return bins的缩写默认为False,是否返回bins,默认不返回。
precision: 小数精度,默认为3
include_lowest : 表示第一个bin的初始值是否包含在内,默认为false,np.arange(0, 101, 10) 默认不包含0,第一个bin为(0, 10]。如果设置为True,则包含0,第一个bin就是(-0.001, 10.0]返回值:
out:一个pandas.Categorical, Series或者ndarray类型的值,代表分区后x中的每个值在哪个bin(区间)中,如果指定了labels,则返回对应的label。
bins:分隔后的区间,当指定retbins为True时返回。

因此,数据框lawsch85的“rank"列是法学院的排名,数据如下:

print(lawsch85['rank'])
'''
0      128
1      104
2       34
3       49
4       95151     17
152     21
153    143
154      3
155    120
Name: rank, Length: 156, dtype: int64
'''

采用pandas.cut将排名转变为排名范围,定义为数据框lawsch85的’rc'列。

#指定多个区间
cutpts = [0, 10, 25, 40, 60, 100, 175]
#定义分类变量,并设置分类变量的标签
lawsch85['rc'] = pd.cut(lawsch85['rank'], bins=cutpts,labels=['(0,10]', '(10,25]', '(25,40]','(40,60]', '(60,100]', '(100,175]'])
print(lawsch85['rc'])
'''
0      (100,175]
1      (100,175]
2        (25,40]
3        (40,60]
4       (60,100]151      (10,25]
152      (10,25]
153    (100,175]
154       (0,10]
155    (100,175]
Name: rc, Length: 156, dtype: category
Categories (6, object): ['(0,10]' < '(10,25]' < '(25,40]' < '(40,60]' < '(60,100]' < '(100,175]']
'''

三、对包含虚拟变量的自变量进行回归

将工资对法学院排名等数据进行回归分析,代码如下:

reg = smf.ols(formula='np.log(salary) ~ C(rc)+ LSAT + GPA + np.log(libvol) + np.log(cost)',data=lawsch85)

其中,C()为分类变量函数,C指Categorical variables;若变量为字符串或二值变量,则可以用分类变量函数,也也可以不用分类变量函数,回归模型自动将变量分类;若变量为数字,且超过2个数字,则必须通过分类变量函数将连续变量转变为分类变量,否则回归模型将变量视为连续变量进行回归。

在本案例,由于变量rc为字符串,因此formula='np.log(salary) ~ C(rc)+ LSAT + GPA + np.log(libvol) + np.log(cost)'formula='np.log(salary) ~ rc+ LSAT + GPA + np.log(libvol) + np.log(cost)'是等价的。

但如果变量rc为数字序列,包含超过2个数字,则一定需要分类变量函数。

回归结果如下:

results = reg.fit()
print(results.summary())
'''OLS Regression Results
==============================================================================
Dep. Variable:         np.log(salary)   R-squared:                       0.911
Model:                            OLS   Adj. R-squared:                  0.905
Method:                 Least Squares   F-statistic:                     143.2
Date:                Sun, 17 Apr 2022   Prob (F-statistic):           9.45e-62
Time:                        15:12:27   Log-Likelihood:                 146.45
No. Observations:                 136   AIC:                            -272.9
Df Residuals:                     126   BIC:                            -243.8
Df Model:                           9
Covariance Type:            nonrobust
======================================================================================coef    std err          t      P>|t|      [0.025      0.975]
--------------------------------------------------------------------------------------
Intercept              9.8649      0.450     21.930      0.000       8.975      10.755
C(rc)[T.(10,25]]      -0.1060      0.039     -2.739      0.007      -0.183      -0.029
C(rc)[T.(25,40]]      -0.3245      0.044     -7.318      0.000      -0.412      -0.237
C(rc)[T.(40,60]]      -0.4367      0.046     -9.512      0.000      -0.528      -0.346
C(rc)[T.(60,100]]     -0.5680      0.047    -12.038      0.000      -0.661      -0.475
C(rc)[T.(100,175]]    -0.6996      0.053    -13.078      0.000      -0.805      -0.594
LSAT                   0.0057      0.003      1.858      0.066      -0.000       0.012
GPA                    0.0137      0.074      0.185      0.854      -0.133       0.161
np.log(libvol)         0.0364      0.026      1.398      0.165      -0.015       0.088
np.log(cost)           0.0008      0.025      0.033      0.973      -0.049       0.051
==============================================================================
Omnibus:                        9.419   Durbin-Watson:                   1.926
Prob(Omnibus):                  0.009   Jarque-Bera (JB):               20.478
Skew:                           0.100   Prob(JB):                     3.57e-05
Kurtosis:                       4.890   Cond. No.                     9.85e+03
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 9.85e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
'''

分类变量rc一共有6个分类:'(0,10]'、 '(10,25]' 、 '(25,40]' 、 '(40,60]' 、 '(60,100]' 、 '(100,175]',6个类别应该有5个虚拟变量,其中1个类别作为基组,若不设定基组,C()自动设定一个基组;我们也可以制定基组,形式为C(varible,Treatment(base group))。

例如,我们制定法学院排名(10,25]为基准组,代码如下:

reg = smf.ols(fomula='np.log(salary) ~ C(rc,Treatment("(10,25]"))+ LSAT + GPA + np.log(libvol) + np.log(cost)',data=lawsch85)
results = reg.fit()
print(results.summary())
'''OLS Regression Results
==============================================================================
Dep. Variable:         np.log(salary)   R-squared:                       0.911
Model:                            OLS   Adj. R-squared:                  0.905
Method:                 Least Squares   F-statistic:                     143.2
Date:                Sun, 17 Apr 2022   Prob (F-statistic):           9.45e-62
Time:                        15:28:40   Log-Likelihood:                 146.45
No. Observations:                 136   AIC:                            -272.9
Df Residuals:                     126   BIC:                            -243.8
Df Model:                           9
Covariance Type:            nonrobust
============================================================================================================coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------------------------------------
Intercept                                    9.7588      0.436     22.388      0.000       8.896      10.621
C(rc, Treatment("(10,25]"))[T.(0,10]]        0.1060      0.039      2.739      0.007       0.029       0.183
C(rc, Treatment("(10,25]"))[T.(25,40]]      -0.2185      0.035     -6.164      0.000      -0.289      -0.148
C(rc, Treatment("(10,25]"))[T.(40,60]]      -0.3307      0.035     -9.480      0.000      -0.400      -0.262
C(rc, Treatment("(10,25]"))[T.(60,100]]     -0.4619      0.034    -13.460      0.000      -0.530      -0.394
C(rc, Treatment("(10,25]"))[T.(100,175]]    -0.5935      0.039    -15.049      0.000      -0.672      -0.515
LSAT                                         0.0057      0.003      1.858      0.066      -0.000       0.012
GPA                                          0.0137      0.074      0.185      0.854      -0.133       0.161
np.log(libvol)                               0.0364      0.026      1.398      0.165      -0.015       0.088
np.log(cost)                                 0.0008      0.025      0.033      0.973      -0.049       0.051
==============================================================================
Omnibus:                        9.419   Durbin-Watson:                   1.926
Prob(Omnibus):                  0.009   Jarque-Bera (JB):               20.478
Skew:                           0.100   Prob(JB):                     3.57e-05
Kurtosis:                       4.890   Cond. No.                     9.48e+03
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 9.48e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
'''

四、全套代码

import wooldridge as woo
import numpy as np
import pandas as pd
import statsmodels.formula.api as smflawsch85 = woo.dataWoo('lawsch85')#指定多个区间
cutpts = [0, 10, 25, 40, 60, 100, 175]
#定义分类变量,并设置分类变量的标签
lawsch85['rc'] = pd.cut(lawsch85['rank'], bins=cutpts,labels=['(0,10]', '(10,25]', '(25,40]','(40,60]', '(60,100]', '(100,175]'])#回归分析,由程序自动指定基组
reg = smf.ols(formula='np.log(salary) ~ C(rc)+ LSAT + GPA + np.log(libvol) + np.log(cost)',data=lawsch85)
results = reg.fit()
print(results.summary())#回归分析,设定法学院排名(10,25]为基组
reg = smf.ols(formula='np.log(salary) ~ C(rc,treatment("(10,25]"))+ LSAT + GPA + np.log(libvol) + np.log(cost)',data=lawsch85)
results = reg.fit()
print(results.summary())

【Python计量】statsmodels对虚拟变量进行回归相关推荐

  1. stata 模型设定专题【计量经济系列(六)】(遗漏变量、无关变量、多重共线性、leverage、虚拟变量、线性插值......)

    stata 模型设定专题[计量经济系列(六)] 文章目录 1. 遗漏变量 与 无关变量 1.1 遗漏变量 1.2无关变量 2. 解释变量的权衡标准 3. 检验函数形式 4. 多重共线性 4.1 检验多 ...

  2. R语言定量方法:回归,虚拟变量和交互项,假设检验:F 检验、AIC 和 BIC分析学生成绩数据带自测题

    最近我们被客户要求撰写关于学生成绩的研究报告,包括一些图形和统计输出. 回归假设 省略变量偏差 如果真实模型包括X 1 和X 2 ,但我们忘记了X 2,那么 - 在某些情况下 - 对X的估计将会有偏差 ...

  3. 给属性赋值_赋值方法:虚拟变量 Dummy Coding

    点击上方蓝色字体,关注我们 选择实验法获得的数据属于离散变量,因而使用离散选择模型进行分析,常见的是Logit模型.在使用中需要对获得数据进行处理,其中一个处理方式就是虚拟变量(Dummy Varia ...

  4. Python Statsmodels 统计包之 OLS 回归

    Statsmodels 是 Python 中一个强大的统计分析包,包含了回归分析.时间序列分析.假设检 验等等的功能.Statsmodels 在计量的简便性上是远远不及 Stata 等软件的,但它的优 ...

  5. R 回归 虚拟变量na_互助问答第85期:虚拟变量和空间面板回归问题

    问题一:设置虚拟变量如何做工具变量处理 使用tobit模型回归时,被解释变量为连续变量,解释变量为分类变量,因研究重点需要将分类变量具体分析,因此将解释变量虚拟变量处理,回归时命令为tobit y i ...

  6. 虚拟变量的方法介绍及python实现方式

    虚拟变量的定义作用 计量经济学中对虚拟变量给出了定义.作用及使用场景,进一步的深入了解可以系统性学习. 定义:虚拟变量 ( Dummy Variables) ,用以反映无法定量度量的因素,譬如性别对收 ...

  7. python如何运用ols_使用OLS回归(Python,StatsModels,Pandas)预测未来值

    我目前正试图在Python中实现一个MLR,我不知道如何去应用我发现的未来值的系数.使用OLS回归(Python,StatsModels,Pandas)预测未来值 import pandas as p ...

  8. 笔记︱虚拟变量回归=差异显著(方差分析)+差异量化(系数值)

    虚拟变量作为自变量,放在回归方程中在教科书里面讲的都很多,笔者以前在学习的时候觉得虚拟变量较之方差分析,还有更多惊喜.谢宇老师的<回归分析>书中对虚拟变量做了高度的总结与归纳. 之后在文章 ...

  9. 『R语言Python』建模前的准备:连续型与离散型变量探索,离散型变量转为虚拟变量

    在建立模型之前,我们常要先对数据的类型作出判断,连续型数据可以不做处理,而离散型数据则可能需要转为虚拟变量.下文使用R语言中的经典数据集 mtcarsmtcarsmtcars 进行演示 Python: ...

  10. 22、python数据处理虚拟变量的转化

    虚拟变量(dummy variables):虚拟变量,也叫哑变量和离散特征编码.可用来表示分类变量.费数量因素可能产生的影响 01 离散特征的取值之间有大小意义 例如:尺寸(L.XL.XXL) 02 ...

最新文章

  1. Matlab与线性代数 -- 魔方矩阵
  2. 谷歌CEO皮查伊「美国版后浪演讲」:You Will Prevail,你们终将胜利
  3. swing 之FlowLayout 实现自动换行和滚动条添加
  4. 网络编程学习方法和图书推荐
  5. ValueStack基础:OGNL
  6. C# this关键字的3种用法
  7. [剑指offer]面试题10:二进制中1的个数
  8. C# 串口操作系列(5)--通讯库雏形
  9. 【flink】Flink 使用IntelliJ IDEA 进行远程调试代码
  10. jupyter notebook中创建环境、安装使用pytorch
  11. Struts2 result type(结果类型)
  12. oracle Rac的心跳线不支持交叉线?
  13. 2001-2019各省产业结构高级化指数(三产与二产比值)
  14. NLP思维一书读书笔记
  15. 立即收藏!2019前端工程师如何应对裁员潮?
  16. 深圳安全研讨会11月15日举行
  17. 《商业分析实践指南》(一)
  18. 基于eclipse和hiber的pojo、数据库表与mapping的相互转换(二)
  19. 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)
  20. 160809219 徐挺峰 实验2选择结构程序设计

热门文章

  1. 高数第七版_习题解答_极限练习解答(第二类重要极限的多元形式)
  2. 16年9月第二周---deadline
  3. [转载整理]计算机视觉及机器学习牛人和资料
  4. 给UILabel中的文字加删除线
  5. CST STUDIO SUITE 2022 软件下载与安装教程
  6. python 泰森多边形边界_geotools中泰森多边形的生成
  7. python apscheculer 报错 skipped: maximum number of running instances reached (1)
  8. Vue项目上传图片后在ie浏览器卡死
  9. 如何将图片做成内外边框HTML,如何用html给图片加边框
  10. 提取pdf目录的方法