R语言的一般线性模型

R语言的一般线性模型用函数:lm(),即可轻松实现。

例子

建立一般线性模型

NC.glm1 = lm(fmri.SFG_R_CerebellumGM_L ~ age + gender + race,data = NC)
summary(NC.glm1)

这里解释一下变量(我直接copy我项目里面的两行代码),因变量y就是fmri.SFG_R_CerebellumGM_L,自变量x有三个age,gender(因子变量:female、male)和race(因子变量:AA、Asian、Cauc、Hispanic、Other),这些都是数据集NC的某一列。建立y和x的一般线性模型,得到的结果如下所示:

Call:
lm(formula = fmri.SFG_R_CerebellumGM_L ~ age + gender + race, data = NC)Residuals:Min       1Q   Median       3Q      Max
-0.54058 -0.20018 -0.01524  0.15821  1.00124 Coefficients:Estimate Std. Error t value Pr(>|t|)
(Intercept)   0.442044   0.168781   2.619   0.0103 *
age           0.003510   0.006861   0.512   0.6102
genderMale    0.023009   0.060557   0.380   0.7049
raceAsian     0.008780   0.205792   0.043   0.9661
raceCauc     -0.073530   0.067110  -1.096   0.2761
raceHispanic  0.035361   0.148205   0.239   0.8120
raceOther    -0.107146   0.168367  -0.636   0.5261
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 0.2834 on 90 degrees of freedom
Multiple R-squared:  0.02018,   Adjusted R-squared:  -0.04514
F-statistic: 0.309 on 6 and 90 DF,  p-value: 0.9308

对模型结果进行分析

一般线性模型(针对普通数值变量类型)

我们知道回归分析就是建立一个一般的线性函数来拟合:y=a1x1+a2x2+a3*x3+b
从上面summary的结果中,我们要得到几个重要的系数(coefficients):
intercept -> b;
age -> a1;
写到这里,可能部分同学会不懂了,为什么后面的系数有这么多呢?理论上应该就b,a1,a2,a3四个系数啊!

一般线性模型(针对因子变量类型)

在R中,如果自变量是因子变量类型,lm()函数会自动处理成虚拟变量,也叫哑变量(dummy variable)。所以本例中的自变量gender和race在lm()函数中自动处理成了虚拟变量。
其实虚拟变量就是将因子变量的几个不同的level处理成对应的01变量集合。比如:gender

gender genderFemale genderMale
female 1 0
male 0 1

从表中我们可以看见本来是因子变量的gender变量,如今映射成为两个01变量genderFemale和genderMale。
同理:race

race raceAA raceAsian raceCauc raceHispanic raceOther
AA 1 0 0 0 0
Asian 0 1 0 0 0
Cauc 0 0 1 0 0
Hispanic 0 0 0 1 0
Other 0 1 0 0 1

从表中可见因子变量映射成为虚拟变量之后,一般因子变量中有几个level就会生成几个虚拟变量。
那么问题来了,为什么从之前的summary的结果我们没有看到genderFemale和raceAA呢?
答案是:为了避免多重共线性,对于level=n的分类变量只需选取其任意n-1个虚拟变量。因此需要选取一个reference level,gender中选取的是female,race中选的是AA,因此summary的结果就可以完全解释了。

利用模型进行回归分析

有时候我们会通过predict()函数对该模型在新的测试集中进行回归。但我们需要做一个矫正的时候,需要自己写一个线性模型进行回归分析。了解了因子变量和虚拟变量(dummy 变量)的关系之后,这并不难。代码如下:

NCgenderD = nnet::class.ind(NC$gender)    #generate dummy variable
NCgenderD = NCgenderD[,-1    ]#to avoid collinear,we drop the fisrt variate
NCraceD = nnet::class.ind(NC$race)    #generate dummy variable
NCraceD = NCraceD[,-1]     #to avoid collinear,we drop the fisrt variate
NC_D = cbind(NC$age,NCgenderD,NCraceD)       # merge independent variables#Actually,I have lots of dependent variables to do correction(or regression)
coef_lm = sapply(37:3232,function(i){NC.glm = lm(NC[,i] ~ age + gender + race, data = NC)return(NC.glm$coefficients)
})
coef_lm1 = coef_lm[-1,]#drop the intercept ,so as to do matrix multiplication
RegressNC = sapply(37:3232,function(i){return(coef_lm[1,i]+(NC_D %*% coef_lm1[,i-36]))
})

总结

在R语言实现一般线性模型是很方便的,本文通过手写带虚拟变量的线性回归函数更好地理解R语言中对因变量是因子变量的处理方式,即转化为虚拟变量(哑变量dummy variable)进行处理。我们在利用模型的coefficients进行回归的时候也需要注意一下。
PS:为了理解这个虚拟变量,我找了很多资料,说起容易还是挺花时间的。差不多有大半天专门去找虚拟变量的相关知识,为了使得别人不再像我一样,所以又花了小半天时间写了这个markdown。

R语言一般线性模型(涉及因变量是虚拟变量(哑变量))相关推荐

  1. R语言广义线性模型Logistic回归案例代码

    R语言广义线性模型Logistic回归案例代码 在实际应用中,Logistic模型主要有三大用途: 1)寻找危险因素,找到某些影响因变量的"坏因素",一般可以通过优势比发现危险因素 ...

  2. R语言广义线性模型泊松回归(Poisson Regression)模型

    R语言广义线性模型泊松回归(Poisson Regression)模型 试想一下,你现在就站在一个人流密集的马路旁,打算收集闯红灯的人群情况(?).首先,利用秒表和计数器,一分钟过去了,有5个人闯红灯 ...

  3. R语言常用线性模型特征筛选(feature selection)技术实战:基于前列腺特异性抗原(PSA)数据

    R语言常用线性模型特征筛选(feature selection)技术实战 目录 R语言常用线性模型特征筛选(feature selection)技术实战

  4. R语言广义线性模型Logistic回归模型列线图分析(nomogram)

    R语言广义线性模型Logistic回归模型列线图分析(nomogram) 我们来看图说话: gist是一种胃肠道间质瘤,作者构建了无复发生存率的logistic回归模型. 并构建了如下的列线图或者no ...

  5. R语言广义线性模型Logistic回归模型C Statistics计算

    R语言广义线性模型Logistic回归模型C Statistics计算 区分能力指的是回归模型区分有病/无病.有效/无效.死亡/存活等结局的预测能力.比如,现有100个人,50个确定患病,50个确定不 ...

  6. R语言广义线性模型Logistic回归模型亚组分析及森林图绘制

    R语言广义线性模型Logistic回归模型亚组分析及森林图绘制 #Logistic回归案例 6 亚组分析森林图 library(forestplot) rs_forest <- read.csv ...

  7. R语言多项式线性模型:最大似然估计二次曲线

    全文链接:http://tecdat.cn/?p=18348 "应用线性模型"中,我们打算将一种理论(线性模型理论)应用于具体案例.通常,我会介绍理论的主要观点:假设,主要结果,并 ...

  8. R语言ggplot2可视化散点图、可视化两个数值变量之间的关系、使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注信息

    R语言ggplot2可视化散点图.可视化两个数值变量之间的关系(Scatter plot).使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线.自定义数据点的大小.色彩.添加 ...

  9. R语言ggplot2可视化:可视化离散(分类)变量的堆叠的柱状图、横轴是离散变量、柱状图是多个分组的计数和叠加

    R语言ggplot2可视化:可视化离散(分类)变量的堆叠的柱状图.横轴是离散变量.柱状图是多个分组的计数和叠加 目录

  10. R语言使用car包的scatterplot函数根据分组变量在不同的分组拟合不同的模型并在散点图中可视化每个分组的拟合曲线、并添加边缘箱图

    R语言使用car包的scatterplot函数根据分组变量在不同的分组拟合不同的模型并在散点图中可视化每个分组的拟合曲线.并添加边缘箱图(Scatter plot with subgroups and ...

最新文章

  1. 如果只推荐一本 Python 进阶的书,我要 Pick 它!
  2. Web前端css知识点概括
  3. R学习_multitaper包解析2:子函数spec.mtm.dpss,dpssHelper
  4. JAVA揭竿而起总要有名号
  5. Spring-boot(一)
  6. HDU 1217 Arbitrage (Floyd + SPFA判环)
  7. Drupal 基于 PHP 的内容管理系统
  8. Ubuntu16.04 Swap的开闭
  9. MFC vs2012 Office2013 读写excel文件
  10. mysql 协议还原_mysql备份还原方案xtrabackup
  11. [嵌入式学习必备网站分享]嵌入式开发必须收藏的二十个网站 内附超链接 实用 嵌入式单片机学习网站
  12. Android 实现一键加QQ群,一键加QQ好友
  13. 哲学思考之否定之否定规律
  14. 5G无线关键技术 — 超密集组网
  15. 根据经纬度坐标点返回所在行政区域实现
  16. VUE+ ELEMENT 选人的弹窗组件
  17. 2019年2月星环科技大数据应用开发面试(2年工作经验)
  18. php 正则保留数字和,只保留汉字,字母,数字正则
  19. 抖音视频限流了怎么解决,如何才能解决限流问题
  20. springboot 出现A component required a bean of type ‘com.cly.dao.OthersMapper‘ that could not be found.

热门文章

  1. java 文件读取 逗号分隔_java – 读取逗号分隔配置文件的最佳方法是什么?
  2. C++ COM组件编写初探
  3. eversync safari_推荐好用的firefox和chrome的书签同步工具
  4. 使用inet_aton报错
  5. P2P穿透StunServer
  6. 财务会计基础(一)概念
  7. 蓝牙模块的配置(HC05):修改密码、修改模块名字、修改波特率。
  8. Collaborative Filtering for Implicit Feedback Datasets结论公式推导
  9. Go语言中的uint和int的区别
  10. MySQL数据库教程天花板,mysql安装到mysql高级,强|硬 宋红康版