当前位置: 首页 > web >正文

从0开始学习R语言--Day57--SCAD模型

在之前,我们提到过对于基因数据,我们会倾向于用弹性网络去建模,这样可以做到节省大量计算量的同时,保留关键的变量做筛选;但是实际上弹性网络本质上是用两种方法的结合去拟合,得到的函数是凸函数,从而不可避免的会产生偏差。

相比之下,SCAD则选择更直接的分段建模,这样可以最大程度地保留原有特征的特点,同时做到更优的筛选,只是计算复杂度会更高,需要谨慎使用。

以下是一个例子:

# 加载必要的包
library(ncvreg)
library(ggplot2)# 生成模拟数据集
set.seed(123)
n <- 200
p <- 10
X <- matrix(rnorm(n * p), n, p)
colnames(X) <- paste0("X", 1:p)
true_beta <- c(3, 1.5, 2, rep(0, p-3))
y <- X %*% true_beta + rnorm(n, sd = 1.5)# 使用SCAD进行变量选择
scad_fit <- ncvreg(X, y, penalty = "SCAD")# 使用交叉验证选择最优λ
cv_fit <- cv.ncvreg(X, y, penalty = "SCAD")# 查看交叉验证结果
#print(cv_fit)# 获取最优λ值 (这里使用最小化误差的λ)
best_lambda <- cv_fit$lambda.min# 查看最优模型的摘要
summary(scad_fit, lambda = best_lambda)# 查看最优模型的系数
coef(scad_fit, lambda = best_lambda)# 绘制系数路径图
plot(scad_fit)
abline(v = log(best_lambda), lty = 2, col = "red")  # 标记最优λ位置# 可视化比较
results <- data.frame(Variable = colnames(X),True = true_beta,SCAD = coef(scad_fit, lambda = best_lambda)[-1]  # 去掉截距项
)ggplot(results, aes(x = Variable)) +geom_point(aes(y = True, color = "True"), size = 3) +geom_point(aes(y = SCAD, color = "SCAD"), size = 3) +labs(title = paste("真实系数与SCAD估计比较 (λ =", round(best_lambda, 4), ")"),y = "系数值",color = "类型") +theme_minimal()

输出:

SCAD-penalized linear regression with n=200, p=10
At lambda=0.3861:
-------------------------------------------------Nonzero coefficients         :   3Expected nonzero coefficients:   0.00Average mfdr (3 features)    :   0.000Estimate     z    mfdr Selected
X1    3.003 30.39 < 1e-04        *
X3    2.014 20.85 < 1e-04        *
X2    1.547 16.53 < 1e-04        *(Intercept)          X1          X2          X3          X4          X5          X6          X7 -0.1908806   3.0030121   1.5470496   2.0140936   0.0000000   0.0000000   0.0000000   0.0000000 X8          X9         X10 0.0000000   0.0000000   0.0000000 

结果表明,X1、X2、X3系数非零,且mfdr < 1e-04,统计学显著,是显著变量;mdfr值极低,说明假阳性的风险极低;当lambda较大时,系数基本被压缩为0,说明模型趋于稀疏;而lambda在减少时,系数先快速上升再逐渐趋于平缓,说明其具有收敛性和稳定性。

http://www.xdnf.cn/news/16379.html

相关文章:

  • 深入浅出设计模式——创建型模式之简单工厂模式
  • Hive【Hive架构及工作原理】
  • 如何高效通过3GPP官网查找资料
  • JAVA + 海康威视SDK + FFmpeg+ SRS 实现海康威视摄像头二次开发
  • 服务器托管:网站经常被攻击该怎么办?
  • 学习游戏制作记录(克隆技能)7.25
  • 秋招Day19 - 分布式 - 分布式锁
  • 初识决策树-理论部分
  • 肺癌预测模型实战案例
  • 【自动化运维神器Ansible】Ansible常用模块之Copy模块详解
  • 文件包含学习总结
  • 滑动窗口-7
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时空联合细胞对NLP中的深层语义分析的积极影响和启示
  • ClickHouse 常用的使用场景
  • AWS WebRTC:我们的业务模式
  • [python][flask]flask蓝图使用方法
  • 【软件工程】构建软件合规防护网:双阶段检查机制的实践之道
  • Android studio自带的Android模拟器都是x86架构的吗,需要把arm架构的app翻译成x86指令?
  • FP16 和 BF16
  • 函数-变量的作用域和生命周期
  • 老题新解|奇偶数判断
  • 从Taro的Dialog.open出发,学习远程控制组件之【事件驱动】
  • OAuth 2.0 安全最佳实践 (RFC 9700) password 授权类型已经不推荐使用了,将在计划中移除
  • JS与Go:编程语言双星的碰撞与共生
  • vue2+node+express+MongoDB项目安装启动启动
  • go语言基础教程:【2】基础语法:基本数据类型(整形和浮点型)
  • js实现宫格布局图片放大交互动画
  • android app适配Android 15可以在Android studio自带的模拟器上进行吗,还是说必须在真机上进行
  • 无人机视觉模块技术解析
  • 【LeetCode Solutions】LeetCode 热题 100 题解(1 ~ 5)