基础语法: 线性代数"

knitr::opts_chunk$set(echo = TRUE,
                      message = FALSE,
                      warning = FALSE,
                      out.width="100%")

d <- seq(from = 1, to = 5, by = 0.5)

知识点

初等代数

四则运算

1 + 2; 1.5 + 2.4
3 - 4; -6 - 7
5 * 6; 23 * 14
7 / 8; -9 / 0.2

; 在R中有连接两个独立命令行的作用。

请根据以上命令,求解下题:

$$\frac{\frac{365}{12}}{\frac{28 + 24}{10} - (36 + 72) \times 5}$$


(365 / 12) / ((28 + 24)/10 - (36 + 72) * 5)

复杂代数

sqrt(9)
10^2
5%%3 #余数
log(11)
log10(100)
exp(12)

乃至三角函数:

sin(pi)
cos(pi)
tan(pi/2)

acos(1)
asin(1)
atan(0.5)

科学计数法

tan(pi/2)

一个数被写成一个实数a与一个10的n次幂的积。 其中E(exponential)用来表示10的幂 举几个例子:

$$200 = 2e + 2, $$ $$0.002 = 2e-3,$$ $$333.3 = 3.333e + 2,$$ $$-45,000 = -4.5e + 4.$$

2.8e + 10 代表什么?


format(2.8e+10, scientific = FALSE, big.mark = ',')

布尔代数(Boolean algebra)

举几个例子:

1 == 2
1 != 2
1 > 2
1 < 2
1 >= 2
1 <= 2
1 & 2 > 2
1 | 2 > 2

下面这个式子的结果是什么?

3 > 2 > 1
(3 > 2) & (2 > 1)

很多朋友在刚使用编程语言时候都会不习惯用两个等号(==)来表示“等于”,但从理解的角度,可将其视作==, !=, >=, <=中的一员看待。

向量

在R中,向量也是最基础的数据呈现方式。

从这个意义上,变量可被视作“有概念意义的向量”。

向量表达

a <- c(11, 12, 13, 14, 15)

a[2]
a[5]

b <- 10 * 1:5
b

# 结果是什么?
c(1.5:3)

如何表示$\vec {b}=(1, 3, 4, 5, 6, 7, 9)$?


b <- c(1, 3:7, 9)

重复上面的例子:

a <- seq(from = 1, to = 5)
a

seq()的便捷之处在于可以定义步长:

c <- seq(from = 1, to = 5, by = 3)
c

d <- seq(from = 1, to = 5, by = 0.5)
d

seq()另一个功能是体现元素位置。

比如:如何选出d的偶数位上的元素?


提示: 确定索引 → 找出索引中的各位是否是偶数位(是否能被2整除),是用TRUE标明 → 在第二步基础上根据“TRUEFALSE不留”的规则将向量中为偶数位的元素保留成为一个新向量。

d[seq(d) %% 2 == 0]

向量四则运算

a + b
a - b
a * b
a / b

当进行运算的向量不等长时,短向量的元素将依序循环使用,如下例:

a
e <- c(1, 2)

a * e

叉乘在R中其实还能做一些数据之外的事情。

举例:用这个功能来用R推演一下天干地支。

tiangan <- c("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸")
dizhi <- c("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥")

提示: 阅者诸君周知,有十天干,十二地支。 它们共有一百二十种组合,先民取其中六十种组为干支纪年。 选择方法是阳(奇)数配阳数,阴(偶)数配阴数。

tg_yang <- tiangan[seq(tiangan) %% 2 == 1]
tg_yin <- tiangan[seq(tiangan) %% 2 == 0]

dz_yang <- dizhi[seq(dizhi) %% 2 == 1]
dz_yin <- dizhi[seq(dizhi) %% 2 == 0]

outer(tg_yang, dz_yang, FUN = paste0)
outer(tg_yin, dz_yin, FUN = paste0)

向量性质

a

#长度
length(a)

#最值
max(a)
min(a)

#平均值
mean(a)

#中位数
median(a)

#方差
var(a)

这些命令在之后基于数据的变量运算中均可通用。

矩阵

$$ A_{2\times2} = \left(\begin{array}{cc} 1 & 3\ 2 & 4 \end{array}\right) $$

A <- matrix(1:4, nrow = 2)
A

A[1, 2]
A[1, ]
A[ , 2]

单一矩阵运算

B <- matrix(1:6, nrow = 3)
B

dim(B)
t(B)
t(t(B))

t(t(B)) 嵌套的做法。

矩阵运算

在R中,将两个符合定义性质的向量用%*%连接就可以进行这种运算。

B
C <- matrix(7:12, nrow = 3)

B + C
B - C

10 * B

D <- matrix(1:6, nrow = 2)
D

dim(B)
dim(D)

B %*% D

方程组

用R解一个三元一次方程组:

$$ \begin{equation} \begin{cases} x + y + z = 6, \ 3x + 2y + 4z = 9, \ 2x + 2y - 6z = 4. \end{cases} \end{equation} $$

$$ \begin{align} \vec{b} =& \vec{E}\vec{x},\ \begin{bmatrix} 6 \ 9 \ 4 \end{bmatrix} =& \begin{bmatrix} 1 & 1 & 1 \ 3 & 2 & 4 \ 2 & 2 & -6 \end{bmatrix} \begin{bmatrix} x \ y \ z \end{bmatrix} \end{align}. $$

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

b <- c(6, 9, 4)

x <- solve(E, b)
x

解方程组的一个直接应用就是解回归方程。 回归方程通常可以以线性代数方式表达: 比如,对一个基本的回归就可以写成如下形式,就和我们上面解的方程组非常相似了:

$$ \begin{align} y& =& &\beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n + \epsilon\ \vec{y}& =& &\vec{x}\vec{\beta} + \vec{\epsilon}.\ \uparrow& & &\uparrow\uparrow\ \vec{b}& =& &\vec{E}\vec{x} \end{align} $$

要点总结



Try the drhur package in your browser

Any scripts or data that you put into this service are public.

drhur documentation built on May 31, 2023, 6:03 p.m.