C++,python,热爱算法和机器学习
全部博文(1214)
分类: LINUX
2012-05-09 02:01:36
这段时间为了后面比赛和毕设的各种统计分析的需要,决定系统学习一下R语言。毕竟Linux版本的 SPSS和SAS都是商业软件,穷学生也是消费不起的。更何况从学习知识的角度来说,R语言的学习还可以顺带复习巩固下概率论的基础,而SPSS这样的软 件可能就是随便点几下出结果了。想来去年的数模全国赛就已经意识到这个问题(聚类分析的时候中间很多过程的物理意义没搞明白),虽然后来答辩的时候得以侥 幸逃过。
大概决定用一个星期的时间学完,可能要写5到6篇文章来做完整个学习笔记。
R语言简介早在二十年前,专业统计界已经广泛使用另一种专业统计软件S-PLUS。但是S-PLUS是一种收费的软件平台,其计算机语言称为S,由于这种软件 非常昂贵,因此也就未能普及于教育界。直到90年代末期,跟S语言极其相似的R语言面世,而最重要的是R的软件平台是免费的,这也大大地增加了它的普及 性。虽然R为免费软件,但它拥有很多其他收费软件没有的有点
上面就是一些R语言不同于其他统计分析软件的地方。当然了,R的优点不仅仅如此,更多的背景知识请自行Google吧。
R语言入门 下载及安装RR应该早已进入各大Linux发行版的官方源,示例下Ubuntu好了,Archlinux用户pacman自行安装。
apt-get install r-base-core
apt-get install rkward
|
安装完毕之后,即可在菜单中找到rkward,进入后选择新建空脚本,方便直接实验计算。当然,直接在终端中用命令计算也是可以的,只是如果记录太久,终端内容也会积累太多难以查找历史命令了。
基本运算命令基本的常用运算么有太多好说的,跟MATLAB类似,以下简单示例几个:
> 2+3
[1] 5
> sqrt(9)
[1] 3
> abs(-4)
[1] 4
> sqrt(9
+ )
[1] 3
|
如你所见,sqrt和abs的语法几乎与MATLAB如出一辙。如果一句未完,下句默认以+开头表示继续。这里sqrt和abs可以理解成命令,当 然其实也是R内置的函数。在R里面,函数的格式可以分为“有自变量”和“无自变量”两种。“无自变量”直接输入函数名即可,如:funcname()即 可。相反则需要:funcname(arg1,arg2)。如果去掉括号会显示该函数的定义。运算结果中的[1]代表着所得答案的第一个元素,这样在显示 向量的时候比较方便,后面会很常见。
变量和赋值
> x=sqrt(9)
> x
[1] 3
> y="hello world"
> y
[1] "hello world"
|
如你所见,R中我们可以使用"="或者“<-”来将数值赋给一个变量。我自己已经习惯于“=”来赋值。需要注意的一点是:R的变量名中是不允许有空格和“-”的,不过下划线还是可以的。
向量上面所用的例子都是标量,但是在统计学中,几乎所有的数据都是以组的形式来表现。在R中,我们需要以向量的形势来输入一组数字。举例来说,我们可以利用向量的形式吧下面这组数据存储在一个变量中:
> vector=c(1,2,3,4,5,6,7)
> vector
[1] 1 2 3 4 5 6 7
> vector+2
[1] 3 4 5 6 7 8 9
> vector*2
[1] 2 4 6 8 10 12 14
|
在这里,vector是一个包含了7个数值的向量,而c()则指示R在括号中的数值是以向量的形式输入。再输入vector的时候,则会显示变量的内容。如上面所演示的那样,向量的运算和标量的运算时相同的。
> mean(vector)
[1] 4
> var(vector)
[1] 4.666667
|
函数mean()和var()可以用来计算变量的平均值和方差,非常方便。这里也是可以使用vector[1:3]这样的形式来对向量中的元素进行选择。特别值得一提的是可以使用vector[vector>4]这样的基本逻辑形式来选择适当的子集。
R例子以上示例中的数据全部都是手动输入的,当然R是可以读取外部数据的。比如我们直接来读取内置的trees数据组来操作。trees所包含的是31棵樱桃树的数据,
> data(trees)
> summary(trees)
Girth Height Volume
Min. : 8.30 Min. :63 Min. :10.20
1st Qu.:11.05 1st Qu.:72 1st Qu.:19.40
Median :12.90 Median :76 Median :24.20
Mean :13.25 Mean :76 Mean :30.17
3rd Qu.:15.25 3rd Qu.:80 3rd Qu.:37.30
Max. :20.60 Max. :87 Max. :77.00
|
有时候简单的几幅图片相对于数据来说,更能清楚表达出数据的特质。例如想画出树木体积的直方图:
> vol=trees[["Girth"]]^2*trees[["Height"]]/(4*pi)
> hist(vol,col=1)
|
hist是画直方图的命令,后面还会有很多画图的命令。关于hist,可以help(hist)一下来查询详细用法。若想以图像的方式来表达树木体积和可用木材的关系,可以:
> plot(trees[["Volume"]],vol,col="blue")
|
这样体积值就会显示在图像中的x轴,而vol则会显示于图像的y轴。图像中也显示它们有明显的对应关系。不过有一点,如果只输入一个向量,函数plot会把向量数值显示在y轴,而数值的次序则会显示在x轴。可以利用这个方法来作残差分析,观察余量的标差是否一致。