精华内容
下载资源
问答
  • 一元回归分析r语言代码

    千次阅读 2015-09-29 20:30:24
    shuju shuju #建立数据 attach(shuju) plot(x,y,main="签发的新保单数目对每周加班时间...summary(shuju.reg) #(3)最小二乘估计(4)求回归标准误差(6)x与y的决定系数(8)回归系数的显著性检验 abline(shuju.reg,
    shuju<-data.frame(x=c(825,215,1070,550,480,920,1350,325,670,1215),y=c(3.5,1,4,2,1,3,4.5,1.5,3,5))
    shuju  #建立数据


    attach(shuju)
    plot(x,y,main="签发的新保单数目对每周加班时间的影响")  #(1)画散点图(2)看x与y是否存在线性关系


    shuju.reg<-lm(y~x)
    summary(shuju.reg)  #(3)最小二乘估计(4)求回归标准误差(6)x与y的决定系数(8)回归系数的显著性检验
    abline(shuju.reg,col=2,lty=2) #拟合直线


    confint(shuju.reg)   #(5)回归系数的区间估计


    anova(shuju.reg)  #(7)对回归方程作方差分析
    cor.test(x,y)  #(9)相关系数的显著性检验
    plot(x,shuju.reg$residuals)  #(10)画残差图


    shuju.pred1<-predict(shuju.reg,newdata=data.frame(x=1000))  #(11)预测y0
    shuju.pred1
    shuju.pred2<-predict(shuju.reg,newdata=data.frame(x=1000),interval='prediction')  #(12)y0的预测区间
    shuju.pred2
    shuju.conf3<-predict(shuju.reg,newdata=data.frame(x=1000),interval='confidence')  #(13)Ey0的置信区间
    shuju.conf3
    detach(shuju)
    展开全文
  • UA MATH571A R语言回归分析实践 一元回归1 NBA球员的工资基础回归分析 571A另一个系列的文章介绍了回归分析的理论,这个系列的文章介绍R语言回归分析的实践,但不会涉及R语言编程,只是介绍回归分析需要的命令、...

    UA MATH571A R语言回归分析实践 一元回归1 NBA球员的工资

    571A另一个系列的文章介绍了回归分析的理论,这个系列的文章介绍R语言做回归分析的实践,但不会涉及R语言编程,只是介绍回归分析需要的命令、怎么输入以及怎么解释输出。

    NBA球员的draft number与他们的工资之间是有一定的关系的。NBA Draft简单理解就是球队pick心仪的新球员,players selected number 1 overall相当于就是C位,比如2002年的C位就是姚明,他的draft number就是1。所以我们的一个直觉就是新球员的draft number越小(名次越高),他的工资就应该越高。在这个系列的博文中,我们用2017-2018 NBA draft的数据为例,来验证一下我们的直觉,这个数据我上传了的,需要的话可以找来下载。

    基础回归分析

    首先读取数据,先简单看一下数据在excel里面的样子
    在这里插入图片描述

    setwd("D:/Stat PhD/taking course/summer1/ref/regression")
    Data <- read.csv("Salary1.csv", header = TRUE, sep = ",", quote = "\"",
             dec = ".", fill = TRUE, comment.char = "")
    X <- as.numeric(Data[,2])
    Y <- as.numeric(Data[,3])
    

    自己尝试的时候记得用setwd修改工作目录,读取数据的时候如果数据存在工作目录下read.csv第一个输入的位置可以直接写filename不用写文件的路径,如果数据没有存在工作目录下的,就要把文件的路径写完整。这个文件读进来以后可能是变量类型是char,要做回归的话用as.numeric转成num就可以了。

    接下来用lm命令做线性回归就可以了,lm是R语言估计线性模型的函数。第一条命令做工资关于名次的回归,把结果存在ureg01.lm中,第二行输出结果的一些总结信息。

    > ureg01.lm <- lm(Y~X)
    > summary(ureg01.lm)
    
    Call:
    lm(formula = Y ~ X)
    
    Residuals:
         Min       1Q   Median       3Q      Max 
    -9901919 -4761884 -1586787  2215989 27551106 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept) 10285438     440112   23.37   <2e-16 ***
    X            -139730      11404  -12.25   <2e-16 ***
    ---
    Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1
    
    Residual standard error: 6365000 on 649 degrees of freedom
    Multiple R-squared:  0.1879,	Adjusted R-squared:  0.1866 
    F-statistic: 150.1 on 1 and 649 DF,  p-value: < 2.2e-16
    

    第二行以下的内容就是回归结果的总结。call后面这个是回归命令,公式是Y~X,意思就是我们执行了Y关于X的回归。residual后面的是残差的描述性统计,从左到右分别是残差的最小值、25%分位点,中位数,75%分位点以及最大值。Coefficients后面是系数的估计,一元回归只有截距项和解释变量X的系数。第一列是系数的估计值,10285438在这个问题下面的解释是如果有第0名存在,那么工资估计就是这么多,-139730表示名次每降一名,工资平均会降139730,也就是说我们之前的直觉是对的,名次越低工资越低。第二列是系数的估计量的方差,第三列是系数估计量的t统计量,第四列是系数估计量的t检验的p值,这里的t检验原假设是系数为0,因为这两个p值都非常小,所以我们可以很自信地拒绝原假设,认同名次越低工资也会越低的假设。倒数第三行是残差的标准误(标准差)以及相应的自由度,这里一共有651个样本,所以总自由度是650,回归模型占一个自由度,所以误差自由度是649。倒数第二行是R方的结果,第一个R方是多元回归的R方,就是根据残差平方和、回归平方和以及自由度调整计算出来的,一般看这个R方就可以了,这个0.1879表示这个一元线性回归模型可以解释18.79%的工资的变化(也就是说这个模型解释力其实很低,名次对于球员工资没有主要的解释力);第二个R方是考虑到只要我们不断增加解释变量,第一个R方根据定义的话它就会不断变大,但这种变大没有意义,因为模型可能是过拟合的状态,所以第二个R方相对于第一个会把模型的复杂度考虑进去,在第一个R方的基础上,模型越复杂,第二个R方就会越小。最后一行是对模型整体的检验,它的原假设是截距与X的系数都为0,这里F统计量是150.1,自由度是1和649,p值非常小,说明我们可以拒绝原假设,认为并非截距和X的系数都是0,也就是说这个模型还是有意义的。

    现在我们有了第一个解释球员工资的模型,它可以用回归方程表示出来:
    Y^=10285438139730X\hat{Y} = 10285438-139730X
    用这个模型我们可以做一些简单的拟合与预测。如果某位球员名次是43名,根据这个模型我们可以估计他的工资应该是

    > predict(ureg01.lm,newdata = data.frame(X=43),interval = "conf",level = 0.95)
          fit     lwr     upr
    1 4277046 3726681 4827410
    

    用来做拟合和预测的都是predict函数,输入第一项是模型对象,我们这个问题的模型对象就是之前估计得到的ureg01.lm,输入第二项newdata = 后面要接的类型数据框,需要用data.frame做一个转换,第三项是选择区间估计的类型,在做predict的时候,区间估计类型有两种,拟合和预测,拟合用conf表示,预测用predict表示,同样的置信水平下拟合的置信区间更短,因为预测会把新样本也看成是随机变量,会让Y的估计值方差更大。第四项是置信水平。输出第一列是fit,也就是拟合值,如果某球员名次是43,那么根据模型估计的工资就是4277046,置信区间是[3726681,4827410],也就是说我们有95%的把握他的工资会在这个区间内。

    再多提一下这个数据框,因为不用数据框或者用的数据框和模型对象的不一致就会报错,如果是多个待拟合对象,我们也要用data.frame把它变成数据框,

    > predict(ureg01.lm,newdata = data.frame(X=c(43,44)),interval = "conf",level = 0.95)
          fit     lwr     upr
    1 4277046 3726681 4827410
    2 4137316 3576386 4698245
    

    现在讨论预测,假设有一个球员名次是43名,想要预测他的工资大概是多少,我们也用predict,只是区间估计命令换成pred

    > predict(ureg01.lm,newdata = data.frame(X=43),interval = "pred",level = 0.95)
          fit      lwr      upr
    1 4277046 -8232809 16786901
    

    可以发现第一列的结果和拟合是一样的,只是区间估计的结果不一样了,相同的置信水平下,预测的置信区间会比拟合的更大,但如果这名球员是没有被估计模型的样本包括在内的,一般我们还是需要用预测的。

    展开全文
  • UA MATH571A R语言回归分析实践 一元回归3 NBA球员的工资残差分析正态性、同方差性的检验欠拟合检验 前两讲已经完成了大致的分析了,我们已经明确了NBA球员名次与工资的负相关关系,接下来我们对一元线性回归模型做...

    UA MATH571A R语言回归分析实践 一元回归3 NBA球员的工资

    前两讲已经完成了大致的分析了,我们已经明确了NBA球员名次与工资的负相关关系,接下来我们对一元线性回归模型做个诊断,看看为什么它的解释力很弱。

    残差分析

    做残差分析以前,我们先来看看解释变量X,这里就看看点图和序列图

    dotchart(X)# dot plot
    I <- c(1:651) # 651 is the sample size
    plot(I,X,type = "l")# sequence plot
    

    在这里插入图片描述
    这个点图告诉我们两个信息,第一个信息是Draft Number是62的选手未必太多了点,这是很典型的删失数据的特征,计量经济学告诉我们应该用Tobit模型来分析这种数据;第二个信息是一个X的值可能对应多个Y的值,这说明数据存在replicate,我们有理由怀疑一元线性回归是欠拟合的。考虑到这个是讲回归分析的文章,就先不介绍Tobit模型怎么处理这个例子了,但之后我们需要做一个欠拟合检验,看看一元线性回归是不是真的欠拟合。

    在这里插入图片描述
    这个序列图不存在什么特别的模式,我们可以借此排除掉序列相关性。

    看完解释变量的特征后,我们再来看看残差的特征。

    plot(resid(ureg01.lm)~I,type = "l")
    abline(h=0)
    

    在这里插入图片描述
    这是残差的序列图,里面也没有很神奇的模式,所以残差也是不存在序列相关的。解释一下plot函数,比如想画X关于Y的图第一个输入可以是Y~X,也可以是X,Y。resid函数会返回模型对象的残差,也可以用ureg01.lm$residuals代替,那个$就是访问模型对象的某个属性。abline是辅助线的命令,h=0表示是截距为0的水平线。

    plot(resid(ureg01.lm)~X)
    abline(h=0)
    

    在这里插入图片描述
    这个是残差关于解释变量的图,我们能看出两个信息:62那个位置存在删失、已经存在一个明显的非线性的模式,因此模型关于X很可能不应该是线性的。删失先按下不表,关于模型关于X非线性的问题,我们之后可以做一个Box-Cox变换来解决。

    plot(resid(ureg01.lm)~fitted(ureg01.lm))
    abline(h=0)
    

    在这里插入图片描述
    这个是残差关于拟合值的图,它能告诉我们的信息和残差关于X的差不多,就不细说了。但残差图中的这种模式还说明残差可能并不具有同方差的性质,我们有必要再做一个同方差检验判断一下。plot中用了一个resid,它返回一个模型对象的拟合值,也可以用ureg01.lm$fitted.values代替。

    正态性、同方差性的检验

    先做一个QQ图来看一下

    qqnorm(ureg01.lm$residuals)
    

    在这里插入图片描述
    比较明显,这个完全不是线性关系,基本可以否定残差是服从正态分布的,为了保险起见,还是做一下假设检验看看。用Shapiro检验

    > shapiro.test(resid(ureg01.lm))
    
    	Shapiro-Wilk normality test
    
    data:  resid(ureg01.lm)
    W = 0.85832, p-value < 2.2e-16
    

    发现p值非常小,可以显著拒绝原假设(正态性检验的原假设是服从正态分布),认同残差的确不服从正态分布。

    关于残差的分布还需要做一下同方差检验,一般用Brown-Forsythe检验就可以。为了做这个检验,我们需要先下载一个包,

    install.packages("car")
    

    做这个检验的思路其实是把样本分成不同的group,检验是不是所有group的残差都是同方差的,只要有任意两个group残差不是同方差的,那么同方差假设就不成立,一般分类可以依据之前画的残差图来分类。这里我就简单分两类,把名次在30以内的分为一类,在30以外的分为另一类,也就是第三行,分好类别忘了把类别用as.factor变成一个factor。然后用car包中的levene检验的函数来做检验,输入的时候残差需要根据X排序。根据p值,我们可以拒绝原假设(同方差),所以同方差的确是不成立。

    > library(car)
    > ei <- resid(ureg01.lm)
    > G<-(X<30)[order(X)]
    > group<-as.factor(G)
    > BF.htest <- leveneTest(ei[order(X)],group)
    > BF.htest
    Levene's Test for Homogeneity of Variance (center = median)
           Df F value    Pr(>F)    
    group   1  48.474 8.218e-12 ***
          649                      
    ---
    Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1
    

    欠拟合检验

    接下来我们需要验证一下模型是不是欠拟合了,我们用lack-of-fit ANOVA来完成这个检验。因为存在replicate,所以full model应该是factor model,reduced model才是一元线性回归。第一行就是估计factor model的code,只需要把X变成factor(X)就好,然后用ANOVA分析这两个模型,注意是reduced model的模型对象在前,full model的在后。看ANOVA的那个p值,在0.1的显著性水平下我们应该拒绝原假设,即full model和reduced model还是有差别的,模型存在欠拟合,我们应该用full model;在0.05或者0.01的显著性水平下,我们不能拒绝原假设,即两种模型没有差别。

    > fmodel.lm <- lm(Y ~ factor(X))
    > anova(ureg01.lm,fmodel.lm)
    Analysis of Variance Table
    
    Model 1: Y ~ X
    Model 2: Y ~ factor(X)
      Res.Df        RSS Df  Sum of Sq      F  Pr(>F)  
    1    649 2.6290e+16                               
    2    591 2.3267e+16 58 3.0227e+15 1.3238 0.06068 .
    ---
    Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1
    

    最后总结一下我们诊断出的这个模型存在的问题:

    1. 工资关于名次存在负相关,但可能不是线性关系;
    2. 残差独立同分布,但不是正态分布;并且同方差假设也不成立;
    3. 模型存在replicate,一元线性回归有欠拟合的风险
    展开全文
  • UA MATH571A R语言回归分析实践 一元回归2 NBA球员的工资方差分析相关性分析 上一讲完成了解释NBA球员工资的一个简单的一元线性回归模型的估计、分析,展示了一下简单的预测,这一讲我们的问题是一元线性回归模型够...

    UA MATH571A R语言回归分析实践 一元回归2 NBA球员的工资

    上一讲完成了解释NBA球员工资的一个简单的一元线性回归模型的估计、分析,展示了一下简单的预测,这一讲我们的问题是一元线性回归模型够好了吗?上一讲做出来的结果所反映的主要的问题是系数是显著不为0的(非常小的p值),但模型的解释力不高(只有18%多一点的解释力)。这一讲我们希望先验证一下球员Draft Number和工资之间的负向关系是不是真的存在,如果真的存在的话,我们希望解释为什么名次对工资的解释力会很低,是因为数据并非线性关系还是正态假设不成立?

    方差分析

    首先我们用方差分析看看工资的信息都到哪里去了,对回归用ANOVA分析我们只需要用R语言的anova函数输入模型对象就可以了,

    > anova(ureg01.lm)
    Analysis of Variance Table
    
    Response: Y
               Df     Sum Sq    Mean Sq F value    Pr(>F)    
    X           1 6.0811e+15 6.0811e+15  150.12 < 2.2e-16 ***
    Residuals 649 2.6290e+16 4.0508e+13                      
    ---
    Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1
    

    我们这个回归模型解释变量是X,它占一个自由度,一共651个样本,也就是650个自由度,所以残差占649个自由度,这是第一列df告诉我们的信息。第二列是平方和的分解,第一个数是回归平方和,第二个数是残差平方和,平方和也可以理解成被解释变量,也就是球员工资的信息,很显然在这个一元线性回归中,解释变量X能解释的信息比残差中的信息少一个数量级,大部分信息模型都解释不了,都在残差中了。第三列就是第二列除以对应的第一列,是自由度调整以后的平方和,第四列是F统计量,这个F统计量就是上一讲回归结果中最后那一行的F统计量,只是ANOVA给出了这个统计量的计算细节,它等于第三列的第一个数除以第二个数。最后一列是F统计量的p值。方差分析的结果是对R方告诉我们的信息,即名次对工资的解释力不足的更细致的说明。

    相关性分析

    相关性分析与回归的逻辑不一样,相关性分析把两个变量都看成随机变量,分析他们的相关性系数。

    > alpha <- .05
    > N <- length(Y)
    > r12 <- cor(X,Y)
    > r12
    [1] -0.4334236
    > t <- r12*sqrt(N-2)/sqrt(1-r12^2)
    > t
    [1] -12.25232
    > t < -qt(1-alpha/2,N-2)
    [1] TRUE
    > p <- pt(t,N-2)
    > p
    [1] 1.70131e-31
    

    先用PPMCC来分析,第一行定义显著性水平,r12给出了相关性系数的值是-0.4334236,这说明名次和工资之间的确是存在负相关的,这个相关性系数的t统计量是-12.25232,它比5%的显著性水平要求的判别值更小,并且p值非常的小,说明我们可以拒绝这个t检验的原假设,认同相关性系数是显著异于0的。但PPMCC有一个缺陷,他需要正态分布假设,我们尚且对残差是否是正态的存疑,这里又用需要正态假设的检验显然不太合理。因此一个更好的选择是Spearman秩相关检验,这个检验不需要某种具体的分布形式,所以得出的结果会比PPMCC更合理。在R语言中,用cor.test,选择method为spearman就可以做这个检验:

    > cor.test(X,Y,method = "spearman",exact = F)
    
    	Spearman's rank correlation rho
    
    data:  X and Y
    S = 72838840, p-value < 2.2e-16
    alternative hypothesis: true rho is not equal to 0
    sample estimates:
           rho 
    -0.5840626 
    

    S是Spearman秩相关检验的统计量,对应的p值是非常小的,所以可以拒绝相关性为0的原假设,认同名次与工资之间存在相关性,最后一个数-0.5840626告诉我们他们之间的相关性为负。这两个检验进一步说明了名次和工资之间是存在相关性的,之所以模型解释力不足可能是模型假设不成立或者模型设定不合理。

    展开全文
  • UA MATH571A R语言回归分析实践 一元回归4 NBA球员的工资Box-Cox变换Full Model模型再诊断总结 上一讲对一元线性回归模型进行了诊断,发现模型主要存在三个问题: 工资关于名次存在负相关,但可能不是线性关系; ...
  • R语言 一元线性回归

    2016-03-20 18:16:58
    r语言实现一元线性回归
  • 应用回归分析R语言初学者
  • 使用R语言进行一元回归

    千次阅读 2017-08-30 17:13:07
    使用R语言进行一元回归我们通过一个例子来介绍通过R语言进行一元回归的方法例子:为研究某实验过程中,温度x(℃)对产品得率(%)的影响,测得数据如下: 温度x(℃) 100 110 120 130 140 150 160 170 ...
  • 一元线性回归分析R语言实现(RStudio

    万次阅读 多人点赞 2019-11-09 19:43:13
    回归分析是一种应用广泛的数理统计方法,它是研究变量与变量之间的相关关系,这种关系大致分为两类:确定性关系(能用函数精确描述)和非确定性关系(不能用函数描述)。 变量间的非确定性关系称为相关关系。 在回归...
  • R语言简单(一元)线性回归分析

    千次阅读 2016-08-27 18:45:08
    R语言简单(一元)线性回归分析简单举一个例子某商业银行2002年主要业务数据 分行编号 不良贷款(亿元) 各项贷款余额(亿元) 1 0.9 67.3 2 1.1 111.3 3 4.8 173.0 4 3.2 80.8 5 7.8 199.7 6 ...
  • R语言 一元线性回归

    千次阅读 2014-10-14 11:35:10
    一元线性回归分析 首先介绍回归分析中最基础的情况:一元线性回归分析。它规定模型f函数只能是y=k*x+b的形式,即只使用一个变量x(故称为一元)的线性形式来预测目标变量y。 6.1.1引例 利用某网站历次促销...
  • 一元回归分析

    千次阅读 2019-04-20 20:48:06
    \\要使用回归分析得到的回归系数计算预测值和残差,可以执行: > bike.res (bike.lm) > bike.pred (bike.lm) \\此外,我们再来绘制一下残差的散点图,以及预测值和观测值的散点图。 > qplot(bike.res,binwidth=500,...

空空如也

空空如也

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

r语言一元回归分析