自己造轮子——差分法消除自相关_基于Statsmodels

我知道用stata和R的更多,此处仅基于兴趣摸索,本文数据来自于朱顺全老师的教程,感谢本杰明·安德森教授!!!

一阶差分

1
2
3
4
5
6
7
8
data=data.diff() # 一阶差分
data=data.dropna()
x=np.array(data[['lr']])
y=np.array(data[['kf']])
X=sm.add_constant(x)
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())

DW检验中发现存在自相关,使用 data.diff() 实现一阶差分

例子很简单,感觉完全不够用,后面还要再深入

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.stats.diagnostic import het_breuschpagan, het_white,het_goldfeldquandt
from patsy import dmatrices

#### 数据导入
data=pd.DataFrame()
data=pd.DataFrame(pd.read_excel('C:\\Users\\cyx94a\\Desktop\\Python\\data\\al8-2.xls'))
vars=['x','y']
df=data[vars]

#### 生成设计矩阵
y,X=dmatrices('y~x',data=df,return_type='dataframe')

#### 描述性统计和相关分析
print(data.describe())
print(data.corr())

#### OLS
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())

#### 计算VIF
X_with_const = sm.add_constant(X) # 为矩阵X增加常数项

vif_values = [variance_inflation_factor(X_with_const.values, i) for i in range(X_with_const.shape[1])] # 计算每个特征的 VIF

print("VIF values:", vif_values) # 从列表的第二个数字及之后就是各个自变量的VIF值

####检验异方差
bpg_test = het_breuschpagan(fit.resid, X) # Breusch-Pagan检验异方差,返回列表的第二个数字是p值
print("Breusch-Pagan Test:", bpg_test)

white_test = het_white(fit.resid, X) # White检验异方差,返回列表的第二个数字是p值
print("White Test:", white_test)

gq_test=het_goldfeldquandt(fit.resid, X) # Goldfeld-Quandt检验异方差,返回列表的第二个数字是p值
print("Goldfeld-Quandt Test:",gq_test)

####差分法消除自相关
data=data.diff() # 一阶差分
data=data.dropna()
x=np.array(data[['lr']])
y=np.array(data[['kf']])
X=sm.add_constant(x)
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())

自己造轮子——差分法消除自相关_基于Statsmodels
http://example.com/2024/04/20/自己造轮子——差分法消除自相关_基于Statsmodels/
作者
cyx94a
发布于
2024年4月20日
许可协议