美文网首页
[R代码]岭回归

[R代码]岭回归

作者: expgene | 来源:发表于2023-10-18 11:57 被阅读0次

探序基因数学工作室

岭回归介绍:

岭回归分析是一种专用于共线性分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息,降低精度为代价获得回归系数更为符合实际,更可靠的回归方法。

VIF:然而很多时候,被筛选的特征在模型上线的预测效果并不理想,究其原因可能是由于特征筛选的偏差。但还有一个显著的因素,就是选取特征之间之间可能存在高度的多重共线性,导致模型对测试集预测能力不佳。为了在筛选特征之初就避免陷入这样的误区。介绍一种VIF(方差膨胀检验)方法,来对特征之间的线性相关关系进行检验,从而选取到独立性更好的特征,增强模型的解释能力。

岭回归相关R的代码:

1. MASS包-lm.ridge函数

library(MASS)

testtab <- read.table("xxx",header = TRUE)

lingr <-lm.ridge(lskn ~ Q15.1 + Q15.2 + Q15.3 + Q15.4 + Q13 + Q14.1 + Q14.2 + Q14.3 + Q9.1 + Q9.2 + Q9.3 + Q2.1 + Q2.2 + Q2.3 + Q3 + Q7.1 + Q7.2 + Q5.1 + Q5.2, data=testtab ,lambda=seq(0,3,0.1))

beta <- coef(lingr)

k <- lingr$lambda

plot(k,k,type="n",xlab="岭参数k",ylab="岭回归系数",ylim=c(-2.5,2.5))

linetype<-c(1:5)

char<-c(18:22)

for(i in 1:5)

  lines(k,beta[,i],type="o",lty=linetype[i],pch=char[i],cex=0.75)

#get p value

X <- as.matrix(testtab[,1:19])#生成自变量与因变量

y <- testtab[,20]

fit.se <- sqrt(diag(solve(t(X) %*% X + lingr$lambda * diag(ncol(X)))))

lingr$se <- fit.se

fit.se[fit.se==0] <- 1e-10

t_value <- lingr$coef / lingr$se

df <- nrow(X) - ncol(X)

p_value <- 2 * pt(abs(t_value), df = df, lower.tail = FALSE)

result <- data.frame(lambda = lingr$lambda, coef = lingr$coef, se = lingr$se, p_value = p_value)

#get p value

2. ridge包-linearRidge函数

可以自动选取岭回归参数,同时也可以自己通过其他的方式选择好,再进行设置

cement <- data.frame(X1 = c(7, 1, 11, 11, 7, 11, 3, 1, 2, 21, 1, 11, 10),

                    X2 = c(26,29, 56, 31, 52, 55, 71, 31, 54, 47, 40, 66, 68),

                    X3 = c(6, 15, 8, 8, 6, 9, 17, 22, 18, 4, 23, 9, 8),

                    X4 = c(60, 52, 20, 47, 33, 22, 6, 44, 22, 26, 34, 12, 12),

                    Y = c(78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7, 72.5, 93.1,115.9,83.8, 113.3, 109.4))

library(ridge)

mod <- linearRidge(Y ~ ., data = cement)

summary(mod)

##

## Call:

## linearRidge(formula = Y ~ ., data = cement)

##

##

## Coefficients:

##            Estimate Scaled estimate Std. Error (scaled) t value (scaled)

## (Intercept)  83.704              NA                  NA              NA

## X1            1.292          26.332              3.672            7.17

## X2            0.298          16.046              3.988            4.02

## X3            -0.148          -3.279              3.598            0.91

## X4            -0.351        -20.329              3.996            5.09

##            Pr(>|t|)   

## (Intercept)      NA   

## X1          7.5e-13 ***

## X2          5.7e-05 ***

## X3              0.36   

## X4          3.6e-07 ***

## ---

## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

##

## Ridge parameter: 0.01473, chosen automatically, computed using 2 PCs

##

## Degrees of freedom: model 3.01 , variance 2.84 , residual 3.18

参考:

知乎-数据分析中常见的七种回归分析以及R语言实现(三)---岭回归

CSDN-R语言实现岭回归

3. 多重共线性,计算VIF值等:

library(car)

data(mtcars)

mtcars

vifvalue <- vif(lm(carb ~ mpg + cyl + hp,data=mtcars))

函数介绍:

MASS包的lm.ridge

lm.ridge(formula, data, subset, na.action, lambda = 0, model = FALSE,

        x = FALSE, y = FALSE, contrasts = NULL, ...)

输出的结果包括coef,scales等,coef为

参考:

B站-R语言学习日记(五)丨岭回归方法

知乎-R语言与计量经济学(二)多重共线性

51CTO-R语言检验多重共线性VIF

CSDN-岭回归(RR)模型的建立---R语言实现(3)附代码

相关文章

网友评论

      本文标题:[R代码]岭回归

      本文链接:https://www.haomeiwen.com/subject/fxkzbdtx.html