前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈一款进阶软件R的实际运用

浅谈一款进阶软件R的实际运用

作者头像
微点
修改2019-05-13 10:29:31
9910
修改2019-05-13 10:29:31
举报
文章被收录于专栏:sci666sci666

发现这款软件在小样本,常见的临床问题中可以快速的解决我们大部分问题,其简单操作界面以及菜单式操作方式成为很多人选择它的理由。但是,当我们遇到某些大数据,或者复杂统计运算时,如果还拿SPSS作为自己的救命稻草,那可能就是一出损招了,甚至会一度click到想要剁手。

R是一个非常灵活的平台,是专用于探索、展示和理解数据的语言,与其说它接近统计分析工具,倒不如说它更像是一款定向开化的程序语言。不能否认的是这是一款难学的软件,应用广泛,众多的分析和不断增加的绘图函数(超过50000个)都容易让人望而却步。但是只要有合适的指导,你就可以畅游其中,选择合适的途径,优雅、简洁、高效地完成任务。?

另外,贝尔实验室的大佬们将R做成一个开源项目,在很多操作系统上都可以免费得到,包括Windows、Mac OS X和Linux。R还在持续发展中,每天都在纳入新的功能。与SPSS和SAS这类GB级别地软件相比,优势明显,容量小,免费入手,还可以自行编码自己需要的固定流程程序。真的是居家必备,杀人越货的……

R以能创建漂亮优雅的图形而闻名,但实际上它可以处理各种统计问题。基本的安装就提供了数以百计的数据管理、统计和图形函数。不过,R很多强大的功能都来自社区开发的数以千计的扩展(包)。

有关于R软件的基本介绍就告一段落,有对其历史背景、公司企业感兴趣的朋友们可以查阅相关书籍。

在R软件中,红色代表代码行,蓝色代表输出结果,绿色代表注释语句。

1

常用的R包有很多比如:stats(R统计学包)、cluster(聚类分析)、Graphics(绘图)、pgirmess(生态学数据分析)等等【注:R软件对字母大小写敏感,不论在调用程序包或者程序编辑过程中都需要注意】。而安装程序包的方法也很简单,只需要在控制台中输入:

>install.packages()

例如:

>install.packages(“foreign”)?(foreign是可以调用外部文件的包,但是这个包一般可以直接调用,不需要安装)

当然,也可以到R官网(http://www.r-project.org/)下载需要的包,然后在R的菜单栏中找到Package或者“程序包”(中文界面下)的install packages from local files选项。

安装结束后需要手动的调用:

>library(foreign) 【注:安装需要加“”,而调用不需要加“”】

有的时候调用或者安装一个很大的包的时候需要等待一下R程序,会弹出很多内容……

如果说你想了解一个程序包里都包含了那些函数,那可以直接在控制台中输入:

>?t.test

或者

>help(“t.test”)

或者

>??rms

来查询相关内容。

【在R中最最心痛的事情是在输入一长段代码的时候不小心摁下了↑↓箭头】

2

R的函数,R是一种解释性语言,输入后可以直接得到结果,功能靠函数实现,类似于大多数的编程语言。

函数形式是: 函数(输入数据,参数= )

如果没有指定部分参数,则参数以默认值为准

例如:

>mean(x,trim=0,na.rm=FALSE,…)?(求x的均值,参数含义详见>?mean)

>lm(y~x,data=N) (求取线性模型,y=bx+a,从N数据中提取x和y)

还有很多函数,比如说:

求和:sum() 绘图:plot()?排序:sort()?求标准差:sd()?等等

而参数的设定是可以影响输出结果的,以boxplot()为例

箱线图绘制函数的调用

>boxplot(day~subject, data=base, col=”red”)

day~subject,以subject为横轴,day为纵轴绘制箱线图。

data=base ????数据来源base

col=“red” ????箱线图为红色(左侧为没有这条参数,右侧是有这条参数)

Tip: R里的赋值符号是”<-”也可以是”=”,但是如果要判断两个对象是否相等一定要用”==”来表示,结果给出的一般是逻辑性的”T”或”F”。

Tip: R对象的类分为:向量(vector),因子(factor),矩阵(matrix),数组(array),数据框(dataframe)和列表(list).不同的数据类型特点不同,这里不多解释。

Tip: R读取外部数据的方式是:read.格式(文件和地址),例如:

>test<-read.csv(“D:/R/test2.csv”,header=T)

3

几个统计分析的例子:

  • t检验

现有6名患者的身高和体重,检验体重除以身高的平方是否等于22.5。

【注:但数据来源于外部,只需要添加read.csv()导入数据data,随后分析时使用data$height和data$weight 来代替下面代码的头两行,右测代码】

> height<-c(1.75,1.8,1.65,1.88,1.73,1.79)

> weight<-c(62,72,57,90,85,76) ? >data<-read.csv(源文件)

> sq.hei<-height^2 ? ? ?>ratio<-data$weight/data$height^2

> ratio<-weight/sq.hei ? ? >t.test(ratio,mu=22.5)

> t.test(ratio,mu=22.5) ?(t检验分析的函数)

??One Sample t-test

data: ?ratio

t = 0.79971, df = 5, p-value = 0.4602 ??(结果的P值为0.4602)

alternative hypothesis: true mean is not equal to 22.5

95 percent confidence interval:

?20.29007 26.70590

sample estimates:

mean of x

?23.49799?

  • 单因素方差分析

将三种不同菌型的伤寒病毒a,b,c分别接种于10,9,和11只小白鼠上,观察其存活天数,问三种菌型下小白鼠的平均存活天数是否有显著差异。

a菌株:2, 4, 3, 5, 4, 7, 7, 2, 5, 4

b菌株:5, 6, 7, 5, 10, 7, 12, 6, 6

c菌株:7,11,6, 6, 7, 9, 5, 7, 6, 3, 10

可以现在excel中输入数据,day和type 各为一列,保存成csv格式。

>data<-read.csv(“d:/anova.csv”,header=T)

#将data数据框中的type转换为因子(factor),因为这个变量做分类的变量

>data$type<-as.factor(data$type)

>analysis<-aov(lm(day~type, data=data)) ??( aov()是方差分析的函数)

>summary(analysis)

>boxplot(day~type,data=data,col=”red”)

分析结果:

Df Sum Sq Mean Sq F value Pr(>F) ?

type ????????2 ?50.48 ?25.239 ??5.452 0.0103 * ??(P<0.05,差异有统计学意义)

Residuals ??27 124.99 ??4.629 ????????????????

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

  • 线性回归

对一批涂料进行研究,确定搅拌速度对杂质含量的影响,数据如下,试进行回归分析

>x<-c(20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40)

>y <-c(8.4, 9.5, 11.8, 10.4, 13.3, 14.8, 13.2, 14.7, 16.4, 16.5, 18.9)

>plot(y~x)

>reg<-lm(y~x) ( lm() 线性回归函数)

>abline(reg,col=”red”)

>summary(reg)

Call:

lm(formula = y ~ x)

Residuals:

????Min ?????1Q ?Median ?????3Q ????Max

-1.1800 -0.6491 -0.2073 ?0.7854 ?1.3545

Coefficients:

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

(Intercept) ?-0.5727 ????1.3982 ??-0.41 ???0.692 ???

x ????????????0.4673 ????0.0456 ??10.25 2.92e-06 *** ??(P<0.001)

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

Residual standard error: 0.9566 on 9 degrees of freedom

Multiple R-squared: ?0.921, ????Adjusted R-squared: ?0.9123

F-statistic: ??105 on 1 and 9 DF, ?p-value: 2.922e-06

  • 其他的一些函数还有很多

glm(), friedman.test(), fisher.test(), binom.test(), chisq.test()…

4

R绘图?

绘图是R众所周知的强项,R绘制的图形:

*2.图片来自于参考资料2

R还可以绘制地图:

左图 maps包 ?map()? ? ?右图 PBSmapping包 addBubbles()?

fields 包实例? ? ? ? ? ? ? ? ? ? ? ? ? spdep 包实例

以及空间分析绘图: gstat程序包

R的高级绘图函数包括:

plot()

绘制散点图等多种图形,根据数据的类,调用相应的函数绘图

hist()

频率直方图

boxplot()

箱线图

stripchart()

点图

barplot()

柱状图

dotplot()

点图

piechart()

饼图

matplot()

数学图形

  • 绘图举例:散点图

生成0到2之间的50个随机数,分别命名为x,y

>x <- runif(50,0,2)

>y <- runif(50,0,2)

#绘图:将主标题命名为“散点图”, 横轴命名为”横坐标”, 纵轴命名为“纵坐标”

>plot(x, y, main=”散点图”, xlab=”横坐标”, ylab=”纵坐标”)

>text(0.6,0.6,”text at (0.6,0.6)”)

>abline(h=.6,v=.6)

  • 分步绘图

1.打开绘图窗口,不绘制任何对象

>plot(x, y, type=”n”, xlab=””, ylab=””, axes=F)

2.添加坐标点 ?>points(x,y)

3.添加坐标轴

>axis(1); axis(at=seq(0.2,1.8,0.2), side=2)

4.补齐散点图的边框 ?>box()

5.添加标题、副标题、横轴说明、纵轴说明

>title(main=”Main title”, sub=”subtitle”, xlab=”x-label”, ylab=”y-label”)

  • 一页多图

在作图前需要的代码:

>par()

>par(mfrow=c(2,2)) ?(将图分成两行两列的四个图形)

……

  • 在原有图形上添加元素

>x <- rnorm(100) # 生成随机数

>hist(x,freq=F) ? # 绘制直方图

>curve(dnorm(x),add=T) # 添加曲线

>h <- hist(x, plot=F) # 绘制直方图

>ylim <- range(0, h$density, dnorm(0)) #设定纵轴的取值范围

>hist(x, freq=F, ylim=ylim) ?#绘制直方图

>curve(dnorm(x),add=T,col=”red”) ?#添加曲线

5

R可以灵活的编写程序,用户自己编写的程序可以直接调用。编程时无需声明变量的类型,这与C,C++等语言不同,其实这个过程就是打包的过程。

基本格式

函数名 <- function(数据,参数1= 默认值,…)

??????{

??????????异常处理;

??????????表达式(循环/判别);

??????????return(返回值);

???????}

函数内部也可用#添加注释

总结

R是开源的统计绘图软件,也是一种脚本语言,有大量的程序包可以利用。本文仅仅粗略地介绍了有关R软件的部分使用方法,对于R的深层次的运用,三言两语难以总结。

今后的推文中,我们会从

①基础知识与R界面介绍

②R语言环境(脚本,包,作图系统,数据读入,导出,数据外接这些和其他软件和程序交互性操作)

③描述性图(包括发文章经常用到的统计图表,直方图,条图等)

④常用的临床统计检验(t,anova,kw,reg,corr,chisq)

⑤高级统计的几个小方法的汇总(logistic临床最常用的回归,我最近在用的nomogram图,生存分析等)几个方面系统性的阐述R知识。

如果有兴趣的朋友可以持续关注后续推文,多查阅相关资料,掌握R语言会很大程度上给统计分析助力。同时,相关的配套网课正在录制,敬请期待

参考资料

  1. 《R软件教程》Emmanuel Paradis, Institut des Sciences de l’Evolution, 2005
  2. 《R语言初步—数据处理、绘图与编程》张金龙 2010年6月

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com