R—基于diabetes数据的逐步回归、岭回归、lasso回归

这篇博客通过R语言对diabetes数据进行了逐步回归、岭回归和lasso回归的分析。首先,使用描述统计分析数据,发现存在共线性问题。然后,通过最小二乘回归建立模型并进行模型检验,显示模型满足高斯马尔可夫假设。接着,利用岭回归缓解共线性问题,并通过岭迹图选择合适的参数。最后,运用lasso回归进行变量选择,通过十折交叉验证和Cp统计量确定最优模型,最终筛选出13个和15个变量的模型。
摘要由CSDN通过智能技术生成

#本次diabete数据来源于R中lars包
#语言为R

观察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.描述统计

library(lars)
data(diabetes)
attach(diabetes)
kappa(x2)
#kappa()函数查看条件数为11427.09,共线性严重

step-2.最小二乘回归

step-2.1最小二乘回归方程

#用step()函数建立逐步回归模型,剔除不重要的变量,该函数使用AIC准则选择变量

model.step=step(lm(y~x2)) #建立逐步回归模型
summary(model.step)#得到回归方程的系数和p值
在这里插入图片描述#结果部分截图显示,调整后R方位0.5233,回归方程的F统计量显著,x2sex,x2bmi等变量的系数显著

step-2.2模型检验

#是否符合高斯马尔可夫假设,画出估计的y值与残差的散点图,以检验异方差性,并用夏皮洛-威尔克检验看看残差是不是正态分布

plot(model.step$fit,model.step$res) #画散点图
abline(h=0,lty=2)
shapiro.test(model.step$res)
在这里插入图片描述 # 夏皮洛-威尔克检验结果显示说明残差服从正态分布在这里插入图片描述#残差图显示逐步回归没有明显的异方差性

step-3.岭回归

β ^ r i d g e = a r g m i n ( ∑ i = 1 n ( y i − β 0 − ∑ j = 1 p x i j β j ) 2 + α ∑ j = 1 p β j 2 ) \hat{β}_{ridge}=arg min(\sum_{i=1} ^ {n}(y_i-β_0-\sum_{j=1}^{p}x_{ij}β_j)^2+\alpha \sum_{j=1}^{p}{β_j}^2) β^rid

好的,我可以为您提供基于 Sklearn 的 diabetes 数据集建立回归树模型的代码。 首先,我们需要导入必要的库并加载 diabetes 数据集: ```python from sklearn.datasets import load_diabetes from sklearn.tree import DecisionTreeRegressor from sklearn.model_selection import train_test_split # 加载 diabetes 数据集 diabetes = load_diabetes() X = diabetes.data y = diabetes.target ``` 接着,我们将数据集划分为训练集和测试集: ```python # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 然后,我们可以定义并训练回归树模型: ```python # 定义回归树模型 regressor = DecisionTreeRegressor(random_state=42) # 训练模型 regressor.fit(X_train, y_train) ``` 最后,我们可以使用测试集进行模型评估: ```python # 模型评估 score = regressor.score(X_test, y_test) print("回归树模型的 R2 分数为: {:.2f}".format(score)) ``` 完整的代码如下: ```python from sklearn.datasets import load_diabetes from sklearn.tree import DecisionTreeRegressor from sklearn.model_selection import train_test_split # 加载 diabetes 数据集 diabetes = load_diabetes() X = diabetes.data y = diabetes.target # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义回归树模型 regressor = DecisionTreeRegressor(random_state=42) # 训练模型 regressor.fit(X_train, y_train) # 模型评估 score = regressor.score(X_test, y_test) print("回归树模型的 R2 分数为: {:.2f}".format(score)) ``` 希望这个代码能够帮到您。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值