引言

随机森林( random forest) 是一种基于分类树( classification tree) 的算法,它可以用于分类和回归,本文在这里以广西地区1990-2014共25年的GDP数据作为因变量,以INV投资、CON消费、NEX净出口为三个自变量,运用R语言软件做随机森林回归,最终得到三个自变量的相对重要程度。

1 数据

从广西统计年鉴中取得1990-2014年的因变量与自变量数据,放入excel表格中。
QQ截图20160407190804.jpg

2 步骤

2.1 安装randomForest

在R语言中,randomForest包提供了随机森林的实现,使用randomForest需要先安装这个包,在R的交互命令中使用下面的命令安装:

    > install.packages("randomForest")

然后在弹出的镜像列表中选择一个国内的镜像站点就可以自动安装了。

2.2 使用randomForest

在R的交互命令中引入randomForest

    > library(randomForest)

屏幕上会输出randomForest包的版本信息。

2.3 导入数据

将已经整理好的excel数据放入R语言的workspace中,或将R的工作空间加载为存有excel的文件夹。
将数据导入到R中并查看:

    > gxdata <- read.csv("gxdata1990-2014.csv")
    > gxdata
          X      gdp       con        inv      nex
      1  1990   449.06  175.4369    68.5666   8.0611
      2  1991   518.59  200.2276    89.6479  10.1670
      3  1992   646.60  243.6189   141.0395  29.2378
      ...
      24 2013 14449.90 5133.1000 11907.6669 862.2181
      25 2014 15672.89 5772.8317 13843.2123 996.4330

2.4 数据的初步处理

在这里我们通过两个步骤将每一行的名字以年份命名。首先去掉第一列(年份),将去掉后的矩阵命名为gxdata_without_x,然后查看新生成的矩阵,命令如下:

    > gxdata_without_x <- gxdata[,-1]
    > gxdata_without_x
             gdp       con        inv      nex
      1    449.06  175.4369    68.5666   8.0611
      2    518.59  200.2276    89.6479  10.1670
      3    646.60  243.6189   141.0395  29.2378
      ……
      24 14449.90 5133.1000 11907.6669 862.2181
      25 15672.89 5772.8317 13843.2123 996.4330

第二步,取出gxdata矩阵中的第一列gxdata[,1](年份),给矩阵的每一行命名,可查看新的矩阵,命令如下:

     > row.names(gxdata_without_x) <- gxdata[,1]
     > gxdata_without_x
          gdp       con        inv      nex
      1990   449.06  175.4369    68.5666   8.0611
      1991   518.59  200.2276    89.6479  10.1670
      1992   646.60  243.6189   141.0395  29.2378
      ……
      2013 14449.90 5133.1000 11907.6669 862.2181
      2014 15672.89 5772.8317 13843.2123 996.4330

2.5 多元线性回归分析

利用2.4中处理好的矩阵gxdata_without_x,以CON、INV、NEX为自变量,GDP为因变量做多元回归分析,查看多元线性回归分析在本例中的分析结果。命令及显示结果如下:

     > gx.lm <- lm(gdp~con+inv+nex,data = gxdata_without_x)
     > summary(gx.lm)
     Call:
     lm(formula = gdp ~ con + inv + nex, data = gxdata_without_x)
     
     Residuals:
         Min      1Q  Median      3Q     Max 
     -657.08  -97.80  -20.73   53.71  613.23 
     
     Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
     (Intercept) 123.88962  101.58446   1.220   0.2361    
     con           2.31725    0.21224  10.918 4.07e-10 ***
     inv          -0.05828    0.08507  -0.685   0.5008    
     nex           3.64880    1.55491   2.347   0.0288 *  
     ---
     Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

     Residual standard error: 224.9 on 21 degrees of freedom
     Multiple R-squared:  0.998,     Adjusted R-squared:  0.9977 
     F-statistic:  3410 on 3 and 21 DF,  p-value: < 2.2e-16

从结果中,可以看出,尽管模型通过F检验,决定系数R方高达0.998,但在回归方程中,投资一项的p值=0.5008,远大于统计显著性所要求的0.05,无法通过t检验,需要再回归模型中剔除。也即是说,所建立的数据模型不包含投资这一项,这明显不符合广西经济运行情况。

2.6 随机森林回归

用随机森林算法做回归分析,在此设定树的数量为1000,命令如下:

     > gx.rf<-randomForest(gdp~.,data=gxdata_without_x,importance=TRUE, ntree=1000)

建好随机森林的回归模型gx.rf后,使用print命令可查看模型结果:

     > print(gx.rf)
     Call:
      randomForest(formula = gdp ~ ., data = gxdata_without_x, importance = TRUE,      ntree = 1000) 
                    Type of random forest: regression
                          Number of trees: 1000
     No. of variables tried at each split: 1
     
               Mean of squared residuals: 724182.3
                         % Var explained: 96.51

这里一个重要的系数是96.51,称为拟合优度,它的作用类似于回归分析中的R方。
当我们需要查看已建好的随机森林的回归模型gx.rf中,各个自变量的重要程度时,使用以下命令,得到结果如下:

     > importance(gx.rf)
          %IncMSE IncNodePurity
     con 20.75824     157065888
     inv 21.46871     159356379
     nex 21.87843     168809738

画出自变量重要性排序图,可以用varImpPlot命令,在本例中的命令为:

     > varImpPlot(gx.rf)

得到图:
QQ截图20160407190804.jpg

也就是说,在三个自变量中,它们的重要性程度排序为NEX>INV>CON。