• 拓端tecdat|R语言Bootstrap的岭回归和自适应LASSO回归可视化


    原文链接:http://tecdat.cn/?p=22921

    原文出处:拓端数据部落公众号

    拟合岭回归和LASSO回归,解释系数,并对其在λ范围内的变化做一个直观的可视化。

    1.  
      # 加载CBI数据
    2.  
      # 子集所需的变量(又称,列)
    3.  
      CBI_sub <- CBI
    4.  
       
    5.  
      # 重命名变量列(节省大量的输入)
    6.  
      names(CBI_sub)[1] <- "cbi"
    7.  
       
    8.  
       
    9.  
      # 只要完整案例,删除缺失值。
    10.  
      CBI_sub <- CBI_sub[complete.cases(CBI_sub),]
    11.  
       
    12.  
      #现在检查一下CBI_sub里面的内容
    13.  
      names(CBI_sub)

    1.  
      # 设置控制参数
    2.  
      control = method = "cv",number=5) # 5折CV
    3.  
       
    4.  
      cbi ~ ., data = CBI_sub, method = "glmnet",
    5.  
      trControl = control, preProc = c("center","scale"), # 中心和标准化数据
    6.  
       
    7.  
      # 得到系数估计值(注意,我们真正关心的是β值,而不是S.E.)。
    8.  
      coef(ridge_caret.fit, bestTune$lambda)

    1.  
      cbi ~ ., data = CBI_sub, method = "glmnet",
    2.  
      tuneGrid = expand.grid(alpha = 1,
    3.  
       
    4.  
      # 获得系数估计
    5.  
      coef(lasso_caret,bestTunelambda)

    使用glmnet软件包中的相关函数对岭回归和lasso套索回归进行分析。 

    准备数据  

    注意系数是以稀疏矩阵格式表示的,因为沿着正则化路径的解往往是稀疏的。使用稀疏格式在时间和空间上更有效率 

    1.  
      # 拟合岭回归模型
    2.  
      glmnet(X, Y, alpha = 0)
    3.  
       
    4.  
      #检查glmnet模型的输出(注意我们拟合了一个岭回归模型
    5.  
      #记得使用print()函数而不是summary()函数
    6.  
      print(glmnet.fit)

    1.  
      # 输出最佳lamda处的岭回归coefs
    2.  
       
    3.  
      coef(glmnet.fit, s = lambda.1se)

    绘制结果 

    1.  
      #
    2.  
      plot(ridge_glmnet.fit, label = TRUE)

    图中显示了随着lambda的变化,模型系数对整个系数向量的L1-norm的路径。上面的轴表示在当前lambda下非零系数的数量,这也是lasso的有效自由度(df)。 

    1.  
      par(mfrow=c(1,2)) # 建立1乘2的绘图环境
    2.  
      plot_glmnet(ridge_glmnet.fit, xvar = "lambda", label=6, xlab = expression(paste("log(", lambda, ")")), ylab = expression(beta)) # "标签"是指你想让图表显示的前N个变量。

    1.  
      # 进行变量选择,比如说,我想根据λ>0.1的标准或其他一些值来选择实际系数。
    2.  
      coef(ridge_glmnet.fit, s = 0.1)

    交叉验证的岭回归 

    1.  
      #
    2.  
      plot(cv.ridge)
    3.  
       
    4.  
      # 我们可以查看选定的lambda和相应的系数。例如:
    5.  
      lambda.min

    # 根据最小的lambda(惩罚)选择变量
    

    1.  
      # lambda.min是λ的值,它使交叉验证的平均误差最小
    2.  
      # 选择具有最大惩罚性的一个
    3.  
      coef

    ## 对lasso模型做同样的处理

    数据挖掘

    使用自适应LASSO进行函数形式规范检查

    1.  
      # 加载CBI数据
    2.  
      CBI <- read.csv("dat.csv")
    3.  
      #对需要的变量进行取子集(列)
    4.  
      names(CBI)<- "cbi"
    fitpoly(degree = 2, thre = 1e-4)   # 设置多项式的度数为2 
    

    bootstrap 

    boot(poly.fit1, nboot = 5)   #5次bootstrap迭代
    

    交叉验证 

    1.  
      # 交叉验证,10折CV
    2.  
      cbi ~ ., data = CBI_sub, degrees.cv = 1:3,)

    1.  
      # 提取最佳模型并进行bootstrap
    2.  
      boot(cv.pred, nboot = 5) # 5次bootstrap
    3.  
       
    4.  
      # 绘制cv.boot的预测值的边际效应
    5.  
      marg(cv.boot))

    补充

    获得岭回归和LASSO模型的bootstrap平均数

    1.  
      #如果你想要S.E.,通过bootstrap模拟得到它。
    2.  
       
    3.  
      library(boot)
    4.  
      boot(CBI_sub, function(data, idx)
    5.  
      bootSamples

    最受欢迎的见解

    1.R语言多元Logistic逻辑回归 应用案例

    2.面板平滑转移回归(PSTR)分析案例实现

    3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    4.R语言泊松Poisson回归模型分析案例

    5.R语言回归中的Hosmer-Lemeshow拟合优度检验

    6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

    7.在R语言中实现Logistic逻辑回归

    8.python用线性回归预测股票价格

    9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

    ▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。 ▍咨询链接:http://y0.cn/teradat ▍联系邮箱:3025393450@qq.com
  • 相关阅读:
    [Flex] Flex 控件&类 的自定义事件添加
    [java]原始类型和其包装类
    [java]解析网络上的xml文件
    [android]用adb操作android模拟器
    [java]优先队列
    [Q&A]为什么在ospf邻居之间确定主从关系?
    [js]jQuery插件开发总结
    [Q&A] 为什么把js脚本放到html页面的底部?
    理解一个简单的网页请求过程
    [js]如何更快的得到图片的高度和宽度
  • 原文地址:https://www.cnblogs.com/tecdat/p/14961465.html
Copyright © 2020-2023  润新知