这一系列里前面的三个部分都是用于比较组间差异的各种方法。

在这个部分里,我们会为大家介绍如何使用R进行基础回归和相关分析,以及模型作图、置信区间的预估和展示。

A. 简单线性回归

我们使用数据集thuesen作为这一部分的例子,如下导入:

> library(ISwR)

> attach(thuesen)

我们使用函数lm( linear model,线性模型 )进行线性分析:

> lm(short.velocity~blood.glucose)

Call:

lm(formula = short.velocity ~ blood.glucose)

Coefficients:

(Intercept)  blood.glucose

1.09781        0.02196

#Tips:函数lm()里面的参数是模型方程,波浪号(~)可以认为是“通过...来描述”。它在之前出现过几次,比如图形展示部分箱式图boxplot(),t检验,anova检验里等等。

#Tips:lm()函数的原始输出格式非常简单。你能看见的只有估计出来的截距α与斜率β。可以看出最优拟合直线为:short.velocity=1.098+0.0220*blood.glucose,但是没有给出其他任何像显著性检验之类的信息。

#Tips:其实,函数lm()可以处理比简单线性回归复杂很多的模型。除了一个解释变量与一个因变量之外,模型方程还能描述很多其他的情况。比如,要在y上通过x1,x2,x3进行多元线性回归分析(后文会介绍),可以通过y~x1+x2+x3来完成。

如果要获悉模型的其他信息,可以使用summary():

> summary(lm(short.velocity~blood.glucose))

Call:

lm(formula = short.velocity ~ blood.glucose)

Residuals:

Min       1Q   Median       3Q      Max

-0.40141 -0.14760 -0.02202  0.03001  0.43490

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept)    1.09781    0.11748   9.345 6.26e-09 ***

blood.glucose  0.02196    0.01045   2.101   0.0479 *

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2167 on 21 degrees of freedom

(1 observation deleted due to missingness)

Multiple R-squared:  0.1737,    Adjusted R-squared:  0.1343

F-statistic: 4.414 on 1 and 21 DF,  p-value: 0.0479

##Tips:首先,是

Call:

lm(formula = short.velocity ~ blood.glucose)

输出的开头本质上在重复一个函数的调用。当然如果你一开始就把模型赋值给了一个变量,那么调用summary()之后这个部分就是那个变量了。

Residuals:

Min  1Q   Median   3Q    Max

-0.40141 -0.14760 -0.02202  0.03001  0.43490

这部分简单地描述了残差的分布,可以帮助用户对分布的假设做快速检查。

Coefficients:

Estimate  Std. Error  t value  Pr(>|t|)

(Intercept)    1.09781    0.11748   9.345 6.26e-09 ***

blood.glucose  0.02196    0.01045   2.101   0.0479 *

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

这里我们再次见到了回归系数和截距,不过这次还伴有标准误,t检验和p值,以及最右侧的统计检验表示显著性水平的图像化标志。当然,如果你不喜欢这些星号,可以使用options(show.signif.stars=F)关闭它们。

Residual standard error: 0.2167 on 21 degrees of freedom

(1 observation deleted due to missingness)

残差波动情况。

Multiple R-squared:  0.1737,    Adjusted R-squared:  0.1343

F-statistic: 4.414 on 1 and 21 DF,  p-value: 0.0479

上式第一项是R2,在简单线性回归里可以被理解为Pearson相关系数的平方,另一个是修正后的R2;第二行是对假设回归系数是0进行的F检验,对整体模型的检验。实际上,F检验是t检验的平方:4.414=(2.101)2

我们先把数据点和回归线画出来:

> plot(blood.glucose,short.velocity)

> abline(lm(short.velocity~blood.glucose))

#Tips:abline()函数根据截距和斜率画一条直线。它能够接受数值参数,比如abline(1.1,0.022);不过更方便的是,它也能够从一个用lm拟合的线性回归中直接提取相关信息。

B. 预测和置信带

无论是否计算了置信带和预测带,我们都能够用函数predict析取出预测值,不加其他参数,它就只会输出回归值。我们为了方便用变量lm.velo代替模型:

> lm.velo

> predict(lm.velo)

1    2    3    4    5    6    7

1.433841 1.335010 1.275711 1.526084 1.255945 1.214216 1.302066

8    9    10   11  12  13  14

1.341599 1.262534 1.365758 1.244964 1.212020 1.515103 1.429449

15      17      18      19      20      21      22

1.244964 1.190057 1.324029 1.372346 1.451411 1.389916 1.205431

23      24

1.291085 1.306459

如果你加上了interval=”confidence”或者interval=”prediction”,那么你就能在预测值向量的基础上得到各类估计边界的值。同时也可以缩写这两个单词:

> predict(lm.velo,int="c")

fit      lwr      upr

1  1.433841 1.291371 1.576312

2  1.335010 1.240589 1.429431

3  1.275711 1.169536 1.381887

.....

22 1.205431 1.053805 1.357057

23 1.291085 1.191084 1.391086

24 1.306459 1.210592 1.402326

> predict(lm.velo,int="p")

fit       lwr      upr

1  1.433841 0.9612137 1.906469

2  1.335010 0.8745815 1.795439

3  1.275711 0.8127292 1.738693

...

22 1.205431 0.7299634 1.680899

23 1.291085 0.8294798 1.752690

24 1.306459 0.8457315 1.767186

Warning message:

In predict.lm(lm.velo, int = "p") :

用当前数据得到的预测结果对_未来_响应有用

#Tips:前一个是置信带,后一个是预测带。lwr和upr分别是下界和上界。Warning信息里提醒我们:这个预测边界不能用来考察我们做回归线所使用的已观测数据。

我们可以利用外部数据根据已有的模型做出它的预测情况图,图形的展示可以通过下面的组合函数来实现:

> pred.frame

> pp

> pc

> plot(blood.glucose,short.velocity,ylim=range(short.velocity,pp,na.rm=T))

> pred.gluc

> matlines(pred.gluc,pc,lty=c(1,2,2),col="black")

> matlines(pred.gluc,pp,lty=c(1,3,3),col="black")

#Tips:我们采用由4到20这几个数据作为新的x来做出预测情况的图。Predict()函数里newdata=的参数就是调用新数据的参数;plot()函数里的ylim参数使用range()函数来保证图形全部在范围内;matlines()函数里的lty是设置线型。

A. 皮尔逊相关系数

相关系数的计算可以使用cor()函数,但是如果对thuesen中的两个向量也进行这样简单的操作,就会发生下面状况:

> cor(blood.glucose,short.velocity)

[1] NA

R中所有的基本统计函数都要求输入的参数没有缺失值,或者你明确指定如何处理缺失值。对于函数mean(),var(),sd()以及类似的单向量函数,你可以传递na.rm=T这个参数告诉它们在计算之前应该移除缺失值。对于cor()函数,use=“complete.obs”代表提取所有变量全部非空的观测,你也可以这样写:

> cor(blood.glucose,short.velocity,use="complete.obs")

[1] 0.4167546

我们还可以通过如下的代码得到一个数据框中多种变量的相关系数矩阵:

> cor(thuesen,use="complete.obs")

blood.glucose short.velocity

blood.glucose   1.0000000   0.4167546

short.velocity    0.4167546    1.0000000

#Tips:当然,数据框中变量超过两个结果会更有意思。

但是,上面的结果只是跟我们展示了关联系数,但是没有做出检验,因此我们需要cor.test()函数,可以通过指定两个变量来使用:

> cor.test(blood.glucose,short.velocity)

Pearson's product-moment correlation

data:  blood.glucose and short.velocity

t = 2.101, df = 21, p-value = 0.0479

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:

0.005496682 0.707429479

sample estimates:

cor

0.4167546

#Tips:我们也能得到一个真实相关系数的置信区间。注意,这里的p值和之前回归分析的p值是一样的。同样与之前回归模型的anova表里的p值是一样的。

B. 斯皮尔曼相关系数和肯德尔等级相关系数

与前面的部分所讲的单样本和双样本问题一样,相关问题也有非参数的方法,这些方法的优点在于不需要假设数据的正态分布性,而且结果也不会受到单调变换的影响。

相关性检验的几个方法都打包进了cor.test中,没有额外提供专门的spearman.test()函数。所以可以在cor.test()中指明:

> cor.test(blood.glucose,short.velocity,method="spearman")

Spearman's rank correlation rho

data:  blood.glucose and short.velocity

S = 1380.4, p-value = 0.1392

alternative hypothesis: true rho is not equal to 0

sample estimates:

rho

0.318002

Warning message:

In cor.test.default(blood.glucose, short.velocity, method = "spearman") :

无法给连结计算精確p值

而等级相关同理,只需要在method参数中做出修改就可以实现:

> cor.test(blood.glucose,short.velocity,method="kendall")

Kendall's rank correlation tau

data:  blood.glucose and short.velocity

z = 1.5604, p-value = 0.1187

alternative hypothesis: true tau is not equal to 0

sample estimates:

tau

0.2350616

Warning message:

In cor.test.default(blood.glucose, short.velocity, method = "kendall") :

无法给连结计算精確p值

#Tips:注意,这两个非参数方法的相关系数在5%置信水平下不显著,而pearson相关系数也仅仅是刚过线的显著。

到目前为止,简单的统计分析方法就告一段落了,而进一步的统计分析探讨我们会在下面一个系列为大家介绍,敬请期待。

参考资料:
1.《R语言统计入门(第二版)》 人民邮电出版社  Peter Dalgaard著
2.《R语言初学者指南》 人民邮电出版社  Brian Dennis著
3.Vicky的小笔记本《blooming for you》 by  Vicky

生信发文助手

如需生信分析服务请加微信:keyan-zhishi2

多点好看,少点脱发

r语言 线性回归 相关系数_R语言系列第四期:R语言简单相关与回归相关推荐

  1. 二分法查找c语言程序_C语言的那些经典程序 第十四期

    戳"在看"一起来充电吧! C语言的那些经典程序 第十四期 本期小C给大家带来三个用C语言解决实际问题的典例.如果全都理解,相信肯定能给大家带来收获!接下来让我们看看是哪些程序吧! ...

  2. 格兰杰因果关系检验r语言_R语言系列第四期:R语言单样本双样本差异性检验

    之前详细介绍了利用R语言进行统计描述,详情点击:R语言系列第三期:①R语言单组汇总及图形展示.R语言系列第三期:②R语言多组汇总及图形展示.R语言系列第三期:③R语言表格及其图形展示 从这个部分我们就 ...

  3. 天野第四期易语言半内存辅助培训课程

    第一章 易语言基础 共4课时 1:易语言核心支持库命令讲解之一 2:易语言核心支持库命令讲解之二 3:易语言常用组件讲解.数组操作详解 4:易语言调试功能讲解.线程的了解.自定义数据类型的了解与应用 ...

  4. r 函数返回多个值_第四讲 R描述性统计分析

    在"R与生物统计专题"中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现.以从浅入深,层层递进的形式在投必得医学公众号更新. 在上一讲中,我们介绍了第三讲 R编程基础- ...

  5. r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型

    原文 基于R语言的lmer混合线性回归模型​tecdat.cn 混合模型适合需求吗? 混合模型在很多方面与线性模型相似.它估计一个或多个解释变量对响应变量的影响.混合模型的输出将给出一个解释值列表,其 ...

  6. R语言应用实战系列(四)-Apriori算法的相关内容(附案例源代码)

    前言 关联规则反映一个事物与其他事物之间的关联性,关联规则分析是从事事物数据库,关系数据库和其他信息存储中大量数据的项集之间发现有趣,频繁的格式,关联和相关性.更确切地说,关联规则通过量化的数字进行描 ...

  7. 从C语言的角度重构数据结构系列(六)-C语言的数据类型及常变量

    前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...

  8. 从C语言的角度重构数据结构系列(五)-C语言的程序结构和基本语法

    前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...

  9. 从C语言的角度重构数据结构系列(四)-静态链表动态链表

    前言 是否存在一种存储结构,可以融合顺序表和链表各自的优点,从而既能快速访问元素,又能快速增加或删除数据元素. 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 h ...

最新文章

  1. 简单BP网络识别数码表字符
  2. struts2.0和struts1.x的区别
  3. 谈谈为什么我们需要云原生架构?
  4. Nginx配置HTTP2.0
  5. 基于Windows8与Visual Studio2012开发内核隐藏注册表
  6. 湖南卫视明年不办选秀 段林希或是最后一个冠军
  7. (PotPlayer)Windows视频播放神器
  8. 软件构造Lab2-Playing Chess
  9. deeplink跳转快应用返回出现两次系统添加桌面的弹框
  10. Linux下ll命令
  11. 如何完全卸载HbuilderX
  12. bootstrapvalidator已定义的验证规则
  13. 第一天-网络设备安全操作知识
  14. NES专题——NES的游戏硬件
  15. 应用商店调研-豌豆荚
  16. 还活着哈。 ..:D
  17. 远程台式机接入销售管理系统crm销售管理软件
  18. SCPI 可编程仪器标准命令
  19. cron表达式指定每周几调度
  20. 如何获得查新检索报告?

热门文章

  1. 复合选择器-后代选择器(HTML、CSS)
  2. 程序猿必须要知道的一个内容:客户端+服务端二(源码解析、建议收藏)
  3. 天梯—输出GPLT(C语言)
  4. js获取当天0点和24点的时间戳
  5. linux之添加python环境变量
  6. 存储可向外扩展无线传输
  7. 模拟ARP报文发送,通过改变拓扑结构,观察报文发送方法以及途径
  8. 我眼中的ASP.NET Core之微服务 (二)
  9. 更名OpenShift容器平台,红帽实现战略性转变
  10. java中的远程debug调试