You are on page 1of 11

5

Dng R cho cc php tnh


n gin v ma trn
Mt trong nhng li th ca R l c th s dng nh mt my tnh cm tay.
Tht ra, hn th na, R c th s dng cho cc php tnh ma trn v lp chng. Trong
chng ny ti ch trnh by mt s php tnh n gin m hc sinh hay sinh vin c th
s dng lp tc trong khi c nhng dng ch ny.

5.1 Tnh ton n gin


Cng hai s hay nhiu s vi nhau:

Cng v tr:

> 15+2997
[1] 3012

> 15+2997-9768
[1] -6756

Nhn v chia

S ly tha: (25 5)3

> -27*12/21
[1] -15.42857

> (25 - 5)^3


[1] 8000

Cn s bc hai: 10

S pi ()

> sqrt(10)
[1] 3.162278

> pi
[1] 3.141593
> 2+3*pi
[1] 11.42478

Logarit: loge

Logarit: log10

S m: e2.7689

Hm s lng gic

> exp(2.7689)
[1] 15.94109

> cos(pi)
[1] -1

> log(10)
[1] 2.302585

> log10(100)
[1] 2

> log10(2+3*pi)
[1] 1.057848

Vector
> x <- c(2,3,1,5,4,6,7,6,8)
> x
[1] 2 3 1 5 4 6 7 6 8
> sum(x)
[1] 42
> x*2

> exp(x/10)
[1] 1.221403 1.349859 1.105171 1.648
1.491825 1.822119 2.013753 1.822119
[9] 2.225541
> exp(cos(x/10))
[1] 2.664634 2.599545 2.704736 2.405
2.511954 2.282647 2.148655 2.282647
[9] 2.007132

[1]

2 10

8 12 14 12 16

Tnh tng bnh phng (sum of squares): 12 Tnh tng bnh phng iu chnh
n
+ 22 + 32 + 42 + 52 = ?
2
(adjusted
sum
of
squares):
( xi x ) = ?

> x <- c(1,2,3,4,5)


> sum(x^2)
[1] 55

i =1

> x <- c(1,2,3,4,5)


> sum((x-mean(x))^2)
[1] 10

Trong cng thc trn mean(x) l s trung


bnh ca vector x.
Tnh sai s bnh phng (mean square):
n

( x x )
i =1

/n= ?

> x <- c(1,2,3,4,5)


> sum((x-mean(x))^2)/length(x)
[1] 2

Tnh phng sai (variance) v lch


chun (standard deviation):
n

Phng sai: s 2 = ( xi x ) / ( n 1) = ?
2

i =1

> x <- c(1,2,3,4,5)


> var(x)
[1] 2.5

Trong cng thc trn, length(x) c


ngha l tng s phn t (elements) trong
vector x.

lch chun:

s2 :

> sd(x)
[1] 1.581139

5.2 S liu v ngy thng


Trong phn tch thng k, cc s liu ngy thng c khi l mt vn nan gii, v
c rt nhiu cch m t cc d liu ny. Chng hn nh 01/02/2003, c khi ngi ta
vit 1/2/2003, 01/02/03, 01FEB2003, 2003-02-01, v.v Tht ra, c mt qui lut chun
vit s liu ngy thng l tiu chun ISO 8601 (nhng rt t ai tun theo!) Theo qui
lut ny, chng ta vit:
2003-02-01
L do ng sau cch vit ny l chng ta vit s vi n v ln nht trc, ri dn dn n
n v nh nht. Chng hn nh vi s 123 th chng ta bit ngay rng mt trm hai
mi ba: bt u l hng trm, ri n hng chc, v.v V cng l cch vit ngy
thng chun ca R.
> date1 <- as.Date(01/02/06, format=%d/%m/%y)
> date2 <- as.Date(06/03/01, format=%y/%m/%d)

Ch chng ta nhp hai s liu khc nhau v th t ngy thng nm, nhng chng ta
cng cho bit c th cch c bng %d (ngy), %m (thng), v %y (nm). Chng ta c th
tnh s ngy gia hai thi im:

> days <- date2-date1


> days
Time difference of 28 days

Chng ta cng c th to mt dy s liu ngy thng nh sau:


> seq(as.Date(2005-01-01), as.Date(2005-12-31), by=month)
[1] "2005-01-01" "2005-02-01" "2005-03-01" "2005-04-01" "2005-05-01"
[6] "2005-06-01" "2005-07-01" "2005-08-01" "2005-09-01" "2005-10-01"
[11] "2005-11-01" "2005-12-01"

> seq(as.Date(2005-01-01), as.Date(2005-12-31), by=2 weeks)


[1]
[6]
[11]
[16]
[21]
[26]

"2005-01-01"
"2005-03-12"
"2005-05-21"
"2005-07-30"
"2005-10-08"
"2005-12-17"

"2005-01-15"
"2005-03-26"
"2005-06-04"
"2005-08-13"
"2005-10-22"
"2005-12-31"

"2005-01-29"
"2005-04-09"
"2005-06-18"
"2005-08-27"
"2005-11-05"

"2005-02-12"
"2005-04-23"
"2005-07-02"
"2005-09-10"
"2005-11-19"

"2005-02-26"
"2005-05-07"
"2005-07-16"
"2005-09-24"
"2005-12-03"

5.3 To dy s bng hm seq, rep v gl


R cn c cng dng to ra nhng dy s rt tin cho vic m phng v thit k th
nghim. Nhng hm thng thng cho dy s l seq (sequence), rep (repetition) v
gl (generating levels):
p dng seq

To ra mt vector s t 1 n 12:

> x <- (1:12)


> x
[1] 1 2 3
> seq(12)
[1] 1 2

4
4

5
5

6
6

7
7

8
8

9 10 11 12
9 10 11 12

To ra mt vector s t 12 n 5:

> x <- (12:5)


> x
[1] 12 11 10 9

> seq(12,7)
[1] 12 11 10

Cng thc chung ca hm seq l seq(from, to, by= ) hay seq(from, to,
length.out= ). Cch s dng s c minh ho bng vi v d sau y:

To ra mt vector s t 4 n 6 vi khong cch bng 0.25:

> seq(4, 6, 0.25)


[1] 4.00 4.25 4.50 4.75 5.00 5.25 5.50 5.75 6.00

To ra mt vector 10 s, vi s nh nht l 2 v s ln nht l 15

> seq(length=10, from=2, to=15)


[1] 2.000000 3.444444 4.888889 6.333333
10.666667 12.111111 13.555556 15.000000

7.777778

9.222222

p dng rep

Cng thc ca hm rep l rep(x, times, ...), trong , x l mt bin s v times


l s ln lp li. V d:

To ra s 10, 3 ln:

> rep(10, 3)
[1] 10 10 10

To ra s 1 n 4, 3 ln:

> rep(c(1:4), 3)
[1] 1 2 3 4 1 2 3 4 1 2 3 4

To ra s 1.2, 2.7, 4.8, 5 ln:

> rep(c(1.2, 2.7, 4.8), 5)


[1] 1.2 2.7 4.8 1.2 2.7 4.8 1.2 2.7 4.8 1.2 2.7 4.8 1.2 2.7 4.8

To ra s 1.2, 2.7, 4.8, 5 ln:

> rep(c(1.2, 2.7, 4.8), 5)


[1] 1.2 2.7 4.8 1.2 2.7 4.8 1.2 2.7 4.8 1.2 2.7 4.8 1.2 2.7 4.8

p dng gl
gl c p dng to ra mt bin th bc (categorical variable), tc bin khng tnh
ton, m l m. Cng thc chung ca hm gl l gl(n, k, length = n*k,
labels = 1:n, ordered = FALSE) v cch s dng s c minh ho bng vi
v d sau y:

To ra bin gm bc 1 v 2; mi bc c lp li 8 ln:

> gl(2, 8)
[1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2
Levels: 1 2

Hay mt bin gm bc 1, 2 v 3; mi bc c lp li 5 ln:


> gl(3, 5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3

To ra bin gm bc 1 v 2; mi bc c lp li 10 ln (do length=20):

> gl(2, 10, length=20)

[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
Levels: 1 2

Hay:
> gl(2, 2, length=20)
[1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2
Levels: 1 2

Cho thm k hiu:

> gl(2, 5, label=c("C", "T"))


[1] C C C C C T T T T T
Levels: C T

To mt bin gm 4 bc 1, 2, 3, 4. Mi bc lp li 2 ln.

> rep(1:4, c(2,2,2,2))


[1] 1 1 2 2 3 3 4 4

Cng tng ng vi:


> rep(1:4, each = 2)
[1] 1 1 2 2 3 3 4 4

Vi ngy gi thng:

> x <- .leap.seconds[1:3]


> rep(x, 2)
[1] "1972-06-30 17:00:00 Pacific Standard Time" "1972-12-31 16:00:00
Pacific Standard Time"
[3] "1973-12-31 16:00:00 Pacific Standard Time" "1972-06-30 17:00:00
Pacific Standard Time"
[5] "1972-12-31 16:00:00 Pacific Standard Time" "1973-12-31 16:00:00
Pacific Standard Time"
> rep(as.POSIXlt(x), rep(2, 3))
[1] "1972-06-30 17:00:00 Pacific Standard Time" "1972-06-30 17:00:00
Pacific Standard Time"
[3] "1972-12-31 16:00:00 Pacific Standard Time" "1972-12-31 16:00:00
Pacific Standard Time"
[5] "1973-12-31 16:00:00 Pacific Standard Time" "1973-12-31 16:00:00
Pacific Standard Time"

5.4 S dng R cho cc php tnh ma trn


Nh chng ta bit ma trn (matrix), ni n gin, gm c dng (row) v ct
(column). Khi vit A[m, n], chng ta hiu rng ma trn A c m dng v n ct. Trong R,
chng ta cng c th th hin nh th. V d: chng ta mun to mt ma trn vung A
gm 3 dng v 3 ct, vi cc phn t (element) 1, 2, 3, 4, 5, 6, 7, 8, 9, chng ta vit:
1 4 7

A = 2 5 8
3 6 9

V vi R:
> y <- c(1,2,3,4,5,6,7,8,9)
> A <- matrix(y, nrow=3)
> A
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9

Nhng nu chng ta lnh:


> A <- matrix(y, nrow=3, byrow=TRUE)
> A

th kt qu s l:
[1,]
[2,]
[3,]

[,1] [,2] [,3]


1
2
3
4
5
6
7
8
9

Tc l mt ma trn chuyn v (transposed matrix). Mt cch khc to mt ma trn


hon v l dng t(). V d:
> y <- c(1,2,3,4,5,6,7,8,9)
> A <- matrix(y, nrow=3)
> A
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9

v B = A' c th din t bng R nh sau:


> B <- t(A)
> B
[,1] [,2] [,3]
[1,]
1
2
3
[2,]
4
5
6
[3,]
7
8
9

Ma trn v hng (scalar matrix) l mt ma trn vung (tc s dng bng s ct), v
tt c cc phn t ngoi ng cho (off-diagonal elements) l 0, v phn t ng cho
l 1. Chng ta c th to mt ma trn nh th bng R nh sau:
> # to ra m ma trn 3 x 3 vi tt c phn t l 0.
> A <- matrix(0, 3, 3)
> # cho cc phn t ng cho bng 1

> diag(A) <- 1


> diag(A)
[1] 1 1 1
> # by gi ma trn A s l:
> A
[,1] [,2] [,3]
[1,]
1
0
0
[2,]
0
1
0
[3,]
0
0
1

5.4.1 Chit phn t t ma trn


> y <- c(1,2,3,4,5,6,7,8,9)
> A <- matrix(y, nrow=3)
> A
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9
> # ct 1 ca ma trn A
> A[,1]
[1] 1 4 7
> # ct 3 ca ma trn A
> A[3,]
[1] 7 8 9
> # dng 1 ca ma trn A
> A[1,]
[1] 1 2 3
> # dng 2, ct 3 ca ma trn A
> A[2,3]
[1] 6
> # tt c cc dng ca ma trn A, ngoi tr dng 2
> A[-2,]
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
3
6
9
> # tt c cc ct ca ma trn A, ngoi tr ct 1
> A[,-1]
[,1] [,2]
[1,]
4
7
[2,]
5
8
[3,]
6
9

> # xem phn t no cao hn 3.


> A>3
[,1] [,2] [,3]
[1,] FALSE TRUE TRUE
[2,] FALSE TRUE TRUE
[3,] FALSE TRUE TRUE

5.4.2 Tnh ton vi ma trn


Cng v tr hai ma trn. Cho hai ma trn A v B nh sau:
> A <- matrix(1:12, 3, 4)
> A
[,1] [,2] [,3] [,4]
[1,]
1
4
7
10
[2,]
2
5
8
11
[3,]
3
6
9
12
> B <- matrix(-1:-12, 3, 4)
> B
[,1] [,2] [,3] [,4]
[1,]
-1
-4
-7 -10
[2,]
-2
-5
-8 -11
[3,]
-3
-6
-9 -12

Chng ta c th cng A+B:


> C <- A+B
> C
[,1] [,2] [,3] [,4]
[1,]
0
0
0
0
[2,]
0
0
0
0
[3,]
0
0
0
0

Hay A-B:
> D <- A-B
> D
[,1] [,2] [,3] [,4]
[1,]
2
8
14
20
[2,]
4
10
16
22
[3,]
6
12
18
24

Nhn hai ma trn. Cho hai ma trn:

1 4 7

A = 2 5 8
3 6 9

1 2 3

B = 4 5 6
7 8 9

Chng ta mun tnh AB, v c th trin khai bng R bng cch s dng %*% nh sau:
>
>
>
>
>

y <- c(1,2,3,4,5,6,7,8,9)
A <- matrix(y, nrow=3)
B <- t(A)
AB <- A%*%B
AB
[,1] [,2] [,3]
[1,]
66
78
90
[2,]
78
93 108
[3,]
90 108 126

Hay tnh BA, v c th trin khai bng R bng cch s dng %*% nh sau:
> BA <- B%*%A
> BA
[,1] [,2] [,3]
[1,]
14
32
50
[2,]
32
77 122
[3,]
50 122 194

Nghch o ma trn v gii h phng trnh. V d chng ta c h phng trnh sau


y:

3x1 + 4 x2 = 4
x1 + 6 x2 = 2
H phng trnh ny c th vit bng k hiu ma trn: AX = Y, trong :
3 4
A=
,
1 6

x
X = 1 ,
x2

4
Y =
2

Nghim ca h phng trnh ny l: X = A-1Y, hay trong R:


>
>
>
>

A <- matrix(c(3,1,4,6), nrow=2)


Y <- matrix(c(4,2), nrow=2)
X <- solve(A)%*%Y
X
[,1]
[1,] 1.1428571
[2,] 0.1428571

Chng ta c th kim tra:


> 3*X[1,1]+4*X[2,1]
[1] 4

Tr s eigen cng c th tnh ton bng function eigen nh sau:


> eigen(A)
$values
[1] 7 2
$vectors

[,1]
[,2]
[1,] -0.7071068 -0.9701425
[2,] -0.7071068 0.2425356

nh thc (determinant). Lm sao chng ta xc nh mt ma trn c th o nghch


hay khng? Ma trn m nh thc bng 0 l ma trn suy bin (singular matrix) v
khng th o nghch. kim tra nh thc, R dng lnh det():
> E <- matrix((1:9), 3, 3)
> E
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9
> det(E)
[1] 0

Nhng ma trn F sau y th c th o nghch:


> F <- matrix((1:9)^2, 3, 3)
> F
[,1] [,2] [,3]
[1,]
1
16
49
[2,]
4
25
64
[3,]
9
36
81
> det(F)
[1] -216

V nghch o ca ma trn F (F-1) c th tnh bng function solve() nh sau:


> solve(F)

[,1]
[,2]
[,3]
[1,] 1.291667 -2.166667 0.9305556
[2,] -1.166667 1.666667 -0.6111111
[3,] 0.375000 -0.500000 0.1805556

Ngoi nhng php tnh n gin ny, R cn c th s dng cho cc php tnh
phc tp khc. Mt li th ng k ca R l phn mm cung cp cho ngi s dng t
do to ra nhng php tnh ph hp cho tng vn c th. Trong vi chng sau, ti s
quay li vn ny chi tit hn.
R c mt package Matrix chuyn thit k cho tnh ton ma trn. Bn c c th
ti package xung, ci vo my, v s dng, nu cn. a ch ti l:

http://cran.au.r-project.org/bin/windows/contrib/r-release/Matrix_0.995-8.zip
cng vi ti liu ch dn cch s dng (di khong 80 trang):
http://cran.au.r-project.org/doc/packages/Matrix.pdf

You might also like