精华内容
下载资源
问答
  • 毕业时编的线性回归分析原程序,挺好用的,与大家分享享一下
  • R语言与多元线性回归+逐步回归

    千次阅读 2019-11-16 12:31:12
    多元线性回归 多元线性回归的核心问题:应该选择哪些变量??? RSS(残差平方和)与R2 (相关系数的平方)选择法:遍历所有可能的组合,选出使RSS最小,R2最大的模型。 AIC(Akaike Information Criterion)准则与...

    多元线性回归

    多元线性回归的核心问题:应该选择哪些变量???

    • RSS(残差平方和)与R2  (相关系数的平方)选择法:遍历所有可能的组合,选出使RSS最小,R2  最大的模型。
    • AIC(Akaike Information Criterion)准则与BIC(Bayesian Information Criterion)准则

    AIC = n ln (RSSp/n)+2p

    其中:n为变量总个数,p为选出的变量个数(AIC越小越好

    逐步回归

    • 向前引入法:从一元回归开始,逐步增加变量,使指标变量达到最优为止
    • 向后剔除法:从全变量回归方程开始,逐步删去某个变量,使指标到达最优为止
    • 逐步筛选法:综合上述两种方法

    step函数

    image

    根据上图中对该数据集作出的线性回归模型的各个统计量进行分析发现:

    • 在该数据集中的EXAMINATION变量与模型的相关性中没有一个*,从而表示,该变量与该模型没有相关性,可以去除。
    • 模型拟合的相关系数的平方值为:0.7067

    这里使用step函数,R会自动计算原始模型的AIC数值和去除各个变量后AIC的变化情况,从而找到去除模型无关变量,作出更为准确的线性回归模型。

    image

    因为第一次作出的线性回归模型为全变量的模型,所以这里使用step进行逐步回归的时候,只能使用backward或者both方法进行逐步回归。从而得到在去除无关变量EXAMINATION变量后,得到一个拟合效果更好的线性回归模型。

    image

    逐步回归计算实例

    例 6.10 某种水泥在凝固时放出的热量Y(卡/克)与水泥中四种化学成分X1,X2,X3,X4有关,现测得13组数据,如表6.5所示。希望从中选取重要的变量,建立Y关于它们的线性回归方程。

    image

    分析步骤:

    首先作出多元线性回归方程,建立所有变量的回归模型

    image

    从上述建立的回归模型可知,从X1到X4四个变量的“显著性检验”一个*都没有。可见,如果选择全部变量做回归方程,效果是很不好的。

    下面使用函数step()做逐步回归:

    image

    使用step方法处理后的结果如下:

    image

    在使用step函数进行处理的时候,最后一步的操作,无论去掉哪一个变量,AIC值均会升高,因此R软件终止计算,得到了“最优”的回归方程

    可见,现在变量X1,X2,X4的“显著性检验”发生了好转。虽然R2也达到了0.9823,但仍然有不足。在R软件中,还有两个函数可以用来做逐步回归。这两个函数是add1()和drop1():

    image

    从运算结果来看,如果去掉变量X4,AIC值会从24.97增加到25.42,是增加的最少的。另外,除AIC准则外,残差的平方和也是逐步回归的重要指标之一,从直观来看,拟合越好的方程,残差的平方和应越小。去掉X4,残差的平方和上升9.93,也是最少的。因此,从这两个指标来看,应该再去掉变量X4.

    image

    这个结果应该还是满意的,因为所有的检验均是显著的,最后得到“最优”。

    展开全文
  • 线性回归,前面用Python从底层一步一个脚印用两种方法实现了回归拟合。在这个高级语言层出不穷的年代,这样做显然不明智,所以我考虑用优秀的数据分析工具——R语言(不敢说最...
        

    640?wx_fmt=png

    线性回归,前面用Python从底层一步一个脚印用两种方法实现了回归拟合。在这个高级语言层出不穷的年代,这样做显然不明智,所以我考虑用优秀的数据分析工具——R语言(不敢说最优秀,虽然心里是这么想的,我怕有人要骂我!)做回归分析。包括简单多变量回归、逐步回归、逻辑回归!

    对了,上次,用Python写的两篇回归拟合分别是:

    多元回归分析,生活中用的很多,因为一个因素可能与很多其它因素有关!言归正传,这里考虑用R语言里面的相关函数做回归分析。

    需要的用到的知识储备:

    • 线性代数

    • 概率论与数理统计

    • 高等数学

    • R语言基础

    下面分别从普通多元线性回归、逐步回归、逻辑回归进行介绍。前面用Python实现的只是一元回归,由于R语言实现线性回归很方便,所以我会着重介绍原理。

    多元线性回归

    不论是单变量还是多元线性回归分析,他们都是直接或间接(有时候需要通过变量代换)程线性的关系。我们需要找到一个通用的线性模型来描述这种关系,在我们可以接受的误差范围内对数据进行预测或者发现规律。

    多元线性回归理论基础

    对于一组变量数据,如果我们不管是通过画散点图还是其它方法,知道了一个变量与其它变量程很强线性关系。我们就需要知道,到底是什么样的关系,关系系数是多少。通常是用经典的最小二乘法,因为这样算出的确实是最优的系数,可以保证残差平方和最小的优化目标。

    对于一个因变量y,有一组自变量X = (x1,x2,...,xk),x1,x2,...,xk,eps是列向量,考虑它们之间有如下线性关系:

    640?wx_fmt=png

    当然了,这里X = (x1,x2,...,xk),y都是给的一组数据,就像这样

    640?wx_fmt=png

    那么,对每一组(比如第一行)数据,就有如下关系:

    640?wx_fmt=png

    目标函数为残差平方和的关于系数beta0,beta1,...,betak的多元二次函数,我们希望找到一组系数使得目标函数值最小,即误差最小。目标函数如下:

    640?wx_fmt=png

    学过数学分析或者高等数学的人都知道,这只要关于beta0,beta1,...,betak分别求偏导数,得到k+1方程,再求出零点即可。

    我们用矩阵表示各个变量如下:

    640?wx_fmt=png

    那么,学过高等代数(数学专业)或者线性代数(工科)都知道,因变量与自变量关系可以表示为:

    640?wx_fmt=png

    中间推导过程这里不在赘述了,最终系数向量表达式为:

    640?wx_fmt=png

    关于多元线性回归的理论就到这里,有兴趣可以参考:线性回归导论(机械工业出版社 王辰勇 译)

    多元线性回归的R语言实现

    这里用R语言里面的常用数据集iris来说明,这个数据集包含五个指标,我们这里先只用前面四个:花萼长度、花萼宽度、花瓣长度、花瓣宽度,进行多元线性回归分析。

    数据预处理

    大家都知道,为了消除不同变量量纲或者数量级不一致,做数据标准化的数据预处理是有必要的。用到的R语言函数是scale(),这个函数的机理具体公式如下:

    640?wx_fmt=png

    R语言实现如下:

    640?wx_fmt=png

    标准化后数据选择前六行我们看一下:

    > head(sl.sc)

         Sepal.Length

    [1,]   -0.8976739

    [2,]   -1.1392005

    [3,]   -1.3807271

    [4,]   -1.5014904

    [5,]   -1.0184372

    [6,]   -0.5353840

    下面构建多元线性回归

    我们用花萼标准化后的数据sl.sc与其它三个变量做线性回归,先做有常数项的多元回归。

    lm.sc <- lm(sl.sc~sw.sc+pl.sc+pw.sc)

    summary(lm.sc)

    640?wx_fmt=png

    summary(lm.sc)给出了线性回归的相关信息,各个系数Residuals给出了残差的5分位数,Estimate、Std. Error、t value、Pr(>|t|)分别给出了自变量系数、标准误、t值和p值,Multiple R-squared:  0.8586, Adjusted R-squared:  0.8557分别给出了R方与修正的R方,这里 R-squared:  0.8557表示这个线性回归模型可以解释85.57的原数据,还是不错的,后面就不再解释这几个指标的意思了。可以看出无论是每个系数还是总体的p-value都远远小于0.05,给出了三颗星***的等级,但是如图蓝色方框是常数项的值是-1.176e-16,太小了,p值是1,告诉我们常数项可以不用,这些数据是过原点的线性关系。

    去掉常数项的多元回归,不同的是,减一表示不要常数项

    lm.sc <- lm(sl.sc~sw.sc+pl.sc+pw.sc-1)

    summary(lm.sc)

    模型详细情况:

    640?wx_fmt=png

    显然,去掉后R方,F值没有明显变换,系数等级都是三颗星,表明去掉常数项确实在不影响模型情况下简化了模型。

    我们来看一下残差图与QQ图:

    plot(lm.sc,1,col = 'orange',main = '残差图')

    plot(lm.sc,2,col = 'orange',main = 'QQ图')

    640?wx_fmt=png

    640?wx_fmt=png

    通过残差图与QQ图也可以明显看出这个不带常数项的线性回归模型是不错的。

    逐步回归

    逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除。以确保每次引入新的变量之前回归方程中只包含显著性变量。这是一个反复的过程,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止。以保证最后所得到的解释变量集是最优、最简单的。

    逐步回归最常用的挑选准则有修正复相关系数、预测平方和、Cp和AIC等,这里用AIC准则,对于含有P个自变量的回归方程,n为观测值(样本)个数,AIC越小越好,具体计算公式为:

    640?wx_fmt=png

    使用R语言构建逐步回归模型

    知道原理后,我们试图从三个自变量中筛选出两个,首先看一下上述模型的AIC

    step(lm.sc)

    640?wx_fmt=png

    显然,三个变量时AIC是最小的,这里为了说明问题,实在要剔除一个变量的话,当然要剔除第一个。因为我们发现剔除pw.sc时AIC为-272.06,如果剔除pl.scAIC就为-181.26,而AIC越小越好,所以就剔除变量pw.sc吧。

    lm.new <- lm(sl.sc~sw.sc+pl.sc-1)

    summary(lm.new)

    640?wx_fmt=png

    R方稍微减小了一点,因为三个变量AIC最小(即模型最优),提出后肯定会减小的。这里为了说明问题才强行提出一个。

    逻辑回归

    在介绍逻辑回归前我们先介绍什么是哑变量,其实,R语言用的多的人都知道iris这个数据集有5列,第五列是花的分类:setosa、versicolor、 virginica。那么花萼长度是否与花的分类有关呢?一般是有的。增加三列,我们考虑引入0~1变量那么对于属于setosa的,记为1,versicolor、 virginica位置记为0,同理就多了3列,这里的0,1就是哑变量。还是为了减少变量,简化模型,我们只增加2列versicolor和 virginica,这样versicolor、 virginica位置都为0时,就属于setosa这个分类,versicolor位置为1时就为versicolor这个分类。0,1是逻辑变量,线性回归引入了逻辑变量,故称为逻辑回归。

    下面就进行R语言实现,要不看一下iris数据集长什么样:

    640?wx_fmt=png

    第五列变量就有三个水平,都是50条,正好。

    640?wx_fmt=png

    两个for()语句就是构造逻辑变量的,还是很好理解的,这样就有五个变量了。构造的应该像这样:

    640?wx_fmt=png

    这里省略了前面的,只为说明构造的逻辑变量(实际应该是s1里面51~100为1,s2里面101~150为1,其它为0)。看一下结果:

    640?wx_fmt=png

    所有变量系数p-value都小于0.05,R-squared:  0.8627,比没有增加逻辑变量的R-squared:  0.8557好一些,可见花的分类确实对花萼长度sl.sc有关系。最终表达式为:

    640?wx_fmt=png

    猜你可能喜欢

    640?wx_fmt=jpeg

    展开全文
  • 基于王斌会《多元统计分析及R语言建模》第4章第4节逐步回归。主要介绍回归变量的选择方法,涉及变量选择准则,逐步回归分析的步骤,以及算例。
  • 基于王斌会《多元统计分析及R语言建模》第4章第4节逐步回归。主要介绍回归变量的选择方法,涉及变量选择准则,逐步回归分析的步骤,以及算例。
  • 多元统计分析之多元线性回归的R语言实现多元统计分析--multivariate statistical analysis研究客观事物中多个变量之间相互依赖的统计规律性。或从数学上说, 如果个体的观测数据能表为 P维欧几里得空间的点,那么...

    多元统计分析之多元线性回归的R语言实现

    多元统计分析--multivariate statistical analysis

    研究客观事物中多个变量之间相互依赖的统计规律性。或从数学上说, 如果个体的观测数据能表为 P维欧几里得空间的点,那么这样的数据叫做多元数据,而分析多元数据的统计方法就叫做多元统计分析 。

    重要的多元统计分析方法有:多重回归分析、判别分析、聚类分析主成分分析、对应分析、因子分析、典型相关分析、多元方差分析等。

    多元线性回归(普通最小二乘法)

    用来确定2个或2个以上变量间关系的统计分析方法。多元线性回归的基本的分析方法与一元线性回归方法是类似的,我们首先需要对选取多元数据集并定义数学模型,然后进行参数估计,对估计出来的参数进行显著性检验,残差分析,异常点检测,最后确定回归方程进行模型预测。(1)做个简单线性回归热热身

    women#使用自带的woman数据集

    73256c5d7cb5eb7f87086b59a6eee36e.png

    fit

    summary(fit)#展示拟合模型的详细信息

    f93a81ef002ab5822e7ee66fe145d423.png

    women$weight#列出真值

    fitted(fit)#列出拟合模型的预测值

    e0faf1b0472f636e172aa8712bda180a.png

    residuals(fit)#列出拟合模型的残差值

    coefficients(fit)#列出拟合模型的模型参数

    confint(fit)#列出拟合模型参数的置信区间

    anova(fit)#生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表

    0f831a1975921a5cbbc98492840a245b.png

    vcov(fit)#列出拟合模型的协方差矩阵

    0a3d79292dc6282e3d0e0368f6c54b33.png

    par(mfrow=c(2,2))

    plot(fit)

    675e67d54477f104860cd83c14957059.png

    plot(women$height,women$weight,

         xlab="Height (in inches)",

         ylab="Weight (in pounds)")#生成观测,变量散点图

    abline(fit)#给散点图加上拟合曲线

    2fa029fce2461d7f0b16ed158834d30d.png

    (2)多项式回归

    fit2=lm(weight~height+I(height^2),data=women)#I(height^2)表示向预测等式添加一个平方项

    summary(fit2)

    plot(women$height,women$weight,

         xlab="Height (in inches)",

         ylab="Weight (in pounds)")

    lines(women$height,fitted(fit2))

    b02ba95c21a17fa09eb0e1934d43b829.pngc7dbc2226bbf82ee55b5a47b379eaa7b.png

    fit3=lm(weight~height+I(height^2)+I(height^3),data=women)

    summary(fit3)

    lines(women$height,fitted(fit3),col="red")

    b43525dea3adb41fba3ffb197d84a8e3.png87082649fe85ae4d3e19e86fbdd01fdc.png

    #使用car包的scatterplot()函数

    install.packages("car")

    library(car)

    library(carData)

    scatterplot(weight~height,data=women,

                spread=FALSE,smooth.args=list(lty=2),pch=19,

                main="Women Age 30-39",

                xlab="Height (in inches)",

                ylab="Weight (in pounds)")

    #该函数提供了身高与体重的散点图,线性拟合曲线以及平滑拟合曲线(loess),每个轴还展示了两个变量的箱线图。

    b313445f4f7457b14535b55d61cf481b.png

    (3)多元线性回归

    states

    cor(states)#检查一下各变量之间的相关性

    6c9f387aa09efadaaf3a72b327696939.png

    scatterplotMatrix(states,spread=FALSE,smooth.args=list(lty=2),pch=19,main="scatterplot matrix")

    #非对角线位置绘制变量间的散点图,并添加平滑和线性回归图

    #对角线区域绘制每个变量对应的密度图和轴须图

    ff72eb8cf2d8ab50fbcff97eb3ef7b62.png

    #使用lm函数进行没有交互项多元线性回归的拟合

    states

    fit=lm(Murder~Population+Illiteracy+Income+Frost,data=states)

    summary(fit)

    b52ccfdc2546bc10ff7ac0c02a18dcd6.png

    #使用lm函数进行有交互项多元线性回归的拟合

    fit

    summary(fit)

    e93a9eb6f4704bc44b9cb778134ea256.png

    交互项也是显著的,说明相应变量与其中一个预测变量之间的关系依赖于另一个预测变量。

    (4)回归诊断--常规方法

    fit

    par(mfrow=c(2,2))

    plot(fit)

    R vs F图:如果自变量和因变量线性相关,残差值和拟合值之间没有任何系统联系,如果是一条清楚的曲线,可能在暗示要在拟合的时候加上多次项

    正态QQ图:当自变量的值固定时,因变量应该成正态分布,残差值也应该是一个均值为0的正态分布,如果满足假设,图上的点应该都落在一条45度的直线上

    scale-location图:如果满足方差不变的假设,图中水平线周围的点应该随机分布

    Residuals vs leverage图:鉴别离群点,高杠杆值点,强影响点。

    675e67d54477f104860cd83c14957059.png

    加上多次项的拟合结果

    fit2

    par(mfrow=c(2,2))

    plot(fit2)

    879d9068a6b4f4cf39c1be79700947a5.png

    13和15是强影响点,可以去除强影响点。

    fit2

    再对数据集state.x77进行试验

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    fit=lm(Murder~Population+Illiteracy+Income+Frost,data=states)

    par(mfrow=c(2,2))

    plot(fit)

    3e4544349ac2010a33a21617181aa01b.png

    (5)回归诊断--改进方法

    library(car)

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    fit=lm(Murder~Population+Illiteracy+Income+Frost,data=states)

    par(mfrow=c(1,1))

    qqPlot(fit,labels=row.names(states),id.method="identify",simulate=TRUE,main="Q-Q Plot")

    states["Nevada",]

    fitted(fit)["Nevada"]

    residuals(fit)["Nevada"]

    rstudent(fit)["Nevada"]

    a1db86692e5eb2a2e6276dcd2136b67a.pngc7614853096ffe75c77d2e1f7cda3bae.png

    学生化残差

    residplot

      z

      hist(z,breaks=nbreaks,freq=FALSE,

           xlab="Studentized Residual",

           main="Distribution of Errors")

      rug(jitter(z),col="brown")

     curve(dnorm(x,mean=mean(z),sd=sd(z)),add=TRUE,col="blue",lwd=2)

      lines(density(z)$x,density(z)$y,

            col="red",lwd=2,lty=2)

      legend("topright",

             legend=c("Normal Curve","Kernel Density Curve"),

             lty=1:2,col=c("blue","red"),cex=.8)

    }

    residplot(fit)

    c25bbd08dd5cf247c3e9e44a3a9aa732.png

    除了一个很明显的离群点,误差很好地服从了正态分布。

    误差的独立性

    durbinWatsonTest(fit)

    crPlots(fit)

    p值显著说明无自相关性,误差项之间独立。滞后项(lag=1)表明数据集中每个数据都是与其后一个数据进行比较。

    通过成分残差图可以看因变量和自变量之间是否成非线性关系。

    688dfebc360234a767c7fccc540f1880.pngdc58e42a1e72c8b6bd2f120d55ec94f5.png

    同方差性

    ncvTest(fit)

    spreadLevelPlot(fit)

    分布水平图的点随机分布在直线的周围,如假设不正确,将看到曲线。

    下图说明P值不显著,满足方差不变假设

    d609d3435362504b718759ebe7f3c8e8.png

    线性模型假设的综合验证

    install.packages("gvlma")

    library(gvlma)

    gvmodel

    summary(gvmodel)

    下图表示P值都不显著,满足假设条件。

    5c49bb53a95f343fb597615aff0fd692.png

    多重共线性

    library(car)

    vif(fit)

    sqrt(vif(fit))#如果>2,表明存在多重共线性问题

    d5890fe2af78168a74c4e1dbebbda1fd.png

    (6)异常观测值

    a.离群点:预测效果不佳的观测,有很大的或正或负的残差值。正代表模型低估了响应值,负代表模型高估了响应值

    library(car)

    outlierTest(fit)

    返回值Nevada,P值小于0.05,判定为离群点。

           rstudent               unadjusted p-value     Bonferonni p

           Nevada 3.542929         0.00095088     0.047544

    b.高杠杆点:与其他变量相关的离群点

    hat.plot

      p

      n

      plot(hatvalues(fit),main="Index Plot of Hat Values")

      abline(h=c(2,3)*p/n,col="red",lty=2)

      identify(1:n,hatvalues(fit),names(hatvalues(fit)))

    }

    hat.plot(fit)

    5e41c6a6fdc0991d82b098e5d0f1a0d0.png

    c.强影响点:模型估计参数值影响有些比例失衡的点,方法是测量Cook距离,可通过变量添加图得出。

    一般来讲,Cook距离大于4/(n-k-1),表明是强影响点。

    n——样本量大小,K——预测变量数目

    cutoff

    plot(fit,which=4,cook,levels=cutoff)

    abline(h=cutoff,lty=2,col="red")

    下图中高于水平线的是强影响点

    d6de2a1b02945eb8095736f635ffe891.png

    d.变量添加图:三种点都可以显现出来

    library(car)

    avPlots(fit,ask=FALSE,id.method="identify")

    00ef59878d989f2c4b7f4d3a5a42e84f.png

    整合到一张图

    library(car)

    influencePlot(fit,id.method="identify",main="Influent Plot",

                  sub="Circle size is proportional to Cook's distance")

    纵坐标超过正负2的被认为是离群点,水平轴超过0.2或0.3的被认为是高杠杆点,圆圈大的被认为是强影响点。

    8d44b83dc3c51f0fa90d543607e26236.png

    (7)处理违背回归假设的问题

    a.删除变量:离群点和强影响点

    b.变量变换:当模型违反正态假设时

    library(car)

    summary(powerTransform(states$Murder))

    4ae3203ade0cd5dc426a1d48045c7e3e.png

    结果表明可以用Murder^0.6来正态化Murder,该函数使用极大似然法正态化变量

    library(car)

    boxTidwell(Murder~Population+Illiteracy,data=states)

               MLE of lambda  Score Statistic (z) Pr(>|z|)

    Population   0.86939             -0.3228   0.7468

    Illiteracy       1.35812              0.6194   0.5357

    iterations =  19 

    结果显示使用Population0.86939和Illiteracy1.35812可以大大改善线性关系。但对二者的记分检验又表明不会不需要变换。p值比较大。

    c.增删变量:改变模型的变量数目可以影响变量的拟合优度——多重共线的变量要删掉

    (8)选择最佳的回归模型

    a.模型比较:

    a1. anova()函数,需要模型嵌套

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    fit1=lm(Murder~Population+Illiteracy+Income+Frost,data=states)

    fit2=lm(Murder~Population+Illiteracy,data=states)

    anova(fit1,fit2)

    28adaeb8be5768a6a7d36dfdfabc182a.png

    anova将两个回归模型进行比较,p值(0.9939)不显著,所以不需要加到模型中。

    a2. AIC(赤池信息准则):考虑模型的统计拟合优度,AIC值小的要优先选择。

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    fit1=lm(Murder~Population+Illiteracy+Income+Frost,data=states)

    fit2=lm(Murder~Population+Illiteracy,data=states)

    AIC(fit1,fit2)

            df      AIC

    fit1  6   241.6429

    fit2  4   237.6565

    根据AIC值选择fit2,不需要模型嵌套。

    b.变量选择:

    b1. 逐步回归法:模型每次增加(向前)或者删除(向后)一个变量,直到达到某个判停条件为止。

    library(MASS)

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    fit=lm(Murder~Population+Illiteracy+Income+Frost,data=states)

    stepAIC(fit,direction = "backward")

    40a876967664111af635eb9f6176a7f8.png

    开始模型删除一个变量之后,AIC值降低,再删除一个变量之后,AIC值变低,最后剩下两个变量。弊端:不能找到最佳的

    b2. 全子集回归法:所有可能的模型都会被检验。

    install.packages("leaps")

    library(leaps)

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    leaps=regsubsets(Murder~Population+Illiteracy+Income+Frost,data=states,nbest=4)

    leaps

    plot(leaps,scale="adjr2")

    7e304e6ab60be3cd9b09d5c631c45d79.png

    图中的0.33表示截距项与income变量模型调整R平方0.33,可以看出截距项和P和I的调整模型R平方和最大,模型最佳

    or:

    library(car)

    subsets(leaps,statistic="cp",main="Cp Plot for All Subsets Regression")

    abline(1,1,lty=2,col="red")

    d0c0349844c925d836381f3fd5d189cd.png

    越好的模型离截距和斜率都为1的红线最近。

    (9)深层次分析

    a.交叉验证:最小二乘法的目的时预测误差(残差)平方和最小,响应变量解释度(R平方)最大化,交叉验证法可以评定该回归模型的泛化能力。

    定义:将一定的数据挑选出来作为训练样本,其他的数据作为保留样本,现在训练样本中做回归,再在保留样本中做预测

    install.packages("bootstrap")

    library(bootstrap)

    shrinkage

      require(bootstrap)

      theta.fit

        lsfit(x,y)

      }

      theta.predict

      x

      y

      results

      r2

      r2cv

      cat("Original R-square=",r2,"\n")

      cat(k,"Fold Cross-Validated R-square=",r2cv,"\n")

      cat("Change=",r2-r2cv,"\n")

    }

    states

    fit

    shrinkage(fit)

    结果:

    Original R-square= 0.5669502 

    10 Fold Cross-Validated R-square= 0.4642092 

    Change= 0.1027411 

    验证后的R值更客观,验证前过于乐观,R值较大。

    fit2

    shrinkage(fit2)

    验证前后R方变化不大,说明模型预测较为精确。

    b.相对重要性:比较标准化回归系数,表示当其他预测变量不变时,该预测变量一个标准差的变化可yying引起响应值的变化。

    在回归分析前,先将数据集用scale函数标准化为均值为0,标准差1的矩阵,再转化为数据框进行回归分析。

    states=as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

    zstates=as.data.frame(scale(states))

    zfit=lm(Murder~Population+Illiteracy+Income+Frost,data=ztates)

    coef(zfit)

    结果:

      (Intercept)    Population    Illiteracy        Income         Frost 

    -2.054026e-16  2.705095e-01  6.840496e-01  1.072372e-02  8.185407e-03 

    结果显示:人口和文盲率对谋杀率的影响很大,而Frost的影响率很小。

    c.相对权重法:将相对重要性看成是每个预测变量对R平方的贡献大小。

    relweight

      R

      nvar

      rxx

      rxy

      svd

      evec

      ev

      delta

      lambda

      lambdasq

      beta

      rsquare

      rawwgt

      import

      import

      row.names(import)

      names(import)

      import

      dotchart(import$Weights,labels = row.names(import),

               xlab="% of R-Square",pch=19,

               main="Relative Importance of Predictor Variables",

               sub=paste("Total R-Square=",round(rsquare,digit=3))

      )

    }

    states

    fit

    relweight(fit,col="grey")

    df64c82db953c3801711b61013dfa2ac.png

    结果显示,文盲率对谋杀率的影响最大,其次是结冰率。

    展开全文
  • 多元线性回归

    千次阅读 2018-04-05 13:30:55
    什么是多元线性回归?  在线性回归分析中,如果有两个或两个以上的自变量,就称为多元线性回归(multivariable linear regression)。如果我们要预测一套房子的价格,影响房子价格的因素可能包括:面积、卧室数量...

    什么是多元线性回归?

      在线性回归分析中,如果有两个或两个以上的自变量,就称为多元线性回归(multivariable linear regression)。如果我们要预测一套房子的价格,影响房子价格的因素可能包括:面积、卧室数量、层数以及房龄,我们用x1、x2、x3、x4来代表这4个特征(features)。在这里,我们假设房子的价格和这4个特征值都是线性相关的,并且用hθ来表示预测房子的价格,那么有:
    hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4
    其中θ为线性回归中的参数。我们把x、θ分别表示为列向量的形式:

    θ=(θ0,θ1,θ2,θ3,θ4)T
    x=(1,x1,x2,x3,x4)T
    那么我们可以发现
    hθ(x)=θT∙x

    如何实现多元线性回归?

    对于拥有n个特征值、m个数据样本的数据,我们可以用一个m*(n+1)矩阵的形式表示出来,其中矩阵的每一行(即x(i))为一个数据样本,每一列代表一个特征值,xj(i)代表第i个数据样本中第j个特征值(x0(i)=1)

    X=⎛⎝⎜⎜⎜⎜⎜⎜⎜111⋮1x(1)1x(2)1x(3)1⋮x(m)1x(1)2x(2)2x(3)2⋮x(m)2⋯⋯⋯⋯⋯x(1)nx(2)nx(3)n⋮x(m)n⎞⎠⎟⎟⎟⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜⎜⎜⎜x(1)Tx(2)Tx(3)T⋮x(m)T⎞⎠⎟⎟⎟⎟⎟⎟⎟
    样本的实际值(对于房价预测来说就是房价)用y来表示:

    y=(y1,y2,…,ym)T
    线性回归参数θ为:

    θ=(θ0,θ1,…,θn)T
    接下来我们定义代价函数Jθ(cost function)为:

    Jθ(X)=12m∑i=1m(hθ(x(i))−y(i))2=12m∑i=1m(θT∙x(i)−y(i))2=12m∑i=1m(x(i)T∙θ−y(i))2
    我们还可以把Jθ利用矩阵表达,获得更为简洁的形式

    Jθ(X)=12m(X∙θ−y)T∙(X∙θ−y)
    现在,我们只需要让代价函数Jθ最小,就能得到最优的θ参数。那么,要怎样才能使Jθ最小呢?有两个办法,一个是梯度下降法(gradient descent),一个是标准方程法(norm equation)。

    Jθ在样本数据X确定时,是关于θ的一个函数,而θ是一个(n+1)维的列向量,也就是说Jθ其实是一个(n+1)元函数。学过微积分的人应该知道,要求一个多元函数的极值,可以令多元函数对每个未知元的偏导数为0,从而求出未知元,再代入函数中,便可求出函数的极值。同样地,我们现在要求Jθ的极值,那么就要先使Jθ关于θ的偏导数,或者说关于θ0、θ1、θ2、…、θn的偏导数都为0。

    Jθ对θj的偏导数为:

    δJδθj=1m∑i=1m(x(i)T∙θ−y(i))x(i)j=1m(x(1)jx(2)j⋯x(m)j)∙(Xθ−y)
    则Jθ对θ的偏导数为:

    δJδθ=⎛⎝⎜⎜⎜⎜⎜⎜δJδθ0δJδθ1⋮δJδθn⎞⎠⎟⎟⎟⎟⎟⎟=1m⎛⎝⎜⎜⎜⎜⎜1x(1)1⋮x(1)n1x(2)1⋮x(2)n⋯⋯1x(m)1⋮x(m)n⎞⎠⎟⎟⎟⎟⎟(Xθ−y)=1mXT(Xθ−y)

    梯度下降法

    梯度下降法的思想是一点点、逐步靠近极小值,通过多次迭代,不断更新θ的值,让代价函数Jθ收敛于极小值。迭代的公式为:
    这里写图片描述
    上述理论参考:https://www.cnblogs.com/magic-girl/p/mutivariable-linear-regression.html

    代码实现:
    准备数据:
    这里写图片描述
    可以将以上数据保存在Delivery.csv中。
    我们想要根据以上数据预测103, 7 所对应的y值。

    from numpy import genfromtxt
    import numpy as np
    from numpy.linalg import pinv
    
    dataPath = r"Delivery.csv"
    # 加上r就会将后面当做一个完整的字符串,而不会认为里面有什么转义之类的。
    deliveryData = genfromtxt(dataPath, delimiter=',')
    
    print("data")
    print(deliveryData)
    
    x = deliveryData[:, :-1]
    y = deliveryData[:, -1]
    
    print("x: ")
    print(x)
    print("y: ")
    print(y)
    #一维numpy数组转置方法
    y = y.reshape(len(y),-1)
    print(y)
    
    # 标准方程法(Normal Equation)
    # theta = pinv(x.T.dot(x)).dot(x.T).dot(y)
    
    # 梯度下降法(Gradient Descent)
    #δJδθ=1/mXT(Xθ−y)
    def partial_derivative(X, theta, y):
        print(X.shape, theta.shape, y.shape)
        print(X.T.dot(X.dot(theta) - y))
        derivative = X.T.dot(X.dot(theta) - y) / X.shape[0]
        print(derivative)
        return derivative
    
    
    def gradient_descent(X, y, alpha=0.0001):
        print(X.shape[1])
        theta = np.ones(shape=X.shape[1], dtype=float)
        theta = theta.reshape(len(theta), -1)
        partial_derivative_of_J = partial_derivative(X, theta, y)
        while any(abs(partial_derivative_of_J) > 1e-5):
            theta = theta - alpha * partial_derivative_of_J
            print("theta.shape", theta.shape)
            partial_derivative_of_J = partial_derivative(X, theta, y)
        return theta
    
    
    theta = gradient_descent(x, y)
    print(theta)
    # print(theta.shape)
    
    # 预测一个例子
    xPred = np.array([103, 7])
    # print(xPred.shape)
    print(xPred)
    # hθ(x)=θT∙x
    yPred = theta.T.dot(xPred)
    print("predicted y:")
    print(yPred)
    #[ 11.32750806]
    

    这里写图片描述
    运行后的结果为11.32750

    展开全文
  • 能够解决逐步线性回归的matlab程序。能够输出回归方程(回归方程系数),输出引入的自变量,能够检验回归效果。进行了显著性检验,包括总离差平方和、回归平方和、残差平方和。
  • 多元线性回归建模 文章大纲 (Article Outline) Dataset description 数据集描述 Exploratory data analysis 探索性数据分析 A simple linear regression model fitting 简单的线性回归模型拟合 Model interpretation...
  • SPSS多元线性回归输出结果的详细解释

    万次阅读 多人点赞 2017-06-27 17:41:05
    最近做了一些用SPSS进行线性回归的实验,还是感觉很多细节把握不好,这里结合我的实验结果,以及网上别人的介绍总结一下,先贴几张SPSS的输出: 下面简单解释一下这三张图中的结果: 第一个表模型汇总表中,...
  • 分析气象和环境因子,需要提供R语言的多元线性逐步回归模型的程序完整代码?
  • 在这种情况下可用逐步回归分析,进行x因子的筛选,这样建立的多元回归模型预测效果会更好。 可以解决的实际问题: 收入水平与受教育程度、所在行业、工作 年限、工作种类的关系。 公路客运量与人口增长量、私家...
  • 多元线性回归总结

    万次阅读 2018-10-26 10:51:45
    1.多元线性回归模型 1.1多元线性回归形式 相对上一篇文章之中的一元线性回归多元线性回归的主要特点是,自变量不再是一组数据,而是由多于一组以上的数据作为自变量。所以,多元线性回归的模型形式为: 其中...
  • 原始数据在这里 1.观察数据 首先,用Pandas打开数据,并进行观察... 以上这篇关于多元线性回归分析——Python&SPSS就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。 时间: 2020-02-23
  • R多元线性回归

    千次阅读 2016-05-31 15:56:18
    多元线性回归 统计建模与R软件-薛毅书p325 选择自变量 建立多元线性模型 > data(swiss) > s=lm(Fertility~ .,data=swiss) #除因变量Fertility其他所有当自变量 > print(s) 模型汇总信息 > summary(s) #查看相关性...
  • 参考书籍:1、《应用多元统计分析》高惠璇 1、表达式 用来研究因变量Y和m个自变量的相关关系(一共有n个样本,) 矩阵表示为: 记为或 2、回归方程和回归系数的显著性检验 2.1 回归方程的显著性检验(又...
  • 上期我们分享了,有同学留言想了解matlab多元线性回归,安排!回归分析(regressionanalysis)回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。回归分析按照涉及的变量的多少...
  • SAS进行多元线性回归

    千次阅读 2012-09-12 21:13:49
    多元线性回归方程重要方法是转化为线性回归方程.转化时应首先选择适合的非线性回归形式,并将其线性化。对于实际问题,首先应对原始数据进行作图或通过观察,选择适当函数进行拟合。 已知1978~2006年全国GDP(y)...
  • 关于线性回归的分析思路及操作步骤,可阅读下方链接文章:①问题一:SPSSAU多元线性回归在哪儿?【通用方法】--【线性回归】。当考察一个自变量对因变量的影响称为一元线性回归,多于一个自变量的情况称为多元线性...
  • 经典线性模型自变量的线性预测就是因变量的估计值。 广义线性模型:自变量的线性预测的函数是因变量的...1.线性回归原理 其中,为偏置参数,M为特征数目,为基函数(径向基函数(rbf)、sigmoid基函数等), 特...
  • 本文使用 R 语言,对各个影响因素的相关性进行了筛选分析,并采用逐步回归法得到了最优的多元线性回归模型。在讨论中,对线性回归模型的回归显著性以及拟合优度进行了检验,最后使用最优的多元线性回归模型对波士顿...
  • 多元线性回归-EViews

    千次阅读 2019-09-25 18:42:20
    分享经典书籍:A Modern Approach to Regression with R....多元线性回归 掌握多元线性回归模型的估计方法、掌握多重共线性模型的识别和修正。 多元线性回归模型,并识别和修正多重共线性。 普通最小二乘法、简单...
  • 4、spss做多元线性回归

    千次阅读 2015-04-15 15:19:34
    回归一直是个很重要的主题。因为在数据分析的领域里边,模型重要的也是主要...本文主要讨论多元线性回归(包括一般多元回归,含有虚拟变量的多元回归,以及一点广义差分的知识)。请大家不要觉得本人偷奸耍滑,居然只有
  • 基于Sklearn库中的逐步线性回归

    千次阅读 2019-04-23 22:49:21
    首先介绍一下多元线性回归思想:在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行...
  • 多元线性回归分析理论详解及SPSS结果分析

    万次阅读 多人点赞 2017-05-17 16:23:23
    当影响因变量的因素是多个时候,这种一个变量同时与多个变量的回归问题就是多元回归,分为:多元线性回归多元线性回归。这里直说多元线性回归。对比一元线性回归: 1.1多元回归模型: y=β0+β1x1+β2x2+…+β...

空空如也

空空如也

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

多元逐步线性回归