精华内容
下载资源
问答
  • 2021-02-11 08:57:21

    > library(pacman)

    > p_load(dplyr, readr, caret)

    以上一节中未去除离群值的MSE为3619.029,修正R2为0.8603和去除离群值后的MSE为2690.545,修正R2为0.8706为基准,以及两个模型在测试集上的MSE分别为2914.014和1672.859,对模型进行改进。

    > results

    + "original", 3619.029, 0.8603, 2914.014,

    + "remove_out", 2690.545, 0.8706, 1672.859)

    > results

    ## # A tibble: 2 x 4

    ## model mse r_square test_mse

    ##

    ## 1 original 3619. 0.860 2914.

    ## 2 remove_out 2691. 0.871 1673.

    1、数据预处理

    > machine

    > names(machine)

    + "cach", "chmin", "chmax", "prp", "erp")

    > machine

    >

    > set.seed(123)

    > ind

    >

    > dtrain

    > dtest

    2、缩减特征集

    > ct

    > set.seed(123)

    > fit.step

    + trControl = ct, preProcess = c("corr"), trace = F)

    >

    > summary(fit.step$finalModel)

    ##

    ## Call:

    ## lm(formula = .outcome ~ myct + mmin + mmax + cach + chmax, data = dat)

    ##

    ## Residuals:

    ## Min 1Q Median 3Q Max

    ## -163.94 -29.68 3.25 28.52 355.05

    ##

    ## Coefficients:

    ## Estimate Std. Error t value Pr(>|t|)

    ## (Intercept) -6.024e+01 8.909e+00 -6.762 2.01e-10 ***

    ## myct 5.550e-02 1.998e-02 2.777 0.006084 **

    ## mmin 1.476e-02 2.006e-03 7.358 7.20e-12 ***

    ## mmax 5.725e-03 6.919e-04 8.275 3.33e-14 ***

    ## cach 5.693e-01 1.443e-01 3.944 0.000116 ***

    ## chmax 1.683e+00 2.301e-01 7.313 9.33e-12 ***

    ## ---

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

    ##

    ## Residual standard error: 61.33 on 173 degrees of freedom

    ## Multiple R-squared: 0.8644, Adjusted R-squared: 0.8605

    ## F-statistic: 220.6 on 5 and 173 DF, p-value: < 2.2e-16

    > compute_mse

    + mean((prediction - actual) ^ 2)

    + }

    >

    > compute_mse(fit.step$finalModel$fitted.values, dtrain$prp)

    ## [1] 3634.847

    > compute_mse(predict(fit.step, newdata = dtest), dtest$prp)

    ## [1] 2785.94

    使用逐步回归模型的结果为:

    > results

    + tibble(model = "step",

    + mse = 3634.847,

    + r_square = 0.8605,

    + test_mse = 2785.94))

    > results

    ## # A tibble: 3 x 4

    ## model mse r_square test_mse

    ##

    ## 1 original 3619. 0.860 2914.

    ## 2 remove_out 2691. 0.871 1673.

    ## 3 step 3635. 0.860 2786.

    去掉离群值后,再次逐步回归:

    > dtrain.new

    > set.seed(123)

    > fit.step.out

    + trControl = ct, preProcess = c("corr"), trace = F)

    >

    > summary(fit.step.out$finalModel)

    ##

    ## Call:

    ## lm(formula = .outcome ~ myct + mmin + mmax + cach + chmax, data = dat)

    ##

    ## Residuals:

    ## Min 1Q Median 3Q Max

    ## -168.560 -23.668 2.268 21.691 271.120

    ##

    ## Coefficients:

    ## Estimate Std. Error t value Pr(>|t|)

    ## (Intercept) -4.474e+01 7.930e+00 -5.643 6.78e-08 ***

    ## myct 4.193e-02 1.731e-02 2.422 0.0165 *

    ## mmin 1.697e-02 1.752e-03 9.690 < 2e-16 ***

    ## mmax 4.629e-03 6.125e-04 7.557 2.35e-12 ***

    ## cach 5.968e-01 1.244e-01 4.797 3.48e-06 ***

    ## chmax 1.168e+00 2.090e-01 5.588 8.84e-08 ***

    ## ---

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

    ##

    ## Residual standard error: 52.85 on 172 degrees of freedom

    ## Multiple R-squared: 0.8702, Adjusted R-squared: 0.8664

    ## F-statistic: 230.6 on 5 and 172 DF, p-value: < 2.2e-16

    > compute_mse(fit.step.out$finalModel$fitted.values, dtrain.new$prp)

    ## [1] 2698.78

    > compute_mse(predict(fit.step.out, newdata = dtest), dtest$prp)

    ## [1] 1812.763

    > results

    + tibble(model = "step_out",

    + mse = 2698.78,

    + r_square = 0.8664,

    + test_mse = 1812.763))

    > results

    ## # A tibble: 4 x 4

    ## model mse r_square test_mse

    ##

    ## 1 original 3619. 0.860 2914.

    ## 2 remove_out 2691. 0.871 1673.

    ## 3 step 3635. 0.860 2786.

    ## 4 step_out 2699. 0.866 1813.

    删减特征后,模型在训练集上的mse都增大了,但在测试集上的mse却减小了。去除离群值后,mse都有所增大。

    3、正则化

    岭回归和lasso都值得尝试,当依赖于输入特征的某个子集的模型时往往用lasso表现更好;但当很多不同变量的系数具有较大分散度的模型则往往在岭回归下有更好的表现。

    3.1 岭回归

    但数据集维度很高时,尤其是和能获得的观测数据的数量相比很大时,线性回归往往会表现出非常高的方差。

    岭回归是一种通过其约束条件引入偏误但能有效地减小模型方差的方法。

    > set.seed(123)

    > fit.ridge

    + trControl = ct, preProcess = c("corr"))

    >

    > fit.ridge$bestTune

    ## lambda

    ## 3 0.1

    > fit.ridge$results$Rsquared[3]

    ## [1] 0.8058767

    > compute_mse(predict(fit.ridge, newdata = dtrain), dtrain$prp)

    ## [1] 3730.474

    > compute_mse(predict(fit.ridge, newdata = dtest), dtest$prp)

    ## [1] 2958.191

    > results

    + tibble(model = "ridge",

    + mse = 3730.474,

    + r_square = 0.8059,

    + test_mse = 2958.191))

    > results

    ## # A tibble: 5 x 4

    ## model mse r_square test_mse

    ##

    ## 1 original 3619. 0.860 2914.

    ## 2 remove_out 2691. 0.871 1673.

    ## 3 step 3635. 0.860 2786.

    ## 4 step_out 2699. 0.866 1813.

    ## 5 ridge 3730. 0.806 2958.

    3.2 lasso回归

    lasso是岭回归的一种替代正则化方法。它们之间的差别体现在惩罚项里,岭回归是将有效的将系数压缩到更小的值,而lasso最小化的是系数的绝对值之和,由于lasso会把某些系数完全收缩到0,所以它兼具了选择和收缩的功能,这个是岭回归是不具备的。

    在模型中,当alpha参数取值为0时是岭回归,alpha取值为1时是lasso。

    > set.seed(123)

    > fit.lasso

    + trControl = ct, preProcess = c("corr"))

    >

    > fit.lasso$bestTune

    ## fraction

    ## 3 0.9

    > fit.lasso$results$Rsquared[3]

    ## [1] 0.7996164

    > compute_mse(predict(fit.lasso, newdata = dtrain), dtrain$prp)

    ## [1] 3664.031

    > compute_mse(predict(fit.lasso, newdata = dtest), dtest$prp)

    ## [1] 2628.372

    最终选择的是alpha=0,即岭回归模型。

    > results

    + tibble(model = "lasso",

    + mse = 3664.031,

    + r_square = 0.7996,

    + test_mse = 2628.372))

    > results

    ## # A tibble: 6 x 4

    ## model mse r_square test_mse

    ##

    ## 1 original 3619. 0.860 2914.

    ## 2 remove_out 2691. 0.871 1673.

    ## 3 step 3635. 0.860 2786.

    ## 4 step_out 2699. 0.866 1813.

    ## 5 ridge 3730. 0.806 2958.

    ## 6 lasso 3664. 0.800 2628.

    综合对比,数据在去除离群值的线性回归模型上性能最优。

    更多相关内容
  • 岭回归技术的原理和应用作者马文敏岭回归分析是一种专用于共线性分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息,降低精度为代价获得回归系数更为符合实际...

    岭回归技术的原理和应用

    作者马文敏

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

    回归分析:他是确立两种或两种以上变量间相互依赖的定量关系的一种统计分析法。运用十分广泛,回归分析按照设计量的多少,分为一元回归和多元回归分析,按照因变量的多少,可分为简单回归分析和多重回归分析,按照自变量和因变量的多少类型可分为线性回归分析和非线性回归分析。如果在回归分析中,只包括一个自变量和因变量,且两者关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或俩个以上的自变量,且自变量之间存在线性相关,则称为多重性回归分析

    岭回归的原理:岭回归的原理较为复杂。根据高斯马尔科夫定理,多重相关性并不影响最小二乘估计量的无偏性和最小方差性,但是,虽然最小二乘法估计量在所有线性无偏估计量中是方差最小的,但是这个方差却不一定最小。而实际上可以找一个有偏估计量,这个估计量虽然有微笑的偏差,但他的精度却能够大大高于无偏的估计量。岭回归分析就是依据这个原理,通过在正规方程中引入有偏常数而求得回归估计量的,具体情况可以查阅资料。

    对于有些矩阵,矩阵中某个元素的一个很小变动,会引起最后计算结果误差很大,这种矩阵称为病态矩阵。有些时候不正确的计算方法也会使一个正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元上的元素很小,在计算时就会表现出病态的特征。

    岭回归方程的平方值会稍低于普通回归分析,但回归技术的显著性往往明显高于普通回归,在存在共线性的问题和病态数据偏多的研究中有较大的利用价值

    岭回归的应用:在家禽育植的应用:讨论了岭回归方法应用于混合线性模式方程组中估计家禽育植方法,其实质是将传统的混合线性模型方程组理解为一种广义岭回归估计,为确定遗传参数的估计提供一种途径,同时,以番鸭为例,考虑了一个性状和两个固定效应,采用广义岭回归对公番鸭育植进行了估计,并与最佳线性无偏预测法进行了比较,结果表明,广义岭回归方法和BLUP法估计的育种植及其排序极其相似,其相关系数和秩 相关系数分别达到了0.998和0.986,且采用广义岭回归法预测的误差率极低,表明在混合线性模型方程组中使用广义岭回归估计动物育植方法具有可行性,并可省去估计遗传参数的过程,使BLUP法在动物选育中的应用更具有实用性。

    正向和反向相结合的卫星摄影数据模拟:卫星摄影数据仿真,通常采用正向模拟和反向模拟两种方法。正向模拟方法简单易行,无需替代计算,但地面点坐标在Y方向存在较大的差异,反向模拟可规避Y方向存在的差异问题,但必须基于已有的DEM数据,且DEM数据范围要与外方位元素范围基本一致,模拟数据受数据源条件制约。

    参考文件

    百度-----人大经济论坛

    百度------道客巴巴

    火狐浏览器

    展开全文
  • R语言-岭回归的代码与案例解读

    千次阅读 2022-03-04 15:23:24
    应用岭回归的场景有很多。 本文介绍的是 在应用多元线性回归时 遇到多重共线性问题,且无法删除变量或者增加样本量的情况下,应用岭回归的情况。

    应用岭回归的场景有很多。
    本文介绍的是 在应用多元线性回归时 遇到多重共线性问题,且无法删除变量或者增加样本量的情况下,应用岭回归的情况。

    • 案例:互联网经济对中国经济增长影响
    • 基础模型:C-D生产函数:Y=A*L^α *K^β
    • 应用模型:岭回归
    • 使用工具:r语言
    • 使用程序包:‘MASS’、‘xlsx’、‘car’
    • 准备数据:Y:国民生产总值、K:固定资产投资;L:年期末就业人数;A:互联网综合发展水平
    • 数据处理:为了模型的稳定性与计算的简易性,分别对两端取对数,变成线性关系,得到最终模型:lnY=γlnA+αlnL+βlnk
    • 变量解释与结果推测:综合考虑互联网经济的指标体系和数据的可得性,采用因子分析的方法估计综合技术水平A(详情可点击)。γ、α、β表示互联网经济产出弹性系数、劳动力弹性和资本弹性系数,本文推测,生产弹性系数会符合以下估计:
      (1)α+β+γ>1,表示最终经济规模呈递增趋势;
      (2)α<1、β<1,表示边际收益递减的规律性,γ>1,表示互联网经济的边际收益递增性,符合互联网经济的特征。

    对数线性化与多重共线性判别

    #加载程序包与数据
    library(MASS)
    library(xlsx)
    library(car)
    y <- read.xlsx("D:/RData/sets/Y.xlsx",1,encoding = "UTF-8")
    l <- read.xlsx("D:/RData/sets/L.xlsx",1,encoding = "UTF-8")
    a <- read.xlsx("D:/RData/sets/A.xlsx",1,encoding = "UTF-8")
    k <- read.xlsx("D:/RData/sets/K.xlsx",1,encoding = "UTF-8")
    dataY <-(y,a,l,k)
    #得到相关系数矩阵:变量之间呈同向变动的关系,符合经济发展的规律
    scatterplotMatrix(dataY,spread=FALSE,smoother.args=list(lty=2),main="Scatter Plot Matrix")
    

    相关系数矩阵图,可以看到gdp分别与互联网综合发展水平,劳动力和资本之间的关系

    #数据对数化
    ly <- log(y)
    la <- log(a)
    ll <- log(l)
    lk <- log(k)
    dY <-data.frame(ly,la,ll,lk)
    #做最小二乘回归
    fit <- lm(gdp~a+l+k,data=dataY)
    fit
    summary(fit)
    

    用最小二乘法建立计量模型,由(表6)看到,虽然模型的拟合优度足够高,F值也很大,整体拟合效果好,但是模型系数检验不显著。显而易见考虑模型的多重共线性问题

    在这里插入图片描述

    • 多重共线性是指在除了因变量与自变量的关系外,在解释变量之间也存在线性相关关系的一种形式。多重共线性导致gdp与互联网综合发展水平、劳动和资本之间的关系不显著。
    #应用vif值的开方来判断是否存在多重共线性
    library(car)
    vif(fit)
    sqrt(vif(fit))>2
    #vif值开方远大于2,存在多重共线性。
    
    • 岭回归是一种有偏估计,虽然对数据的无偏估计不准确,但是可以更准确的得到α,β,γ之间的系数关系。
    #首先用岭迹图判断k值区间并使用GCV值来进行岭回归估计
    plot(lm.ridge(dY[,1]~dY[,2]+dY[,3]+dY[,4],data = dY,lambda = seq(0,0.5,0.001)))
    #确定k至的估计区间在0-0.5间
    

    #确定k值并选择GCV值=0.127.做岭回归。
    select(lm.ridge(dY[,1]~dY[,2]+dY[,3]+dY[,4],data = dY,lambda = seq(0,0.5,0.001)))
    ridge1 <- lm.ridge(dY[,1]~dY[,2]+dY[,3]+dY[,4],data = dY,lambda =0.127)
    ridge1 <- lm.ridge(gdp~a+l+k,data = dY,lambda =0.127)
    ridge1
    

    在这里插入图片描述

    结果分析

    从系数符号看,符合我们前面对本模型的系数估计。即弹性系数之和大于1,互联网技术弹性系数大于1,劳动力弹性系数和资本弹性系数小于1。从整体来看,α+β+γ大于1,表明了边际产量递增的趋势,符合当前经济发展的现状,当国家投入劳动力和资本和技术时,经济发展水平总量增加。
    (分别具体的每个系数分析在这里不做过多讲述)
    本文结论为:我国正处于技术推动经济发展的新时代,应以互联网技术为核心,结合信息与知识,对我国经济发展做出贡献。

    总结

    本文以具体案例为例子,讲解了岭回归模型的r语言实现过程,并对案例进行一定程度的分析。希望可以对大家有帮助。

    在本文中对互联网综合发展指数的因子分析求解可以看该连接:
    http://t.csdn.cn/q3q9O

    展开全文
  • 比较lm.ridge和glmnet函数。 画岭迹图《统计学习导论 基于R语言的应用》图6-4 6-6。 论文复刻《基于岭回归和LASSO回归...安徽省财政收入影响因素分析_朱海龙》。

    R语言学习笔记



    install.packages("glmnet")	#安装包
    install.packages("ridge")		#安装包,用于第3问ridge
    install.packages("lars")		#安装包,用于第3问lasso
    

    比较lm.ridge和glmnet函数

    以“data3.3.csv”为例做岭回归,比较lm.ridge和glmnet函数的结果异同。(设置lambda=seq(0,3,0.1))

    library(glmnet)	#加载包
    library(MASS)	#加载包
    
    data3.3<-read.csv("data3.3.csv")	#导入数据
    
    ##数据标准化,将变量标准差变为1#########
    n<-nrow(data3.3)
    y1<-data3.3$y
    sd_y<-(var(y1)*(n-1)/n)^0.5
    y1<-y1/sd_y
    sd_x<-function(x){
        sdx<-(var(x)*(n-1)/n)^.5
        x/sdx
    }
    
    x1<-apply(data3.3[,3:7],2,sd_x)
    ##y2<-sd_x(data3.3[,2])
    datas1<-data.frame(y1,x1)
    
    ###对标准化的数据进行线性回归,计算回归系数
    lm1<-lm(y1~.,data=datas1)
    beta1<-coef(lm1)
    beta1
    coef(lm1)
    
    (Intercept)x1x2x3x4x5
    0.48482.4474-2.4851-0.08310.53050.5635
    ###用MASS包中的lm.ridge函数及数据datas1进行岭回归,计算岭回归的系数向量beta2
    lam<-seq(0,3,0.1)
    lm.ridge<-lm.ridge(y1~.,data=datas1,lambda=lam)
    beta2<-coef(lm.ridge)
    beta2
    

    注意:beta2的第一行是OLS回归的系数

    ###利用glmnet包中的glmnet函数及数据datas进行岭回归,计算岭回归的系数向量beta3
    lam1<-seq(3,0,-0.1)
    glmnet1<-glmnet(x1, y1,alpha=0, standardize=F,lambda=lam1,thresh=1e-20)	
    beta3<-coef(glmnet1)
    beta3
    

    alpha=1 is the lasso penalty, and alpha=0 the ridge penalty.
    注意:

    1. 无论lambda的值是倒序还是正序写,其岭回归的系数输出都是按lambda从大到小输出。另外,glmnet()模型的系数估计应该是近似估计,为了能和OLS回归系数进行对比,需要设置参数thresh,这个值越小越好,得到的岭回归系数中最后一列即为OLS回归的系数。
    2. 虽然调整thresh的值可以对应出OLS的回归系数,但是lm.ridge和glmnet函数对于不同lambda值对应的岭回归系数输出也不同。
    3. 由于本例中数据已经标准化,所以尝试可以发现,是否设置standardize=F,glmnet的输出结果没有变化。

    综上,岭回归函数glmnet默认是对因变量和自变量均进行标准化处理,标准化仅使标准差为1,未进行中心化,使用时注意,确定出最优的lambda后,岭回归模型最好用非标准化变量的模型。

    画岭迹图

    《统计学习导论 基于R应用》图6-4,图6-6

    图6-4 《统计学习导论 基于R语言的应用》P182

    6-4

    #图6-4	《统计学习导论 基于R语言的应用》P182
    library(glmnet)	#加载包,用于回归lm.ridge
    library(car)
    library(ISLR)	#加载包,调用数据
    attach(Credit)	#使用数据
    str(Credit)
    Cre<-data.frame(Credit)
    for(i in 1:12)
    	Cre[,i]=as.numeric(Credit[,i])
    #将Credit中factor类型的转化为numeric类型,为了标准化
    #也可用model.matrix,即  Cre<-model.matrix(Balance~.-ID,Credit)[,-1]
    
    Cre.s<-scale(Cre)	#标准化
    
    x<-data.matrix(Cre.s[,2:11])
    Balance<-Cre[,12]	#这里选取的是未标准化的因变量!
    
    data.new<-data.frame("Balance"=Balance,x)	#不对因变量进行标准化,只标准化自变量
    str(data.new)
    
    #OLS最小二乘回归(用于画右图的横轴)
    lm<-lm(Balance~.,data=data.new)
    lm
    beta_lm<-coef(lm)[2:11]	#舍去截距项
    beta_lm
    
    #ridge回归
    l1<-seq(0,10,0.01)
    l2<-seq(10.01,10000,1)
    lam2<-append(l1,l2)	#λ,受到数量限制所以这样生成
    lam2<-seq(0,10
    
    ridge<-glmnet(x,Balance,alpha=0, lambda=lam2, standardize=T, intercept = F)
    
    beta_ridge<-t(coef(ridge)[2:11,])
    colnames(beta_ridge)
    
    log_lambda_ridge<-log(ridge$lambda)/log(10)	#左图的横轴
    
    par(mfrow=c(1,2))
    
    #画图6-4
    linetype2<-c(1,2,3,1,1,1,1,4,1,1)	#线类型
    color2<-c("black","red","blue","grey","grey","grey","grey","orange","grey" ,"grey")	#线颜色
    
    #6-4左图
    plot(log_lambda_ridge, log_lambda_ridge ,type="n",xlab="λ",ylab="Standardized Coefficients",ylim=c(-300,400),xlim=c(-2,4),main="Ridge")	
    for(i in 1:10)
    	lines(log_lambda_ridge,beta_ridge[,i],lty=linetype2[i],col=color2[i],lwd=2.5)
    
    legend("topright",lty=c(1,2,3,4), legend=c("Income","Limit","Rating","Student"),col=c("black","red","blue","orange") ,lwd=2.5)
    
    #6-4右图
    beta_r_2<-sqrt(rowSums(beta_ridge^2))
    beta_l_2<-sqrt(sum(beta_lm^2))	
    plot_X<-beta_r_2 / beta_l_2
    
    plot(plot_X, plot_X, type="n",xlab="||β^R_λ||2  / ||β||2 ",ylab="Standardized Coefficients",ylim=c(-300,400),xlim=c(0,1),main="Ridge")
    for(i in 1:10)
    	lines(plot_X,beta_ridge[,i],lty=linetype2[i],col=color2[i],lwd=2.5)	
    
    

    图6-6《统计学习导论 基于R语言的应用》P184

    6-6

    #lasso回归
    lam3<-seq(0,6000,0.1)	#λ,受到数量限制所以这样生成
    lasso<-glmnet(x,Balance,alpha=1, lambda=lam3, standardize=T, intercept = F)	#和ridge的区别在于alpha
    
    beta_lasso<-t(coef(lasso)[2:11,])
    
    log_lambda_lasso<-log(lasso$lambda)/log(10)	#左图的横轴
    
    par(mfrow=c(1,2))
    
    #画图6-6
    #6-6左图
    plot(log_lambda_lasso, log_lambda_lasso, type="n",xlab="λ",ylab="Standardized Coefficients",ylim=c(-300,400),xlim=c(log_lambda_lasso[60000-1],max(log_lambda_lasso)),main="Lasso")
    for(i in 1:10)
    	lines(log_lambda_lasso,beta_lasso[,i],lty=linetype2[i],col=color2[i],lwd=2.5)
    
    #6-6右图
    beta_La_2<-rowSums(abs(beta_lasso))
    beta_l_2<-sum(abs(beta_lm))	
    plot_X_2<-beta_La_2 / beta_l_2
    
    plot(plot_X_2, plot_X_2, type="n",xlab="||β^L_λ||1  / ||β||1 ",ylab="Standardized Coefficients",ylim=c(-300,400),xlim=c(0,1),main="Lasso")
    for(i in 1:10)
    	lines(plot_X_2,beta_lasso[,i],lty=linetype2[i],col=color2[i],lwd=2.5)	
    
    legend("bottomleft",lty=c(1,2,3,4), legend=c("Income","Limit","Rating","Student"),col=c("black","red","blue","orange") ,lwd=2.5)
    
    detach(Credit)
    

    论文复刻《基于岭回归和LASSO回归…安徽省财政收入影响因素分析_朱海龙》

    library("readxl")
    data<-read_xlsx("论文复刻数据.xlsx",sheet="data")
    str(data)
    
    
    ##描述统计
    summary(data[2:16])	#描述统计,包括最小值、最大值、中位数、平均数
    
    SD<-c(1:15)*0	#标准差
    for(i in 1:15)	SD[i]<-sd(as.numeric(unlist(data[,i+1])))
    
    #为输出便捷,分别计算最大值、最小值等
    Min<-c(1:15)*0	#最小值
    for(i in 1:15)	Min[i]<-min(data[,i+1])
    
    Max<-c(1:15)*0	#最大值
    for(i in 1:15)	Max[i]<-max(data[,i+1])
    
    Median<-c(1:15)*0	#中位数
    for(i in 1:15)	Median[i]<-median(as.numeric(unlist(data[,i+1])))
    
    Mean<-c(1:15)*0	#平均数
    for(i in 1:15)	Mean[i]<-mean(as.numeric(unlist(data[,i+1])))
    
    describe<-data.frame(Min,Max,Median,Mean,SD)
    rownames(describe)=names(data)[2:16]	#给列命名
    
    write.csv(describe, file = "描述统计结果.csv")
    
    
    
    
    #三、实证分析
    ##(一)多重共线性检验
    ###为了消除异方差的影响,对财政收入数据进行对数化处理。
    logY<-log(data[,2])
    data.log<-data.frame(logY,data[,3:16])
    names(data.log)[1]="logY"
    
    ###标准化处理
    data.s<-data.frame(scale(data.log))
    str(data.s)	
    
    ###对所有变量进行线性回归
    lm<-lm(logY~.,data=data.s)
    result.lm<-summary(lm)
    Coef.lm<-coef(lm)
    
    ###kappa值判断变量间是否具有严重的多重共线性
    kappa<-kappa(lm,exact=T)
    
    ###方差膨胀因子(VIF)检验共线性的强弱
    library(car)
    VIF<-vif(lm)
    
    ##(二)岭回归分析
    library(ridge)
    Ridge<-linearRidge(logY~.,data=data.s)
    result.Ridge<-summary(Ridge)
    Coef.Ridge<-coef(Ridge)
    
    
    ##(三) LASSO 回归分析
    library(lars)
    X<-data.matrix(data.s[,2:15])	
    Lasso<-lars(X,data.s[,1])
    result.Lasso<-summary(Lasso)
    
    
    minCpstep<-which.min(Lasso$Cp)	#哪个Cp最小。应该是第22个(还是21?为何这个会有两个结果,但在下一步不出错?)
    #length(minCpstep)
    
    Coef.Lasso<-coef.lars(Lasso,mode="step",s=minCpstep)	#回归系数。
    
    plot(Lasso)	#图1 LASSO 回归方法下的变量选择
    
    ###筛选出X2、X3、X4、X5、X6、X8、X10、X11、X12、 X13 、X14共 11个变量,再进行线性回归,
    lm.Lasso<-lm(logY~X2+X3+X4+X5+X6+X8+X10+X11+X12+X13+X14,data=data.s)
    result.Lasso.lm<-summary(lm.Lasso)	#通过显著性检验的有X2、X3、X5、X11、X12、X13、X14。
    
    Coef.Lasso.lm<-coef(lm.Lasso)
    
    #结果输出
    ##VIF值输出到表格
    write.csv(VIF,"共线性检验VIF.csv")
    write.csv(kappa,"共线性检验kappa.csv")
    
    
    ##回归系数输出到表格"回归系数.csv"
    Coef<-data.frame(	Coef.lm,
    			Coef.Ridge,
    			"Coef.Lasso"=append(0,Coef.Lasso),
    			"Coef.Lasso.lm"=c(Coef.Lasso.lm[1],0,Coef.Lasso.lm[2:6],0,Coef.Lasso.lm[7],0,Coef.Lasso.lm[8:12]))
    write.csv(Coef,"回归系数.csv")
    
    ##lasso回归结果单独输出到表格"回归结果.csv"
    write.csv(result.Lasso,"Lasso回归结果.csv")
    
    
    ##具体回归结果输出到"回归结果.txt"
    sink("回归结果.txt")
    		cat("\n","简单线性回归=================","\n")
    	print(result.lm)
    
    		cat("\n","\n","共线性检验=================","\n")
    	cat("Kappa=",kappa,"\n")
    	cat("VIF=",VIF,"\n")
    
    		cat("\n","\n","岭回归=================","\n")
    	print(result.Ridge)
    
    		cat("\n","\n","Lasso回归=================","\n")
    	print(result.Lasso)
    
    		cat("\n","\n","Lasso回归结果下的线性回归=================","\n")
    	print(result.Lasso.lm)
    sink()
    
    展开全文
  • R语言岭回归

    千次阅读 2019-11-16 12:44:39
    岭参数的一般选择原则 选择k(或lambda)值,使得: ...这里使用MASS包中的longley数据集,进行岭回归分析(longley数据集中的变量具有显著的多重共线性)。从而分析使用岭回归进行多重共线性的解决。 ...
  • 在我们平时做回归的时候,大部分都是假定自变量和因变量是线性,但有时候自变量和因变量可能是非线性的,这时候我们就可能需要多项式回归了,多项式回归就是自变量和因变量是非线性所做的一个回归模型,其表达式:Y=...
  • 岭回归 岭回归与最小二乘相似,不同之处在于系数是通过最小化略有不同的数量来估算的。像OLS一样,Ridge回归寻求降低RSS的系数估计,但是当系数接近于零时,它们也会产生收缩损失。这种损失的作用是将系数估计值...
  • R语言glmnet拟合岭回归模型(ridge regression)实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、偏差Deviance)
  • 为什么岭回归? 为什么岭回归? 在10倍交叉验证测试中,Ridge回归的准确率约为42%,标准偏差为22%。 但除此之外,我想保持解释性。我使用这个模型作为内在价格的度量,而不是价格预测,所以我想要很容易地理解每...
  • 为了克服时间序列的多重共线性,本人(刚入门)岭回归后,用summary()函数为什么看不到显著性检验及R^2等信息,用VIF()也不能得到VIF值。详情如下:>ridgefeizhu为了克服时间序列的多重共线性,本人(刚入门)岭回归...
  • 相关 视频:Lasso回归、岭回归等正则化回归数学原理及R语言实例 Lasso回归、岭回归等正则化回归数学原理及R语言实例 为什么岭回归比最小二乘更好? 优势在偏差方差中显而易见 。随着λ的增加,岭回归拟合的灵活性...
  • 岭回归模型的介绍 岭回归模型用以解决自变量多于样本量或者自变量之间存在多重线性关系。添加l2正则项(惩罚项),但需要确定参数。 使用glmnet包中的glmnet函数可以确定,而根据cv.glmnet函数则可以实现岭回归...
  • R语言岭回归实现函数

    万次阅读 多人点赞 2019-03-22 09:00:41
    1.利用GCV(广义交叉验证)实现最优岭回归参数选择 #根据GCV方法,获取最佳岭参数k #x:自变量的数据矩阵 #y:响应变量向量或矩阵 #kmax:岭参数的最大值 #qnum:根据0~kmax分成qnum等分 #intT:是否计算矩阵 ...
  • R语言回归

    千次阅读 2021-01-17 05:02:47
    1.回归的多面性回归类型用途简单线性个量化的解释变量来预测一个量化的响应变量(一个因变量、一个自变量)多项式一个量化的解释变量预测一个量化的响应变量,模型的关系是n阶多项式(一个预测变量,但同时包含变量的幂...
  • R语言岭回归和LASSO回归

    千次阅读 多人点赞 2020-06-15 16:09:27
    岭回归和LASSO回归的原理就是在线性回归的基础上添加了2范数和1范数的惩罚项。这两个模型的关键点是找到一个合理的lambda系数,来平衡模型 的方差和偏差,从而得到比较符合实际的回归系数。 二、实验过程 1. 数据...
  • 岭回归R语言

    万次阅读 多人点赞 2019-01-22 15:53:22
    # 做岭回归,对于标准化后的数据模型不包含截距项,其中lambda为岭参数k的所有取值 beta(ridge3.3) # 将所有不同岭参数所对应的回归系数的结果赋给beta beta # 绘制岭迹图 k$lambda #将所有岭参数赋给k plot(k,k,...
  • 有任何建议或疑问,请加 QQ: 1595218767 ,共同探讨学习如R/python代码编程作图等方面需要帮忙,欢迎来店咨询 之恒科技, 挥动热情的小爪爪期待你哦Lasso回归复杂度调整的程度由参数lambda来控制,lambda越大模型复杂度...
  • 套索回归,这个回归模型有些新颖,要写个详细的介绍预计要...所以如何消除多重共线性确定最佳模型,是回归分析的一个重点,我们一般使用的最小二乘法预计在处置惩罚多重共线性上有太大的局限性或者说让人不满意吧,...
  • 收集了2014-2020年连续七年的人均国内生产总值数据和 城镇居民消费数据及农村居民消费数据,做岭回归分析,但是城镇居民变量通不过显著性检验 怎么办?是因为数据太少的原因吗? 如果要分析城乡居民消费对国内生产...
  • 该算法速度快,可以利用输入矩阵x中的稀疏性,拟合线性、logistic和多项式、poisson和Cox回归模型。可以通过拟合模型进行各种预测。它还可以拟合多元线性回归。” 例子 加载数据 这里加载了一个高斯(连续Y)的例子...
  • 介绍 Glmnet是一个通过惩罚最大似然来拟合广义线性...它符合线性,逻辑和多项式,泊松和Cox回归模型。可以从拟合模型中做出各种预测。它也可以适合多响应线性回归。 glmnet算法采用循环坐标下降法,它连续优...
  • 多元线性回归模型的最小二乘估计结果为如果存在较强的共线性,即 中各列向量之间存在较强的相关性,会导致的从而引起对角线上的 值很大并且不一样的样本也会导致参数估计值变化非常大。即参数估计量的方差也增大,对...
  • 本文回答了关于逻辑回归的问题:它与线性回归有什么不同,如何在R中用glm()函数拟合和评估这些模型等等? Logistic回归是机器学习从统计学领域的一种技术。它是用一个或多个解释变量对二项式结果进行建模的一种强大...
  • R语言岭回归xt7.6

    千次阅读 2020-12-05 20:53:27
    第7章 岭回归 7.7 一家大型商业银行有多家分行,近年来,该银行的贷款额平稳增长,但不良贷款额也有较大比例的提高。为弄清楚不良贷款形成的原因,希望利用银行业务的有关数据做定量分析,以便找出控制不良贷款的...
  • 岭回归 岭回归与最小二乘相似,不同之处在于系数是通过最小化略有不同的数量来估算的。像OLS一样,Ridge回归寻求降低RSS的系数估计,但是当系数接近于零时,它们也会产生收缩损失。这种损失的作用是将系数估计值...
  • 为什么岭回归? 为什么岭回归? 在10倍交叉验证测试中,Ridge回归的准确率约为42%,标准偏差为22%。 但除此之外,我想保持解释性。我使用这个模型作为内在价格的度量,而不是价格预测,所以我想要很容易地理解每...
  • R语言使用回归方法解决方差分析问题 线性回归与t检验等价; 线性回归与方差分析等价; 线性回归与协方差分析等价; ANOVA 和回归都是广义线性模型的特例。 案例1 回归分析做ANOVA library...
  • Lasso回归、岭回归等正则化回归数学原理及R语言实例 ,时长13:27 为什么要LASSO套索回归? 套索可以通过选择最小化预测误差的变量子集来帮助选择与结果相关的变量简约子集。 选择模型取决于数据集和您正在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,261
精华内容 504
关键字:

r语言岭回归分析