zoukankan      html  css  js  c++  java
  • 虚拟变量学习

    虚拟变量 ( Dummy Variables) 又称虚设变量、名义变量或哑变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到俩个方程的作用,而且接近现实。

    模型中引入虚拟变量的作用
    1、分离异常因素的影响,例如分析我国GDP的时间序列,必须考虑“文革”因素对国民经济的破坏性影响,剔除不可比的“文革”因素。
    2、检验不同属性类型对因变量的作用,例如工资模型中的文化程度、季节对销售额的影响。

    3、提高模型的精度,相当于将不同属性的样本合并,扩大了样本容量(增加了误差自由度,从而降低了误差方差)

    在模型中引入多个虚拟变量时,虚拟变量的个数应按下列原则确定:
    (1)如果回归模型有截距项
    有m种互斥的属性类型,在模型中引入(m-1)个虚拟变量。
    (2)如果回归模型无截距项,有m个特征,设置m个虚拟变量
     
    在R语言中对包括分类变量(factor)的数据建模时,一般会将其自动处理为虚拟变量或哑变量(dummy variable)。但有一些特殊的函数,如neuralnet包中的neuralnet函数就不会预处理。如果直接将原始数据扔进去,会出 现”requires numeric/complex matrix/vector arguments”需要数值/复数矩阵/矢量参数错误。
     
    download.file("http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data",
        "./german.data")
    data <- read.table("./german.data")
    str(data)
     
    'data.frame':	1000 obs. of  21 variables:
     $ V1 : Factor w/ 4 levels "A11","A12","A13",..: 1 2 4 1 1 4 4 2 4 2 ...
     $ V2 : int  6 48 12 42 24 36 24 36 12 30 ...
     $ V3 : Factor w/ 5 levels "A30","A31","A32",..: 5 3 5 3 4 3 3 3 3 5 ...
     $ V4 : Factor w/ 10 levels "A40","A41","A410",..: 5 5 8 4 1 8 4 2 5 1 ...
     $ V5 : int  1169 5951 2096 7882 4870 9055 2835 6948 3059 5234 ...
     $ V6 : Factor w/ 5 levels "A61","A62","A63",..: 5 1 1 1 1 5 3 1 4 1 ...
     $ V7 : Factor w/ 5 levels "A71","A72","A73",..: 5 3 4 4 3 3 5 3 4 1 ...
     $ V8 : int  4 2 2 2 3 2 3 2 2 4 ...
     $ V9 : Factor w/ 4 levels "A91","A92","A93",..: 3 2 3 3 3 3 3 3 1 4 ...
     $ V10: Factor w/ 3 levels "A101","A102",..: 1 1 1 3 1 1 1 1 1 1 ...
     $ V11: int  4 2 3 4 4 4 4 2 4 2 ...
     $ V12: Factor w/ 4 levels "A121","A122",..: 1 1 1 2 4 4 2 3 1 3 ...
     $ V13: int  67 22 49 45 53 35 53 35 61 28 ...
     $ V14: Factor w/ 3 levels "A141","A142",..: 3 3 3 3 3 3 3 3 3 3 ...
     $ V15: Factor w/ 3 levels "A151","A152",..: 2 2 2 3 3 3 2 1 2 2 ...
     $ V16: int  2 1 1 1 2 1 1 1 1 2 ...
     $ V17: Factor w/ 4 levels "A171","A172",..: 3 3 2 3 3 2 3 4 2 4 ...
     $ V18: int  1 1 2 2 2 2 1 1 1 1 ...
     $ V19: Factor w/ 2 levels "A191","A192": 2 1 1 1 1 2 1 2 1 1 ...
     $ V20: Factor w/ 2 levels "A201","A202": 1 1 1 1 1 1 1 1 1 1 ...
     $ V21: int  1 2 1 1 2 1 1 1 1 2 ...

    变量V1是factor类型,有四个值A11,A12,A13,A14
    在R语言中可以用两种方法将哑变量转成数值

    方法一:
    neuralnet
    install.packages("neuralnet")
    library(neuralnet)
    NNModelAllNum <- neuralnet(V21 ~ V2 + V5 + V8, data)
    NNModelAllNum
     
    可以用model.matrix函数将V1转化为三个虚拟变量,V1A12,V1A13,V1A14。
     
    modelData <- model.matrix(~V1 + V2 + V5 + V8 + V21, data)
    head(modelData)
     
     
    方法二:
    来自nnet package的class.ind函数。
     
    install.packages("nnet")
    library(nnet)
    dummyV12 <- class.ind(data$V1)
    head(dummyV12)
     
    可以看到,该结果和model.matrix稍有区别,生成了四个虚拟变量。要注意,为了避免多重共线性,对于level=n的分类变量只需选取其任意n-1个虚拟变量。
         A11 A12 A13 A14
    [1,]   1   0   0   0
    [2,]   0   1   0   0
    [3,]   0   0   0   1
    [4,]   1   0   0   0
    [5,]   1   0   0   0
    [6,]   0   0   0   1
     


  • 相关阅读:
    (转)一文讲清TCP/IP 协议
    Java框架之Spring Boot和Spring Cloud区别
    php大力力 [006节]初步接触认识phpMyAdmin
    php大力力 [005节] php大力力简单计算器001
    php大力力 [004节]PHP常量MAMP环境下加载网页
    php大力力 [003节]php在百度文库的几个基础教程mac环境下文本编辑工具
    php大力力 [002节]mac php环境安装,mamp安装 ,phpMyAdmin启动
    php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28
    C# DataSet与DataTable的区别和用法 ---转载
    【SqlServer】利用sql语句附加,分离数据库-----转载
  • 原文地址:https://www.cnblogs.com/anny-1980/p/3822936.html
Copyright © 2011-2022 走看看