判别分析课后习题

  • 实验目的

通过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样品回判结果

由表二可得待判样品广东和西藏是属于第二组的,并且河北判错,应该是属于第一组的。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值