Python—基于diabetes的最小二乘回归、岭回归和lasso

#本次diabete数据来源于R中lars包
#不同于python库sklearn.datasets中的diabetes数据集
#语言为python

观察diabetes数据

序号 x.age x.sex x.glu y x2.age x2.sex x2.ltg:glu
1 0.03808 0.05068 -0.0176 151 0.03808 0.05068 -0.0278
442 -0.0455 -0.0446 0.00306 57 -0.0455 -0.0446 -0.0211
  1. 因变量y(糖尿病患者血液化验指标)
  2. 标准化的自变量矩阵x,大小为442*10矩阵,包含age、sex、bmi、map、tc、ldl、hdl、tch、ltg、glu这十个自变量
  3. x2矩阵,包含x和一些交互作用,大小为442*64矩阵,交互项例如age^2

step_1.数据预处理

step_1.1读取数据

import pandas as pd
data=pd.read_csv(‘diabetes.csv’,index_col=0)#将索引是0的列当作数据表的行标

step_1.2因变量、自变量定义

#本次分析使用x2和y,即64个自变量,1个因变量,样本大小为442

Index=data.columns#列索引
xtitle=[index for index in Index if ‘x.’ in index]#找出自变量矩阵x的列名
x2title=[index for index in Index if ‘x2.’ in index]#找出自变量矩阵x2的列名
xdata=data[xtitle]#定义自变量矩阵x
x2data=data[x2title]
ydata=data[‘y’]

step_1.3判断多重共线性

#使用最小二乘回归需要注意共线性问题,若共线性问题严重,则最小二乘回归效果不理想

import numpy as np
def kappa(x):
x=np.array(x)
XX=np.dot(x.T,x)#442*442的矩阵
lam=np.linalg.eigvals(XX)#特征值矩阵
return(np.sqrt(lam.max()/lam.min()))#条件数
kappa(x2data) #5472.957046414529

#x是mn 矩阵 ,y是nm矩阵,则np.dot(x,y) 得到m*m矩阵。
#当矩阵A为正规矩阵时,条件数为矩阵A的最大、最小特征值之商
#用kappa()函数查看自变量矩阵的共线性条件数,条件数5472.96很大,存在严重的多重共线性问题,可以尝试使用岭回归和lasso对多重共线性进行处理

step_2.最小二乘回归

step_2.1线性回归分析

#Statsmodels 是 Python 中一个强大的统计分析包,包含了回归分析、时间序列分析、假设检验等等的功能
#statsmodels.OLS 的输入有 (endog, exog, missing, hasconst) ,现只考虑前两个。第一个输入 endog 是回归中的因变量, exog 则是自变量的值。statsmodels.OLS 不会假设回归模型有常数项,所以假设模型是

  Y = β 0 x 0 + β 1 x 1 + . . . + β n x n   . \ Y = β _{0}x_{0}+β _{1}x_{1}+...+β _{n}x_{n}\,.  Y=β0x0+β1x1+...+βnxn.

import statsmodels.api as sm
import matplotlib.pyplot as plt
import scipy
X=sm.add_constant(x2data,prepend=True)#给自变量中加入常数项
lm=sm.OLS(ydata,X)
lm_result=lm.fit()
dir(lm_result)#查看类里有什么属性#
lm_result.summary()
#运行结果(jupyter)
对数据降维#Adj.R-squared是调整R方
  R a d j 2 = 1 − S S E n − p − 1 S S T n − 1   . \ R^2_{adj} =1-\frac{\frac{SSE}{n-p-1}}{\frac{SST}{n-1}}\,.  Radj2=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值