- 实验目的
通过R语言的操作,对一个个体所属类别的情况下进行判别。实验一:通过对待判样品进行判别属于哪一类,从而更好的研究人口死亡状况。实验二:通过对于地区的判别是属于哪一类,进而对跟方面的支出进行研究。
二、实验内容
实验一:
习题4.6
为研究某地区人口死亡状况,已按某种方法将15个已知样品分为3类,指标及原始数据如下表所示,试建立判别函数并判定另外4个待判样品属于哪类。
X1:0岁组死亡概率 x4:55岁组死亡概率 X2:1岁组死亡概率 x5:80岁组死亡概率 X3:10岁组死亡概率 x6:平均预期寿命 | ||||||||
组别 | 序号 | x1 | x2 | x3 | x4 | x5 | x6 | |
第一组 | 1 | 34.16 | 7.44 | 1.12 | 7.78 | 95.19 | 69.3 | |
2 | 33.06 | 6.34 | 1.08 | 6.77 | 94.08 | 69.7 | ||
3 | 36.26 | 9.24 | 1.04 | 8.97 | 97.3 | 69.8 | ||
4 | 40.17 | 13.45 | 1.43 | 13.88 | 101.2 | 66.2 | ||
5 | 50.06 | 23.03 | 2.83 | 23.78 | 112.52 | 63.3 | ||
第二组 | 1 | 33.24 | 6.24 | 1.18 | 22.9 | 160.01 | 65.4 | |
2 | 32.22 | 4.22 | 1.06 | 20.7 | 124.7 | 68.7 | ||
3 | 41.15 | 10.08 | 2.32 | 32.84 | 172.06 | 65.85 | ||
4 | 53.04 | 25.74 | 4.06 | 34.87 | 152.03 | 63.5 | ||
5 | 38.03 | 11.2 | 6.07 | 27.84 | 146.32 | 66.8 | ||
第三组 | 1 | 34.03 | 5.41 | 0.07 | 5.2 | 90.1 | 69.5 | |
2 | 32.11 | 3.02 | 0.09 | 3.14 | 85.15 | 70.8 | ||
3 | 44.12 | 15.12 | 1.08 | 15.15 | 103.12 | 64.8 | ||
4 | 54.17 | 25.03 | 2.11 | 25.25 | 110.14 | 63.7 | ||
5 | 28.07 | 2.01 | 0.07 | 3.02 | 81.22 | 68.3 | ||
待判样品 | 1 | 50.22 | 6.66 | 1.08 | 22.54 | 170.6 | 65.2 | |
2 | 34.64 | 7.33 | 1.11 | 7.78 | 95.16 | 69.3 | ||
3 | 33.42 | 6.22 | 1.12 | 22.95 | 160.31 | 68.3 | ||
4 | 44.02 | 15.36 | 1.07 | 16.45 | 105.3 | 64.2 |
实验二:
2、2005年全国城镇居民月平均消费状况可划分为两类,通过建立费歇线性判别函数,将广东、西藏两个待判省区归类。
x1 人均粮食支出 (元/人) x5 人均衣着支出 (元/人) x2 人均副食支出 (元/人) x6 人均日用杂品支出 (元/人) x3 人均烟、酒、饮料支出 (元/人 x7 人均水电燃料支出 (元/人) x4 人均其他副食支出 (元/人) x8 人均其他非商品支出 (元/人) | ||||||||||
序号 | 地区 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | Group |
1 | 北 京 | 21.3 | 124.89 | 35.43 | 73.98 | 93.01 | 20.58 | 43.97 | 433.73 | 1 |
2 | 上 海 | 21.13 | 168.69 | 40.81 | 70.12 | 74.32 | 15.46 | 50.9 | 422.74 | 1 |
3 | 浙 江 | 19.96 | 142.24 | 43.33 | 50.74 | 101.77 | 12.92 | 53.44 | 394.55 | 1 |
4 | 天 津 | 21.5 | 122.39 | 29.08 | 51.64 | 55.04 | 11.3 | 54.88 | 288.13 | 2 |
5 | 河 北 | 18.25 | 90.21 | 24.45 | 32.44 | 62.48 | 7.45 | 47.5 | 178.84 | 2 |
6 | 山 西 | 21.84 | 66.38 | 18.05 | 31.32 | 74.48 | 8.19 | 34.97 | 177.45 | 2 |
7 | 内蒙古 | 21.37 | 67.08 | 20.28 | 35.27 | 81.07 | 10.94 | 39.46 | 182.2 | 2 |
8 | 辽 宁 | 22.74 | 115.88 | 28.21 | 42.44 | 58.07 | 9.63 | 48.65 | 194.85 | 2 |
9 | 吉 林 | 20.22 | 88.94 | 18.54 | 35.63 | 65.72 | 8.81 | 50.29 | 186.52 | 2 |
10 | 黑龙江 | 21.33 | 75.5 | 14 | 29.56 | 69.29 | 8.24 | 42.08 | 165.9 | 2 |
11 | 江 苏 | 18.61 | 122.51 | 27.07 | 42.5 | 63.47 | 15.38 | 36.14 | 240.92 | 2 |
12 | 安 徽 | 19.61 | 107.13 | 32.85 | 35.77 | 61.34 | 7.53 | 34.6 | 142.23 | 2 |
13 | 福 建 | 25.56 | 171.65 | 22.3 | 40.53 | 57.13 | 12.6 | 54.03 | 225.08 | 2 |
14 | 江 西 | 18.75 | 104.68 | 15.55 | 35.61 | 51.8 | 11.18 | 36.27 | 142.72 | 2 |
15 | 山 东 | 18.27 | 88.34 | 19.07 | 43.19 | 72.97 | 12.59 | 42.16 | 200.18 | 2 |
16 | 河 南 | 19.07 | 73.18 | 18.01 | 29.38 | 64.51 | 8.91 | 38.14 | 155.45 | 2 |
17 | 湖 北 | 18.76 | 102.67 | 21.87 | 30.47 | 64.33 | 11.99 | 42.14 | 168.17 | 2 |
18 | 湖 南 | 20.25 | 104.45 | 20.72 | 38.15 | 62.98 | 12.67 | 39.16 | 213.56 | 2 |
19 | 广 西 | 18.7 | 131.35 | 11.69 | 32.06 | 41.54 | 10.84 | 42.77 | 178.51 | 2 |
20 | 海 南 | 16.16 | 139.92 | 12.98 | 23.58 | 24.87 | 10.76 | 32.35 | 144.21 | 2 |
21 | 重 庆 | 18.18 | 120.39 | 26.18 | 37.94 | 68.16 | 11.64 | 38.48 | 246.37 | 2 |
22 | 四 川 | 18.53 | 109.95 | 21.49 | 33.04 | 50.98 | 10.88 | 33.96 | 183.85 | 2 |
23 | 贵 州 | 18.33 | 92.43 | 25.38 | 32.19 | 56.32 | 14 | 38.57 | 144.82 | 2 |
24 | 云 南 | 22.3 | 99.08 | 33.36 | 32.01 | 52.06 | 7.04 | 32.85 | 190.04 | 2 |
25 | 陕 西 | 20.03 | 70.75 | 19.75 | 34.95 | 53.29 | 10.55 | 38.2 | 189.41 | 2 |
26 | 甘 肃 | 18.68 | 72.74 | 23.72 | 38.69 | 62.41 | 9.65 | 35.26 | 170.12 | 2 |
27 | 青 海 | 20.33 | 75.64 | 20.88 | 33.85 | 53.81 | 10.06 | 32.82 | 171.32 | 2 |
28 | 宁 夏 | 19.75 | 70.24 | 18.67 | 36.71 | 61.75 | 10.08 | 40.26 | 165.22 | 2 |
29 | 新 疆 | 21.03 | 78.55 | 14.35 | 34.33 | 64.98 | 9.83 | 33.87 | 161.67 | 2 |
1 | 广 东 | 23.68 | 173.30 | 17.43 | 43.59 | 53.66 | 16.86 | 65.02 | 385.94 | |
2 | 西 藏 | 29.67 | 146.90 | 64.51 | 54.36 | 86.10 | 14.77 | 32.19 | 193.10 |
- 实验过程
实验一:
distinguish.distance <- function(TrnX,TrnG,TstX=NULL,var.equal=FALSE){
if (is.factor(TrnG) == FALSE){
mx <- nrow(TrnX); mg <- nrow(TrnG)
TrnX <- rbind(TrnX, TrnG)
TrnG <- factor(rep(1:2,c(mx,mg))) # 1重复mx遍,2重复mg遍
}
if (is.null(TstX) == TRUE) TstX <- TrnX
if (is.vector(TstX) == TRUE)
TstX <-t(as.matrix(TstX))
else if (is.matrix(TstX) != TRUE)
TstX <- as.matrix(TstX)
if (is.matrix(TrnX) != TRUE)
TrnX <- as.matrix(TrnX)
nx <- nrow(TstX)
# blong用于存放预测值
blong <- matrix(rep(0,nx),nrow=1,dimnames=list("blong",1:nx))
g <- length(levels((TrnG))) # 计算群体类别个数
mu <- matrix(0,nrow=g,ncol=ncol(TrnX))
# 每一个群体都有一个均值
for(i in 1:g)
mu[i,] <- colMeans(TrnX[TrnG == i,])
print(mu)
# 计算马氏距离
D <- matrix(0,nrow=g,ncol=nx)
if (var.equal == TRUE || var.equal == T){
for (i in 1:g) # 样本到每一个类别的马氏距离
D[i,] <- mahalanobis(TstX,mu[i,],var(TrnX)) # 混合样本方差
}
else{
for (i in 1:g)
D[i,] <- mahalanobis(TstX, mu[i,],var(TrnX[TrnG == i,]))
}
print(D)
for (j in 1:nx){ # 分别判别每一个样本属于哪一个类别
dmin <- Inf
for (i in 1:g){ # 遍历每一个类别,找出最小距离
if (D[i,j] < dmin){
dmin <- D[i,j];
blong[j] <- i
}
}
}
blong
}
a<-read.csv(file=file.choose(),head=TRUE)#提取出表格中的数据赋值给a
X <- a[,2:7] #提取2到7列赋值给X
G <- gl(3,5) #三组数据每个组5个数据
distinguish.distance(X,G,var.equal=TRUE)##用距离判别进行判别
实验二:
discriminant.distance <- function(TrnX1,TrnX2,TstX=NULL,var.equal=FALSE){
# 输入变量处理
if (is.null(TstX) == TRUE) TstX <- rbind(TrnX1,TrnX2)
if (is.vector(TstX) == TRUE)
TstX <- t(as.matrix(TstX))
else if (is.matrix(TstX) != TRUE)
TstX <- as.matrix(TstX)
if (is.matrix(TrnX1) == FALSE)
TrnX1 <- as.matrix(TrnX1)
if (is.matrix(TrnX2) != TRUE)
TrnX2 <- as.matrix(TrnX2)
#
nx <- nrow(TstX) # 需要用以预测的集合的大小,或者说测试集的大小
# 生成长度为nx的0向量,用以存储预测的标签
blong <- matrix(rep(0,nx),nrow=1,byrow=TRUE,dimnames=list("blong",1:nx))
# 两个群体的均值向量
mu1 <- colMeans(TrnX1); mu2 <- colMeans(TrnX2)
# 两群体同方差
if (var.equal == TRUE || var.equal == T){
# 计算混合样本方差
S <- var(rbind(TrnX1,TrnX2))
# 到第二群体的马氏距离减去到第一群体的马氏距离——>判别函数W(x)
W <- mahalanobis(TstX, mu2, S) - mahalanobis(TstX, mu1, S)
}
# 两群体异方差
else{
S1 <- var(TrnX1); S2 <- var(TrnX2)
W <- mahalanobis(TstX, mu2, S2) - mahalanobis(TstX, mu1, S1)
}
for (i in 1:nx){
if (W[i] > 0)
blong[i] <- 1
else
blong[i] <- 2
}
blong
}
a<-read.csv(file=file.choose(),head=TRUE)##读取表格中的数据
X<-a[2:4,2:9] ##提取出a中的2到4行,2到9列赋值给X
G <- a[5:30,2:9] # 提取出a中的5到30行,2到9列赋值给G
discriminant.distance(X,G,var.equal=TRUE) ##利用距离判别进行判别
四、实验结果
表1 样品回判结果
原组别 | 序号 | 回判结果 | 正误判别标志 |
第一组 | 1 | 1 | 0 |
2 | 1 | 0 | |
3 | 1 | 0 | |
4 | 1 | 0 | |
5 | 1 | 0 | |
第二组 | 1 | 2 | 0 |
2 | 2 | 0 | |
3 | 2 | 0 | |
4 | 2 | 0 | |
5 | 2 | 0 | |
第三组 | 1 | 3 | 0 |
2 | 3 | 0 | |
3 | 3 | 0 | |
4 | 3 | 0 | |
5 | 3 | 0 | |
待判样品 | 1 | 1 | |
2 | 1 | ||
3 | 1 | ||
4 | 3 |
由表一可得待判样品123是属于第一组,4属于第三组。并且没有误判的。
实验二:
地区 | 原组别 | 回判结果 | 正误判别标志 |
北 京 | 1 | 1 | 0 |
上 海 | 1 | 1 | 0 |
浙 江 | 1 | 1 | 0 |
天 津 | 2 | 2 | 0 |
河 北 | 2 | 1 | 1 |
山 西 | 2 | 2 | 0 |
内蒙古 | 2 | 2 | 0 |
辽 宁 | 2 | 2 | 0 |
吉 林 | 2 | 2 | 0 |
黑龙江 | 2 | 2 | 0 |
江 苏 | 2 | 2 | 0 |
安 徽 | 2 | 2 | 0 |
福 建 | 2 | 2 | 0 |
江 西 | 2 | 2 | 0 |
山 东 | 2 | 2 | 0 |
河 南 | 2 | 2 | 0 |
湖 北 | 2 | 2 | 0 |
湖 南 | 2 | 2 | 0 |
广 西 | 2 | 2 | 0 |
海 南 | 2 | 2 | 0 |
重 庆 | 2 | 2 | 0 |
四 川 | 2 | 2 | 0 |
贵 州 | 2 | 2 | 0 |
云 南 | 2 | 2 | 0 |
陕 西 | 2 | 2 | 0 |
甘 肃 | 2 | 2 | 0 |
青 海 | 2 | 2 | 0 |
宁 夏 | 2 | 2 | 0 |
新 疆 | 2 | 2 | 0 |
广 东 | 待判 | 2 | |
西 藏 | 待判 | 2 |
表2样品回判结果
由表二可得待判样品广东和西藏是属于第二组的,并且河北判错,应该是属于第一组的。