41
第第第 S-Plus 第第

第二章 S-Plus 基础

  • Upload
    osias

  • View
    67

  • Download
    0

Embed Size (px)

DESCRIPTION

第二章 S-Plus 基础. 本章要求. 熟悉在 S-Plus 命令行中 S-Plus 基本数据处理 熟悉在 S-Plus 命令行中进行基本数据基本运算 编写简单的计算函数 绘制基本图形. 第一节 S-Plus 环境. S-Plus 用户界面 算术运算. S-Plus. S 语言和 S 的扩展 S-Plus ,是由 AT&T Bell 实验室于 20 世纪 70 年代末 ~80 年代初研制开发的,其中 Rick Becker 和 John Chambers 是主要创始人之一。. S-Plus 的主要应用特点:. - PowerPoint PPT Presentation

Citation preview

Page 1: 第二章  S-Plus 基础

第二章 S-Plus 基础

Page 2: 第二章  S-Plus 基础

中国人民大学统计学院

本章要求

熟悉在 S-Plus 命令行中 S-Plus 基本数据处理 熟悉在 S-Plus 命令行中进行基本数据基本运

算 编写简单的计算函数 绘制基本图形

Page 3: 第二章  S-Plus 基础

中国人民大学统计学院

第一节 S-Plus 环境 S-Plus 用户界面 算术运算

Page 4: 第二章  S-Plus 基础

中国人民大学统计学院

S-Plus

S 语言和 S 的扩展 S-Plus ,是由 AT&T Bell 实验室于 20 世纪 70 年代末 ~80 年代初研制开发的,其中 Rick Becker 和 John Chambers 是主要创始人之一。

Page 5: 第二章  S-Plus 基础

中国人民大学统计学院

S-Plus 的主要应用特点:1. S-Plus 拥有强大的面向对象的开发环境。

2. 作为标准的统计语言, S 拥有几乎所有,在 S-Plus 中,用户可以随处自定义的各种函数,延伸基本的分析方法。

3. 作为面向对象的语言, S 集数据的定义、插入、修改和函数计算等功能于一体,

语言风格统一,可以独立完成数据分析生命周期的全部活动。

4. S-Plus 提供了非常丰富的 2D 和 3D 图形库。

5. 与 S-Plus 类似的有新近开发的 R , R 最早由 Auckland 大学统计系的 Robert Gentleman 和 Ross Ihaka 于 1995 年开始研制开发,从 1997 年开始免费公开发布。 R 在计算功能上比 S-Plus 有更高的效率,但由于推出时间较短,因而不如 S-Plus 普及。 S-Plus 和 R 二者在语法和功能实现上区别不大,因而学习 S-Plus 的用户可以轻松转到 R ,反之亦然。

Page 6: 第二章  S-Plus 基础

中国人民大学统计学院

S-Plus 界面六项内容:

Object Explorer (对象浏览器); Commands Window (命令窗口) ; Graph Sheets (图形操作表) ; Script Window (草稿窗口); Menus (菜单); Toolbars (工具栏)。

Page 7: 第二章  S-Plus 基础

中国人民大学统计学院

第二节 向量的基本操作

一、向量的定义和表示二、向量的基本操作二、向量的算术运算三、向量的逻辑运算

Page 8: 第二章  S-Plus 基础

中国人民大学统计学院

一、向量的定义一、算术运算: S-Plus 默认的命令提示符是“ >” 1) 计算 7 X 3 ,可如下执行命令: > 7*3 > 21 2) 计算 (7+2) X 3 ,可如下执行命令: > (7+2)*3 > 42 3) 计算 \log2 ( 12 /3 ),可如下执行命令: > log(12/3,2) > 2 4) 计算幂 2 X 32 ,可如下执行命令: > 2*(3^2) > 18

Page 9: 第二章  S-Plus 基础

中国人民大学统计学院

一、 向量的定义

二、赋值: > x<-3 > y_1+x 屏幕打印变量如下, x : > x > 3 > print(x*y) > 12

Page 10: 第二章  S-Plus 基础

中国人民大学统计学院

二、向量的基本操作

1 、连接命令 ;2 、序列命令 seq;3 、循环命令 rep;

Page 11: 第二章  S-Plus 基础

中国人民大学统计学院

1 、连接命令 例 1 : > A.brand<-c(15,27,89) # 生成数值类型的向量 > A.brand*0.8 [1] 12.0 21.6 71.2 > title.text<-c(“This”,“is”,“for”,“sale”)# 生成非

数值类型的向量1. 向量 a中第 i位置元素表示: > A.brand[1] [1] 15 > A.brand[length(A.brand)] [1] 89 如果输入的位置超出向量的长度,则 S-Plus 输出 NA , NA 表

示数据缺失,如下所示: > A.brand[6] [1] NA

Page 12: 第二章  S-Plus 基础

中国人民大学统计学院

1 、连接命令(续)2. 在向量中插入新的数据:

在 A.brand 向量末尾添加两个新产品价格的书写方法是:

例 1 续 :

> add.A.brand<-c(A.brand,189,240)

> add.A.brand

[1]15 27 89 189 240

在向量的开头插入新数据的书写方法如下:

> addbegin.A.brand<-c(12,13,A.brand)

[1] 12 13 15 27 89

思考题 1 : 如何在向量的第i个位置后插入数据?

Page 13: 第二章  S-Plus 基础

中国人民大学统计学院

1 、连接命令(续)

3. 向量与向量的合并: B.brand<-c(35,40,58) AB.brand<-c(A.brand,B.brand) [1] 15 27 89 35 46 58 向量中元素的个数,称为向量的长度,查

看向量中元素的个数,可以使用 length 命令,如下所示:

length(add.A.brand) [1] 5

Page 14: 第二章  S-Plus 基础

中国人民大学统计学院

1 、连接命令(续)4. 在向量中删除数据: 将 A.brand 向量中起始位置的产品价格删除的方

法用减法表示,如下表示:例 1 续 : > delete.A.brand<-add.A.brand[-1] > delete.A.brand [1] 27 89 189 240 将 A.brand 向量末尾的产品价格删除的方法是: > delete.A.brand<-add.A.brand[-length(add.

A.brand)] > delete.A.brand [1] 15 27 89 189

Page 15: 第二章  S-Plus 基础

中国人民大学统计学院

2 、序列命令 seqseq 命令的语法如下所示: seq(lower,upper,[increment],[length],...)例 2: > seq(1,10) [1] 1 2 3 4 5 6 7 8 9 10 > seq(1900,2000,6) [1] 1900 1906 1912 1918 1924 1930 1936 1942 1948

1954 [11] 1960 1966 1972 1978 1984 1990 1996 > seq(1,0,-0.1) [1] 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.0 > 1:10 #seq(1,10) > seq(0,1,0.05,length=10)

Page 16: 第二章  S-Plus 基础

中国人民大学统计学院

3 、循环命令 reprep 命令的语法结构如下所示: rep(pattern,number of times,length)例 3 > rep(2,6) 2 2 2 2 2 2 > rep(c(0,5),2) 0 5 0 5 > rep(1:3,3) 1 2 3 1 2 3 1 2 3 > rep(c(1,4,6),length=5) 1 4 6 1 4

思考题 3 :

猜测如下程序的输出结果: rep(c(1,2,3), c(1,2,3))

Page 17: 第二章  S-Plus 基础

中国人民大学统计学院

三、向量的算术运算向量算术运算是对标量运算的扩展:例 4: > a<-seq(0,20,3) > 2*a 0 6 12 18 24 30 36 > a<-2*(0:2) > b<-1:3

Page 18: 第二章  S-Plus 基础

中国人民大学统计学院

四、向量的逻辑运算S-Plus 中有两个逻辑值: TRUE 和 FALSE :

> 3==4 F 常用的逻辑运算符如表 1.3 :

Page 19: 第二章  S-Plus 基础

中国人民大学统计学院

向量的逻辑运算例:

例 6: 假设 price 表示某一公司推出的所有产品价目表,将 price 中大于 10 的所有数据找出来:

> price<-c(2,3,10,11,15) > large10<-price[price>10] [1] 11 15

Page 20: 第二章  S-Plus 基础

中国人民大学统计学院

第三节 复杂的数据结构

矩阵 数组 数据框架 列表

Page 21: 第二章  S-Plus 基础

中国人民大学统计学院

一、矩阵 1. 定义矩阵: 例 7 :假定有国民经济数据 data ,其中显示了 2003 年中国、日本、韩国三个国家的国家生产总值 GDP (单位: 1012 US$ ),年末人口(单位:亿)及通货膨胀率(单位: 100% ):

> macroecno<-c(1.4,12.92,1.2,4.5,0.56,-0.8,10.88,2.91,1.2)

> asia.data<-matrix(macroecno,nrow=3,ncol=3,byrow=T,dimnames)

> asia.data [,1] [,2] [,3] [1,] 1.4 12.92 1.2 [2,] 4.5 0.56 -0.8 [3,] 0.4 0.5 1.7

Page 22: 第二章  S-Plus 基础

中国人民大学统计学院

例题例 7 续 : 给数据指定列名和行名:> dimnames(asia.data) NULL > dim(asia.data) 3,3 > row.name<-c("P.R.China","Japan","KOREA") > col.name<-c("GDP","POP","INFLAT") > dimnames(asia.data)<-list(row.name,NULL) > asia.data [,1] [,2] [,3] P.R.China 1.4 12.92 1.2 Japan 4.5 0.56 -0.8 KOREA 0.4 0.5 1.7 > dimnames(asia.data)<-list(NULL,col.name)

Page 23: 第二章  S-Plus 基础

中国人民大学统计学院

例题(续) > asia.data GDP POP INFLAT [1] 1.4 12.92 1.2 [2] 4.5 0.56 -0.8 [3] 0.4 0.5 1.7 > dimnames(asia.data)<-list(row.name,col.name) > asia.data GDP POP INFLAT P.R.China 1.4 12.92 1.2 Japan 4.5 0.56 -0.8 KOREA 0.4 0.5 1.7 > dimnames(asia.data) [[1]]: [1] "P.R.China" "Japan" "KOREA" [[2]]: [1] "GDP" "POP" "INFLAT"

Page 24: 第二章  S-Plus 基础

中国人民大学统计学院

1 、矩阵2. 矩阵元素的表示:矩阵 a 中第 i,j 位置的元素表示为: a[i,j] ,比如: > asia.data[2,1:2] GDP POP 4.5 0.56 例 7 续 : > asia.data[2,] GDP POP INFLAT 4.5 0.56 -0.8 > asia.data["Japan","POP"]<-59# 可以用行名或列名直接提取行或列

向量 > asia.data["Japan","POP"] 59

Page 25: 第二章  S-Plus 基础

中国人民大学统计学院

1 、矩阵3. 矩阵的运算:( 1 )元素对元素的加、减、乘、除法运算是向量的运算的确延拓。

( 2 )一个数与矩阵的运算相当于数与矩阵的每一个元素的运算。( 3 )矩阵用 %*% 表示: > a [,1] [,2] [1,] 1 3 [2,] 2 4

( 4 ) > x<-c(2,1) > a%*%x [,1] [1,] 5 [2,] 8

> solve(a)

[,1] [,2]

[1,] -2 1.5

[2,] 1 -0.5

思考题 4. 计算 asia.data 中的人均 GDP.

Page 26: 第二章  S-Plus 基础

中国人民大学统计学院

1 、矩阵4. 矩阵的合并 : 增加若干列用 cbind 函数,增加若干行用 rbind 函

数;求矩阵列数用 cnol 表示,求解矩阵行数用 rnol 表示 : > a [,1] [,2] [1,] 1 3 [2,] 2 4 > addc<-c(5,6) > a<-cbind(a,addc) > a addc [1,] 1 3 5 [2,] 2 4 6

思考题 5. 在 asia.data 中插入 Australia 数据: GDP:0.53;POP:0.10;INFL:2.

3.

Page 27: 第二章  S-Plus 基础

中国人民大学统计学院

二、数组数组则是多维矩阵,生成数组与生成矩阵类似:> a<-array(1:24,c(3,4,2))> a , , 1 [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 , , 2 [,1] [,2] [,3] [,4] [1,] 13 16 19 22 [2,] 14 17 20 23 [3,] 15 18 21 24

Page 28: 第二章  S-Plus 基础

中国人民大学统计学院

2. 数组的行列计算函数: apply(data,dim,function,...) 例 1.7 续:计算 asia.data 中 GDP,POP,INFLAT 的最小值:

> apply(asia.data,2,min) GDP POP INFLAT 0.4 0.5 -0.8例 1.7 续 :求数组 asia.data 中的最小值所在的行和列: > col(a)[asia.data==min(asia.data)] > 3 > row(a)[asia.data==min(asia.data)] > 2思考题 6. 请输出 asia.data 中 GDP 最小值所在的行和

列 .

Page 29: 第二章  S-Plus 基础

中国人民大学统计学院

三、数据框架 数据框架可以理解为二维数据表,其中不同

列具有不同的数据类型。 > asia.frame<-data.frame(asia.frame,IS.

AS) > asia.frame GDP POP INFLAT IS.AS P.R.China 1.4 12.92 1.2 AS Japan 4.5 0.56 -0.8 AS KOREA 0.4 0.5 1.7 AS > apply(asia.data,2,max) GDP POP INFLAT 4.5 12.92 1.7

Page 30: 第二章  S-Plus 基础

中国人民大学统计学院

四、列表 列表是比数据框架更为松散的数据结构,列表可以

将不同类型,不同长度的数据打包,而数据框架中要求被插入的数据长度和原来的长度是一致的。

> IS.AS<-c("P.R.China","Japan","KOREA") > list(asia.frame,country) [[1]]: GDP POP INFLAT IS.AS P.R.China 1.4 12.92 1.2 AS Japan 4.5 0.56 -0.8 AS KOREA 1.4 4.5 0.4 AS [[2]]: [1] "P.R.China" "Japan" "KOREA"

Page 31: 第二章  S-Plus 基础

中国人民大学统计学院

第四节 数据处理1. 从键盘输入数据 : 例 8: > x_scan( ) 1: 23 45 68 8 5: 34 7 7: > x [1] 23 45 68 8 34 72. 读入矩阵: 例 9: > matrix(scan("c:\\data\\wh.txt"),,3) V1 V2 V3 1 0.64 0.32 0 2 0.28 0.14 1 3 0.00 1.23 0

Page 32: 第二章  S-Plus 基础

中国人民大学统计学院

第四节 数据处理3. 读入数据框架 : >a_read.table("c:\\data\\wh.txt",header=T)

V1 V2 V3 1 0.64 0.32 0 2 0.28 0.14 1 3 0.00 1.23 0

Page 33: 第二章  S-Plus 基础

中国人民大学统计学院

第四节 数据处理编写函数 :

常用的函数控制命令及语法如下所示: 1. 控制结构: if (condition) { 语句 1} else

{ 语句 2}2. 循环结构:

for ( 变量 in 序列 ) 语句 while ( condition) 语句 repeat ( 语句 )

3. 跳出: break

Page 34: 第二章  S-Plus 基础

中国人民大学统计学院

举例例 11 :计算 1,2,… 数列的连乘积,直到积大于

105. \small\begin{verbatim} > n<-0 #iteration counter > times.so.far<-1 while (times.so.far<=10^5) { n <-n+1 times.so.far <-times.so.far*n }

Page 35: 第二章  S-Plus 基础

中国人民大学统计学院

常用统计函数

dnorm(x): 计算标准正态分布点 x 处的密度值 ;

pnorm(x,2,1) : 计算均值为 2 ,标准差为 1的正态分布点 x 处的分布函数值 P(X<x);

qnorm(p,3,2) : 计算均值为 3 ,标准差为 2的正态分布 p- 分位数 ;

rnorm(n) : 产生标准正态分布伪随机数 n 个 .

Page 36: 第二章  S-Plus 基础

中国人民大学统计学院

Page 37: 第二章  S-Plus 基础

中国人民大学统计学院

x <- 1:20y <- x**3plot(x,y)points(rev(x),y) lines(x,5432-0.5*y) points(x^0.5,y,pch=3) #add crosses points(x,8000-y,pch="$") #use a dollar symbol lines(x,y,lwd=4) # thick line lines(rev(x),y,lty=2) # dashed line plot(x,y,xlab="X Is Across",ylab="Y is Up") title("Titles are Tops") text(6,4000,"This goes anywhere")

第五节 S-Plus 图形功能

Page 38: 第二章  S-Plus 基础

中国人民大学统计学院

5 10 15 20

X Is Across

020

0040

0060

0080

00

Y is

Up

Titles are Tops

This goes anywhere

5 10 15 20

x

020

0040

0060

0080

00

y

$ $ $ $ $$

$

$

$

$

$

$

$

$

$

$

$

$

$

$

Page 39: 第二章  S-Plus 基础

中国人民大学统计学院

Page 40: 第二章  S-Plus 基础

中国人民大学统计学院

作图:继续

y <- rt(200, df = 5)

qqnorm(y)

qqline(y, col = 2)

-3 -2 -1 0 1 2 3

Quantiles of Standard Normal

-6

-4

-2

02

y

x <- seq(-10, 10, length= 30)

y <- x

f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }

z <- outer(x, y, f)

persp(x, y, z)

Page 41: 第二章  S-Plus 基础

中国人民大学统计学院

本章内容回顾

熟悉在 S-Plus 命令行中 S-Plus 基本数据处理 熟悉在 S-Plus 命令行中进行基本数据基本运

算 编写简单的计算函数 绘制基本图形