第二章 R的基本原理与核心
本章概要
♦
R
的基本原理
♦
R
的求助方法
♦
R
的主要数据结构
♦
R
的图形功能
♦
R
的编程方法
2.1 R的基本原理
R默认的命令提示符是
‘>
’
,表示正在等待输入命令。如果一个语句在一行中输不完,
按回车键
,
系统会自动产生一个续行符“+”, 语句或命令输完后系统又会回到命令提示符.
在同一行中输入多个命令语句
,
则需要使用分号来隔开.
在
Windows
系统中
,
能直接运行下拉菜单中的一些操作命令(
如在线帮助,打开文件等。
R的语法非常简单和直观. 例如,线性回归的命令lm(yx)表示以
x为自变量,
y为响应变量来拟合一个线性模型. 合法的
R函数总是带有圆括号的形式,即使括号内没有内容(如ls( )). 如果直接输入函数名而不输入圆括号,
R则会自动显示该函数的一些具体内容. 因此在
R中所有的函数后都带
有圆括号以区别于对象
(object).
当
R
运行时,所有变量、数据、函数及结果都以对象的形式存入计算机的活动内存中,并冠有相应的名字代号。
运行一个
R函数可能不需要设定任何参量,原因是所有的参量都可以被默认为缺省值,当然也有可能该函数本身就不含任何参量。
所有能使用的
R函数都被包含在一个库(library) 中, 在
R安装文件夹的library目录下. 这个目录下含有具有各种功能的包(packages),其中名为base的包是
R的核心.
R语言中的赋值符号一般是由一个尖括号与一个负号组成的箭头形标志,
该符号可以是从左到右的方向,也可以相 反.
赋值也可以用函数
assign( )
实现
,
还可以用等号“
=
”
,
但它们很少使用
.
例如:
> n <- 10
> n
[1] 10
> 10 -> n
> n
[1] 10
> assign("n", 10)
> n
[1] 10
> n=10
> n
[1] 10
方括号中的数字
1
表示从
n
的第一个元素开始显示
.
其实该命令的功能在这里与函数print( )
相似
,
输出结果与
print(n)
相同
。
对象的名字必须是以一个字母开头(A-Z
或
a-z),
中间可以包含字母、数字
(0–9)
、点
(.)
及下划线
( ).
因为R
对对象的名字区分大小写,所以
x
和
X
就可以代表两个完全不同的对象
.
下面的例子说明了
R
中的算术运算符
(
加、减、乘、除、乘方、开方、指数)
的使用方法。
> ((10 + 2) * 5-2^4)/4
[1] 13
> sqrt(3)+exp(-2)
[1] 1.867386
R中使用井号(#)表示注释的开始.
2.2 R的在线帮助
R
的帮助分成两类:
1)
关于
R
的基本知识
:
通过命令
> help.start( )
或
R
用户界面上的“帮助”菜单的“
html
帮助”得到
.
2)
关于
R
中的函数或关键字符
:
i.
命令
> help(fun)
或
> ?fun
会立即显示名为“
fun
”函数的帮助页面
,
而命令
> help("char")
则会显示某个具有特殊语法意义字符“
char
”的帮助页面
.
页面的第一行一般会显示此函数或字符的所属的程序包(
package
)
,然后是标题,标题下面则是一些详细信息。
2.3 一个简短的R会话
下面通过一个具体的例子来说明如何利用R软件进行数据的统计分析, 此例使用R内嵌的数据集mtcars. 它在datasets(数据)包中, 此包像base一样随R的启动自动加载。
1.数据的描述
命令
> ?mtcars
显示数据集
metars
的基本信息,
显示为
mtcars package:datasets R Documentation
Motor Trend Car Road Tests
Description:
The data was extracted from the 1974 _Motor Trend_ US magazine,
and comprises fuel consumption and 10 aspects of automobile design
and performance for 32 automobiles (1973-74 models).
Usage:
mtcars
Format:
A data frame with 32 observations on 11 (numeric) variables.
[, 1] mpg Miles/(US) gallon
[, 2] cyl Number of cylinders
[, 3] disp Displacement (cu.in.)
[, 4] hp Gross horsepower
[, 5] drat Rear axle ratio
[, 6] wt Weight (1000 lbs)
[, 7] qsec 1/4 mile time
[, 8] vs Engine (0 = V-shaped, 1 = straight)
[, 9] am Transmission (0 = automatic, 1 = manual)
[,10] gear Number of forward gears
[,11] carb Number of carburetors
Note:
Henderson and Velleman (1981) comment in a footnote to Table 1:
‘Hocking [original transcriber]'s noncrucial coding of the Mazda's
rotary engine as a straight six-cylinder engine and the Porsche's
flat engine as a V engine, as well as the inclusion of the diesel
Mercedes 240D, have been retained to enable direct comparisons to
be made with previous analyses.’
Source:
Henderson and Velleman (1981), Building multiple regression models
interactively. _Biometrics_, *37*, 391-411.
Examples:
require(graphics)
pairs(mtcars, main = "mtcars data", gap = 1/4)
coplot(mpg ~ disp | as.factor(cyl), data = mtcars,
panel = panel.smooth, rows = 1)
## possibly more meaningful, e.g., for summary() or bivariate plots:
mtcars2 <- within(mtcars, {
vs <- factor(vs, labels = c("V", "S"))
am <- factor(am, labels = c("automatic", "manual"))
cyl <- ordered(cyl)
gear <- ordered(gear)
carb <- ordered(carb)
})
summary(mtcars2)
2.数据的浏览与编辑
1)
数据的浏览
命令
> mtcars
可以显示数据集
mtcars
中全部的
32
个观测值
.
命令
> head(mtcars)
仅显示数据集
mtcars
中前
7
个观测值
.
命令
> names(mtcars)
仅显示数据集
mtcars
中的变量
,
在此为
11
个指标
.
2)
数据的编辑
数据的编辑主要有两种方式
(
函数
)
:
命令
> data.entry(mtcars)
通过
R
的数据编辑器打开数据集
mtcars
,
除了浏览数据集外,这里我们还可以对变量及其观测值进行修改.
命令
> MTcars <- edit(mtcars)
同样启动
R
的数据编辑器
,
在此可对原来的数据集
mtcars
进行编辑,
完成后将生成的新的数据集赋给MTcars
,
而原来的数据集保持不变
. 如果你要修改原来的数据集,使命令edit( )
前后的数据集同名即可.
因此命令
edit(mtcars)
将无法完成对数据的修改
.
命令
> xnew <- edit(data.frame( ))
可以编辑生成新的数据集
xnew
.
另外
,
对于一维的数据
,
edit( )
打开的是R Editor
.
试比较下面的例子中两个命令的区别
> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
> x
[1] 10.4 5.6 3.1 6.4 21.7
> data.entry(x)
> edit(x)
命令
> fix(mtcars)
可以完成数据集
mtcars
的直接修改
.
因此它等价于命令
> mtcars <- edit(mtcars)
3. 属性数据的分析
变量
cyl(
汽缸数
)
为属性变量
,
命令
> table(cyl)
告诉我们变量
cyl
取
3
个值:
4
,
6
,
8
,相应的频数为
11, 7, 14.。
> barplot(table(cyl))
显示了
cyl
的频数直方图
.
要注意的是
,
命令
> barplot(cyl)
在此不适用
, 它仅适用于数值型变量。#结果显示cyl的所有数的直方图
4. 数值型数据的分析
统计分析中主要涉及数值型数据.
对此我们可考查它们的图形特征及常用 的特征量.
画茎叶图
(stem-and-leaf plot),
命令为
> stem(mpg)
.
画直方图
,
命令为
> hist(mpg)
.
画框须图
(stem-and-leaf plot),
命令为
> boxplot(mpg)
.
计算平均值
,
命令为
> mean(mpg)
.
计算截去
10%
的平均值
,
命令为
> mean(mpg, trim = .1)
.
按分组变量
cyl
计算
mpg
的分组平均值
,
命令为
> tapply(mpg,cyl,mean)
计算
cyl
为
4
的那些
mpg
的平均值
,
命令为
> mean(mpg[cyl == 4])
.
计算四分位数的极差
(
interquartile range
),
命令为
> IQR(mpg)
.
计算样本常用的分位数
:
极小、极大、中位数及两个四分位数
,
命令为
> quantile(mpg)
或者
> fivenum(mpg)
计算由向量
prob
给定的各概率处的样本分位数
,
命令为
> quantile(mpg, probs)
例如
probs = c(0.1, 0.5, 99.5)/100.
可见
,
quantile( )
比
fivenum( )
更
为一般
.
计算常用的描述性统计量
,
它们分别是最小值
(Min.)
、第一四分位数
(1st
Qu.)
、中位数
(Median)
、平均值
(Mean)
、第三分位数
(3rd Qu.)
和最大
值
(Max.),
命令为
> summary(mpg)
.
计算标准差
,
命令为
> sd(mpg)
.
计算中位绝对离差
(median absolute deviation),
命令为
> mad(mpg)
.
5. 寻找二元关系
画 二 维 散 点 图
,
例 如
cyl
与
mpg
的 散 点 图
,
可 通 过 下 面 的 命 令 得 到
.
> plot(cyl,mpg)
注意
:
相仿命令
plot(hp,mpg)
可得到
hp
与
mpg
的散点图
.
但
32
个点对应了不同的汽缸
,
因此按
cly
为图例作出散点图更清晰,
命令为
> plot(hp,mpg,pch=cyl)
> legend(250,30,pch=c(4,6,8),
> legend=c("4 cylinders","6 cylinders","8 cylinders"))
拟合线性回归
,
例如命令
> z <- lm(cyl ~ mpg)
可以得到
Call:
lm(formula = cyl ~ mpg)
Coefficients:
(Intercept) mpg
11.2607 -0.2525
线性回归的截距为
11.2607,
斜率为
-0.2525.
相关系数
(
或
R
2
)
考查回归拟合好坏的程度
.
命令
> cor(cyl,mpg)
可以得到相关系数
(Pearson correlation coeffiffifficient)R,
其平方
> cor(cyl,mpg)^2
得到
R
2
为
0.72618,
表明数据变化的
72.6%
可以用汽缸数
(
cyl
)
与每加仑的英里数(
mpg
)
来刻划
.
残差分析
:
> lm.res <- lm(cyl ~ mpg) #
将回归分析的结果作为对象
#
保存到
lm.res
中
> lm.resids <- resid(lm.res) #
提取残差向量
> plot(lm.resids) #
考查残差的散点图
> hist(lm.resids) #
考查残差的直方图
:
钟型
?
> qqnorm(lm.resids) #
残差的
QQ
图是否落在直线上
?
结论
:
从残差分析我们可以得出汽车的汽缸数与每加仑的里程数可以用线性回归来刻划.
6. 结束分析并退出R
> detach(mtcars) #
从内存中清除数据集
mtcars
> q( ) #
退出
R
累了,明天继续。