不调包实现Python逻辑回归【金融计量应用】

引入工具包

import pandas as pd
import numpy as np
from scipy.optimize import minimize
from scipy import stats

读入数据

data=pd.read_csv(r'C:\Users\lenovo\Documents\计量\作业5\womenwk.csv')
data.head()
ageeducationmarriedchildrenworkcons
022101001
136101011
228101001
337101001
439101111

在读入数据之前,已手动在csv文件中添加一列作为常数项

定义X,y

X=data.drop(['work'],axis=1)
y=data['work']

定义优化函数

theta=np.zeros([1,5])#给theta赋初值
def sigma(z):
    return (1 / (1 + np.exp(-z)))#利用分布函数转为0,1之间
def model(X, theta):
    return (sigma(np.dot(X, theta.T)))#返回0,1之间的概率
def MLE(theta):
     return (-np.sum((y)*np.log((model(X, theta)))+(1 - y)*( np.log(1-(model(X, theta))))) )#似然函数

极大化似然函数,即最小化负的似然函数

beta=minimize(MLE,theta,method='BFGS')#选择拟牛顿法优化

得到的beta估计值为

beta_h=np.array([ 0.05793019,  0.09825122,  0.74177801,  0.76448814, -4.15924236])

与教材基本一致

minimize函数内置海塞矩阵的逆,可以直接输出

Hes=beta.hess_inv
I = np.diagonal(Hes)
std = np.sqrt(I)#标准误

输出标准误

array([0.01049844, 0.02006933, 0.32907809, 0.05084056, 0.30591416])

定义沃尔德统计量并计算p值

Wald=np.power(len(X)*(beta_h),2)/std
p=1-stats.chi2.cdf(Wald,1)

输出p

array([0., 0., 0., 0., 0.])

将结果统计为表格查看

coefstdp
education0.098251220.020069330
married0.741778010.329078090
children0.764488140.050840560
cons-4.159242360.305914160
age0.057930190.010498440
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值