古典线性回归的假设是一种理想状态, 现实数据很难满足, 比如异方差就是一个常见的违背模型假设的情况。下面我们介绍一下如何检验数据是否存在异方差以及出现异方差的情况后如何处理。

数据介绍

这是Nevlove(1963)的数据, 在之前的教程中一直使用这个数据, 相信大家已经非常熟悉。首先我们载入数据集:

1use data/nerlove.dta, clear

输出(stream):

(Nerlove 1963 paper)

看一下数据的基本情况:

1describe

输出(stream):

Contains data from data/nerlove.dta

obs: 145 Nerlove 1963 paper

vars: 10 13 Aug 2012 10:00

size: 5,220

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

storage display value

variable name type format label variable label

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

tc float %9.0g total cost

q int %8.0g total output

pl float %9.0g price of labor

pf float %9.0g price of fuel

pk int %8.0g user cost of capital

lntc float %9.0g

lnq float %9.0g

lnpf float %9.0g

lnpk float %9.0g

lnpl float %9.0g

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sorted by:

做简单的线性回归:

1reg lntc lnq lnpl lnpk lnpf

输出(stream):

Source | SS df MS Number of obs = 145

-------------+---------------------------------- F(4, 140) = 437.90

Model | 269.524728 4 67.3811819 Prob > F = 0.0000

Residual | 21.5420958 140 .153872113 R-squared = 0.9260

-------------+---------------------------------- Adj R-squared = 0.9239

Total | 291.066823 144 2.02129738 Root MSE = .39227

------------------------------------------------------------------------------

lntc | Coef. Std. Err. t P>|t| [95% Conf. Interval]

-------------+----------------------------------------------------------------

lnq | .7209135 .0174337 41.35 0.000 .6864462 .7553808

lnpl | .4559645 .299802 1.52 0.131 -.1367602 1.048689

lnpk | -.2151476 .3398295 -0.63 0.528 -.8870089 .4567136

lnpf | .4258137 .1003218 4.24 0.000 .2274721 .6241554

_cons | -3.566513 1.779383 -2.00 0.047 -7.084448 -.0485779

------------------------------------------------------------------------------

画残差与拟合值的散点图:

1rvfplot

从这个图中可以清楚的看到, 随着拟合值的变化, 残差也发生了有规律的变化。所以我们可以怀疑存在异方差的现象。

我们还可以绘制残差与任意变量的散点图:

1rvpplot lnq

1rvpplot lnpk

上面的散点图可以看出, 很有可能存在异方差的现象。

怀特检验

我们可以使用怀特检验来检验异方差是否真的存在。我们用到了estat命令, 它指的是’post-estimation statistics’, 统计后估计量, 而imtest指的是informatrix test:

1estat imtest, white

输出(stream):

White's test for Ho: homoskedasticity

against Ha: unrestricted heteroskedasticity

chi2(14) = 73.88

Prob > chi2 = 0.0000

Cameron & Trivedi's decomposition of IM-test

---------------------------------------------------

Source | chi2 df p

---------------------+-----------------------------

Heteroskedasticity | 73.88 14 0.0000

Skewness | 22.79 4 0.0001

Kurtosis | 2.62 1 0.1055

---------------------+-----------------------------

Total | 99.29 19 0.0000

---------------------------------------------------

我们可以看到卡方值是chi2(14) = 73.88, 显著性为 Prob > chi2 = 0.0000, 显然应当拒绝虚无假设Ho: homoskedasticity, 存在异方差。

BP检验

我们还可以使用BP检验:

stata实际应用中, 我们可能采取三种方法, 通常这三种方法都可以做一遍:

estate hettest (默认设置, 使用拟合值$\hat y$

1estat hettest, iid

输出(stream):

Breusch-Pagan / Cook-Weisberg test for heteroskedasticity

Ho: Constant variance

Variables: fitted values of lntc

chi2(1) = 29.13

Prob > chi2 = 0.0000

1estat hettest, rhs iid

输出(stream):

Breusch-Pagan / Cook-Weisberg test for heteroskedasticity

Ho: Constant variance

Variables: lnq lnpl lnpk lnpf

chi2(4) = 36.16

Prob > chi2 = 0.0000

1estat hettest lnq, iid

输出(stream):

Breusch-Pagan / Cook-Weisberg test for heteroskedasticity

Ho: Constant variance

Variables: lnq

chi2(1) = 32.10

Prob > chi2 = 0.0000

不管用哪种方法, 都可以看到我们都应该拒绝同方差的原假设。

异方差的处理

由于数据存在异方差,我们的回归结果是不可信的, 所以可以使用WLS方法(加权的最小二乘法)。它的原理是, 使用扰动项方差的估计值的倒数作为权重, 再进行回归, 加权后, 可以使得方差较大的数据点的权重降低。

计算残差e1

首先还是要进行回归:

1quietly reg lntc lnq lnpl lnpk lnpf

计算残差e1:

1predict e1, res

残差的平方1gen e2 = e1^2

残差平方的对数1gen lne2 = log(e2)

使用lnq估计残差值1reg lne2 lnq , noc

输出(stream):

Source | SS df MS Number of obs = 145

-------------+---------------------------------- F(1, 144) = 419.95

Model | 2065.53636 1 2065.53636 Prob > F = 0.0000

Residual | 708.275258 144 4.91857818 R-squared = 0.7447

-------------+---------------------------------- Adj R-squared = 0.7429

Total | 2773.81162 145 19.1297353 Root MSE = 2.2178

------------------------------------------------------------------------------

lne2 | Coef. Std. Err. t P>|t| [95% Conf. Interval]

-------------+----------------------------------------------------------------

lnq | -.5527533 .0269733 -20.49 0.000 -.6060681 -.4994384

------------------------------------------------------------------------------

从结果中可以看出来, 残差变动可以被lnq解释75%, 这还是一个挺严重的问题。

我们可以计算上述回归的拟合值, 作为lnq可以解释的那部分残差:

1predict lne2f

输出(stream):

(option xb assumed; fitted values)

因为lne2f是取对数的结果, 所以我们再求指数值:

1gen e2f = exp(lne2f)

使用加权最小二乘法

最终使用加权的最小二乘法来进行回归检验:

1reg lntc lnq lnpl lnpk lnpf [aw=1/e2f]

输出(stream):

(sum of wgt is 8.1811e+03)

Source | SS df MS Number of obs = 145

-------------+---------------------------------- F(4, 140) = 895.03

Model | 173.069988 4 43.2674971 Prob > F = 0.0000

Residual | 6.76790874 140 .048342205 R-squared = 0.9624

-------------+---------------------------------- Adj R-squared = 0.9613

Total | 179.837897 144 1.24887428 Root MSE = .21987

------------------------------------------------------------------------------

lntc | Coef. Std. Err. t P>|t| [95% Conf. Interval]

-------------+----------------------------------------------------------------

lnq | .8759035 .0153841 56.94 0.000 .8454883 .9063187

lnpl | .5603879 .1734141 3.23 0.002 .2175389 .9032369

lnpk | -.0929807 .1960402 -0.47 0.636 -.4805627 .2946014

lnpf | .4672438 .0616476 7.58 0.000 .3453632 .5891243

_cons | -5.522088 .9928472 -5.56 0.000 -7.485 -3.559176

------------------------------------------------------------------------------

对比OLS的结果, 上面WLS的结果可以看出, lnpl的系数由不显著变为显著, lnpk系数由”-0.22”变为”-0.09”, 其理论值是正值, 结果显示, WLS提高了回归估计效率。

注意

本文由jupyter notebook转换而来, 您可以在这里下载notebook

有问题可以直接在下方留言

或者给我发邮件675495787[at]qq.com

请记住我的网址: mlln.cn 或者 jupyter.cn

异方差检验 python_stata教程03-异方差的检验和处理相关推荐

  1. 异星工厂机器人教程_异星工厂逻辑机器人建筑机器人使用方法

    最近不少玩家都在玩<异星工厂>这款游戏,今天小编为大家带来异星工厂逻辑机器人和建筑机器人的使用方法,想知道这两种机器人怎么用?对此比较感兴趣的玩家不可以看看参考一下.本方法适用于适用于0. ...

  2. 异星工厂机器人教程_异星工厂 系统教程及全任务图文攻略

    第3关:调查残骸 摧毁虫巢并检查残骸 现在要赶往东南方的基地调查那里的电脑数据,解锁更高级的科技.只是基地附近有很多的虫巢,现在需要更加力的武器来摧毁那边的虫巢. 本关没有任何资源,所以只能利用现在手 ...

  3. python 方差_python统计分析总体方差检验

    一个总体方差的检验 在假设检验中,有时不仅仅需要检验正态总体的均值,还需要验证总体均值的方差.比如,在产品质量检验中,质量标准是通过不同类型的指标反应的,有些数据属于均值类型,比如尺寸.重量.抗拉强度 ...

  4. python方差检验分析(ANOVA)

    python方差检验分析(ANOVA) 方差分析(Analysis of Variance,简称ANOVA),又称"变异数分析",是R.A.Fisher发明的,用于两个及两个以上样 ...

  5. 双因素方差检验(Two factor variance test)

    概述 双因素方差分析(Double factor variance analysis) 有两种类型:一个是无交互作用的双因素方差分析,它假定因素A和因素B的效应之间是相互独立的,不存在相互关系:另一个 ...

  6. 假设检验:一个总体参数的检验、总体方差检验、两个总体参数的检验和两个总体方差的检验

    假设检验 1.一个总体参数的检验 总体均值的检验(大样本情况下,样本均值的抽样分布近似服从正态分布) 大样本,总体方差已知,z检验 大样本,总体方差未知,用样本方差代替总体方差,z检验 小样本,总体为 ...

  7. Math:利用学生计算器计算一大堆的平均数和方差思维图文教程(一张图搞定!)

    Math:利用学生计算器计算一大堆的平均数和方差思维图文教程(一张图搞定!) 目录 利用学生计算器计算一大堆的平均数和方差教程 利用学生计算器计算一大堆的平均数和方差教程 我们的学生计算器其实有很多功 ...

  8. Python教程:异或运算符(^)、与运算符()、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)

    1.异或的含义 异或运算与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真.转化为命题,就是:"两者的值不同."或"有且仅有一个为 ...

  9. python方差齐性检验_方差分析中的方差齐性检验_方差齐性检验结果分析

    方差分析中的方差齐性检验_方差齐性检验结果分析_方差分析 齐性检验 方差分析时的方差齐性检验是方差分析的前提条件,还是只是后面进行均值的多重比较时选择分析方法的依据?看过几本书,这两种观点都有.我看方 ...

  10. 力扣每日一题:1720.解码异或后的数组 python异或操作

    1720.解码异或后的数组 https://leetcode-cn.com/problems/decode-xored-array/ 难度:简单 题目: 未知 整数数组 arr 由 n 个非负整数组成 ...

最新文章

  1. java实现迷宫算法--转
  2. rk android8.1加密,Android 8.1RK平台增加自定义脚本,修改文件权限
  3. 【渝粤题库】广东开放大学民法 形成性考核
  4. 早起21天,奖你 1000元!
  5. 架构设计 | 缓存管理模式,监控和内存回收策略
  6. ICLR 2021 | 腾讯 AI Lab 入选论文解读
  7. linux centos7 安装zookeeper
  8. 带缺省参数的重复声明
  9. 发布一个域安全级别的无代码InfoPath表单作为文档库模版 (InfoPath 一)
  10. Android支付实践(一)之支付宝支付详解与demo
  11. Mysql Fabric实现学习笔记
  12. 避免过度设计,一对多时才用父类、接口
  13. SPSS作业-方差分析-双因素分析
  14. h5页面 请在微信客户端打开链接_模拟微信接口时,提示“请在微信客户端打开链接”(转)...
  15. php判断移动端和pc端访问_PHP函数判断移动端和PC端
  16. 兔子数列规律怎么讲_神奇兔子数列
  17. 小米手机的BUG,自动安装 APP 的错觉
  18. 耶鲁大学开放课程:《金融市场》第3课
  19. 【python】数字验证常用操作
  20. 特征提取 - 海森矩阵(Hessian Matrix)及一个用例(图像增强)

热门文章

  1. 如何快速查看颜色的RGB或者十六进制代码(QQ截图,最方便)
  2. 计算机新功能,利用win7新功能提升工作效率
  3. 【系】微信小程序云开发实战坚果商城-前后端交互之分类实现
  4. 一寸照纯红色底图片_红底证件照换成蓝色背景,边缘怎样处理,才能让照片更自然呢?...
  5. VUE小需求——旋转小图标
  6. 根据录入的计算公式计算_增值税含税怎么计算?
  7. Spring源码学习笔记:经典设计模式之工厂模式
  8. Android集成高德地图导航SDK、实现App内进行导航、打开高德App导航
  9. AT91SAM9260EK总是出现有RomBOOT提示但是却无法连接SAM-BA的方法
  10. 关于使用 MediaPlayer.setLooping(true) 设置循环播放