第十周作业

8.1 湿度差与压温差预测下雨

输入数据:

classX1 <- data.frame(x1 = c(-1.9, -6.9, 5.2, 5, 7.3, 6.8, 0.9, -12.5, 1.5, 
    3.8), x2 = c(3.2, 10.4, 2, 2.5, 0, 12.7, -15.4, -2.5, 1.3, 6.8))
classX1
##       x1    x2
## 1   -1.9   3.2
## 2   -6.9  10.4
## 3    5.2   2.0
## 4    5.0   2.5
## 5    7.3   0.0
## 6    6.8  12.7
## 7    0.9 -15.4
## 8  -12.5  -2.5
## 9    1.5   1.3
## 10   3.8   6.8

classX2 <- data.frame(x1 = c(0.2, -0.1, 0.4, 2.7, 2.1, -4.6, -1.7, -2.6, 2.6, 
    -2.8), x2 = c(0.2, 7.5, 14.6, 8.3, 0.8, 4.3, 10.9, 13.1, 12.8, 10))
classX2
##      x1   x2
## 1   0.2  0.2
## 2  -0.1  7.5
## 3   0.4 14.6
## 4   2.7  8.3
## 5   2.1  0.8
## 6  -4.6  4.3
## 7  -1.7 10.9
## 8  -2.6 13.1
## 9   2.6 12.8
## 10 -2.8 10.0
test <- data.frame(X1 = c(8.1), X2 = c(2))
test
##    X1 X2
## 1 8.1  2

距离判别:

source("../R-Book-Demo/ch8/discriminiant.distance.R")
blong.distance <- discriminiant.distance(classX1, classX2, test)
blong.distance
##       1
## blong 1

距离判别结果为1,表示待测样本属于classX1,判别明天为“雨天”。

Bayes判别:

source("../R-Book-Demo/ch8/discriminiant.bayes.R")
blong.bayes.true <- discriminiant.bayes(classX1, classX2, TstX = test, var.equal = TRUE)
blong.bayes.true
##       1
## blong 1

blong.bayes.false <- discriminiant.bayes(classX1, classX2, TstX = test, var.equal = FALSE)
blong.bayes.false
##       1
## blong 1

方差相同和不同时,bayes判别结果均为下雨。

Fisher判别:

source("../R-Book-Demo/ch8/discriminiant.fisher.R")
blong.fisher <- discriminiant.fisher(classX1, classX2, TstX = test)
blong.fisher
##       1
## blong 1

Fisher判别结果为:明天下雨

8.2 心电图指标对健康人(I),硬化症患者(II),冠心病患者的鉴别(III)

输入数据

data8_2 <- read.table("data8_2.txt", header = TRUE)
data8_2
##    序号 类别   x1    x2    x3    x4
## 1     1    I 8.11 261.0 13.23  7.36
## 2     2    I 9.36 185.4  9.02  5.99
## 3     3    I 9.85 249.6 15.61  6.11
## 4     4    I 2.55 137.1  9.21  4.35
## 5     5    I 6.01 231.3 14.27  8.79
## 6     6    I 9.64 231.4 13.03  8.53
## 7     7    I 4.11 260.2 14.72 10.02
## 8     8    I 8.90 259.9 14.16  9.79
## 9     9    I 7.71 273.8 16.01  8.79
## 10   10    I 7.51 303.6 19.14  8.53
## 11   11    I 8.06 231.0 14.41  6.15
## 12   12   II 6.80 308.9 15.11  8.49
## 13   13   II 8.68 258.7 14.02  7.16
## 14   14   II 5.67 355.5 15.13  9.43
## 15   15   II 8.10 476.7  7.38 11.32
## 16   16   II 3.71 316.3 17.12  8.17
## 17   17   II 5.37 274.6 16.75  9.67
## 18   18   II 9.89 409.4 19.47 10.49
## 19   19  III 5.22 330.3 18.19  9.61
## 20   20  III 4.71 331.5 21.26 13.72
## 21   21  III 4.71 352.5 20.79 11.00
## 22   22  III 3.36 347.3 17.90 11.19
## 23   23  III 8.27 189.6 12.74  6.94
X <- data8_2[, 3:6]
X
##      x1    x2    x3    x4
## 1  8.11 261.0 13.23  7.36
## 2  9.36 185.4  9.02  5.99
## 3  9.85 249.6 15.61  6.11
## 4  2.55 137.1  9.21  4.35
## 5  6.01 231.3 14.27  8.79
## 6  9.64 231.4 13.03  8.53
## 7  4.11 260.2 14.72 10.02
## 8  8.90 259.9 14.16  9.79
## 9  7.71 273.8 16.01  8.79
## 10 7.51 303.6 19.14  8.53
## 11 8.06 231.0 14.41  6.15
## 12 6.80 308.9 15.11  8.49
## 13 8.68 258.7 14.02  7.16
## 14 5.67 355.5 15.13  9.43
## 15 8.10 476.7  7.38 11.32
## 16 3.71 316.3 17.12  8.17
## 17 5.37 274.6 16.75  9.67
## 18 9.89 409.4 19.47 10.49
## 19 5.22 330.3 18.19  9.61
## 20 4.71 331.5 21.26 13.72
## 21 4.71 352.5 20.79 11.00
## 22 3.36 347.3 17.90 11.19
## 23 8.27 189.6 12.74  6.94
G <- factor(data8_2[, 2], labels = c(1:3))
G
##  [1] 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3

距离判别:

source("../R-Book-Demo/ch8/distinguish.distance.R")
Dist1 = distinguish.distance(X, G, var.equal = TRUE)
which(Dist1 != G)
## [1]  7 10 13 17 23
Dist2 = distinguish.distance(X, G, var.equal = FALSE)
which(Dist2 != G)
## [1]  1 10 13 17 19

无论方差相同与否,共有5个样本判错,回代的判别正确率为18/23=78.26%;其中1类错判2个,2类错判2个,3类错判1个。

Bayes判别

source("../R-Book-Demo/ch8/distinguish.bayes.R")
p = c(11, 7, 5)/23
Bayes1 = distinguish.bayes(X, G, var.equal = TRUE, p)
which(Bayes1 != G)
## [1] 13 17 19 23

方差相同时,共有4个样本判错,回代的判别正确率为19/23=82.81%;其中1类错判0个,2类错判2个,3类错判2个。

Bayes2 = distinguish.bayes(X, G, var.equal = FALSE, p)
which(Bayes2 != G)
## [1]  1 10 13 17 19 21 22 23

方差不同时,共有8个样本判错,回代的判别正确率为15/23=65.22%;其中1类错判2个,2类错判2个,3类错判4个。