欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

第六章:运用R语言进行多元化统计建模 - 判别分析的课后实践题集 (第五修订版)

最编程 2024-02-21 17:25:58
...

第6章 判别分析

文章会用到的数据请在这个网址下下载多元统计分析及R语言建模(第五版)数据
练习题
1)考虑两个数据集x1 = [3 7 2 4 4 7],x2 = [6 9 5 7 4 8]
(1)计算Fisher线性判别函数

library(MASS)
library(openxlsx)
x1 = c(3,2,4,6,5,4)
x2 = c(7,4,7,9,7,8)
y = c(1,1,1,2,2,2)
(data1 = data.frame(x1,x2,y))
plot(data1[,-3])
text(x1,x2,y,adj = -0.5)

在这里插入图片描述在这里插入图片描述

x1_bar = data1[1:3,-3]
x1_bar

在这里插入图片描述

x2_bar = data1[4:6,-3]
x2_bar

在这里插入图片描述

(x1_mean = apply(x1_bar,2,mean))
(x2_mean = apply(x2_bar,2,mean))

在这里插入图片描述

Sp = matrix(c(1,1,1,2),ncol = 2)
Sp_re = solve(Sp)
(2 * cov(x1_bar) + 2 * cov(x2_bar)) / 4

在这里插入图片描述

#a = t(x1_mean - x2_mean)%*%Sp_re
#a用公式求判别直线
fy <- lda(y ~.,data = data1)
fy

在这里插入图片描述

table(predict(fy) $ class,data1 $ y)
#Fisher判别曲线是x1轴,有2个不同类别的点的投影是重合的
#判别这两个点的类别是会随机的

在这里插入图片描述
(2)用Bayes准则,在相同先验概率和相同代价下将观测值x0` = (2,7)分类到总体G1或G2。

predict(fy,data.frame(x1 = 2,x2 = 7)) $ class

在这里插入图片描述
Bayes准则,在相同先验概率和相同代价下将观测值x0` = (2,7)分类到总体G1

2)设n1 = 11个和n2 = 12个观测值分别取自两个随机变量X1和X2,假定这两个变量服从二元正态分布,且有相同的协方差矩阵为:…。
(1)构造样本的Fisher线性判别函数

x1_bar = rep(-1,2)
x2_bar = c(2,1)
S_p = matrix(c(7.3,-1.1,-1.1,4.8),ncol = 2)
solve(S_p)
a = t(x1_bar - x2_bar)%*%solve(S_p)
a

在这里插入图片描述
判别函数为y = -0.4906887 x1 - 0.5291162 x2

(2)将观测值x0` = (0,1)分配到总体G1或G2(假定有等代价和等先验概率)

(y1_bar = a %*% x1_bar)
(y2_bar = a %*% x2_bar)
x_0 = c(0,1)
y_0 = a %*% x_0
y1_bar > y2_bar
y_0 >= (y2_bar + y1_bar) / 2
c(y1_bar,y2_bar,y_0)             #距离哪个中心更近,被判为哪一类

在这里插入图片描述
因为y2_bar距离中心更近,所以观测值属于G2
3)以舒张期血压和血浆胆固醇含量预测被检查者是否患冠心病。测得15名冠心病人和16名健康人的舒张压x1(mmHg)及血浆胆固醇含量x2(mg/dl),…。
(1)对每一组数据用不同的符号,作两变量的散点图,观察它们在平面上的散布情况,该组数据做判别分析是否合适?

library(openxlsx)
d6.3 = read.xlsx('mvexer5.xlsx',sheet = 'E6.3',colNames = T)
head(d6.3)

在这里插入图片描述

attach(d6.3)
plot(x1,x2)                     #绘制散点图
text(x1,x2,Y,adj = -0.5)        #标记处途中原始点

在这里插入图片描述由上图可知,该组数据适合做判别分析
(2)分别建立距离判别(等方差阵和不等方差阵)、Fisher判别和Bayes判别分析模型,计算各自的判别符合率,确定哪种判别方法最恰当。

library(MASS)              #距离判别模型
qda_1 = qda(Y ~ x1 + x2)
qda_1

在这里插入图片描述

#距离判别符合率
pre1 = predict(qda_1)    
Y5 = pre1$class
tab1 = table(Y,Y5)
tab1

在这里插入图片描述

sum(diag(prop.table(tab1)))

在这里插入图片描述

#Fisher判别分析
lda_1 = lda(Y ~ x1 + x2)
lda_1

在这里插入图片描述

#Fisher判别符合率
pre2 = predict(lda_1)
Y6 = pre2$class
tab2 = table(Y,Y6)
tab2

在这里插入图片描述

sum(diag(prop.table(tab2)))

在这里插入图片描述

#Bayes判别分析
lda_2 = lda(Y ~ x1 + x2,prior = c(1,2)/3)
lda_2

在这里插入图片描述

#Bayes判别符合率
pre3 = predict(lda_2)
Y7 = pre3$class
tab3 = table(Y,Y7)
tab3

在这里插入图片描述

sum(diag(tab3))/sum(tab3)

在这里插入图片描述
由以上结果,根据各自的判别符合率大小可知,距离判别最恰当。
(3)绘制线性判别函数图。

plot(lda_1)

在这里插入图片描述
4)对于A股市场2009年陷入财务困境的上市公司(ST公司),我们收集了8家ST公司陷入财务困境前一年(2008年)的财务数据,同时对于财务良好的公司(非ST公司),收集了同一时期8家非ST公司对应的财务数据,…,数据涉及四个变量:资产负债率x1,流动资产周转率x2,总资产报酬率x3,和营业收入增长率x4,类别变量G中2代表ST公司,1代表非ST公司。
(1)分别建立线性判别、非线性判别和Bayes判别分析模型,计算各自的判别符合率,确定哪种判别方法最恰当;

library(openxlsx)
d6.4 = read.xlsx('mvexer5.xlsx',sheet = 'E6.4')
d6.4

在这里插入图片描述

attach(`d6.4`)
#建立线性判别模型
library(MASS)
lda_1 = lda(G ~ x1 + x2 + x3 + x4)
lda_1

在这里插入图片描述

#线性判别符合率
pre1 = predict(lda_1)
G1 = pre1$class
tab1 = table(G,G1)
tab1

在这里插入图片描述

sum(diag(prop.table(tab1)))

在这里插入图片描述

#非线性判别模型
qda_1 = qda(G ~ x1 + x2 + x3 + x4)
qda_1

在这里插入图片描述

#非线性符合率
pre2 = predict(qda_1)
G2 = pre2$class
tab2 = table(G,G2)
tab2

在这里插入图片描述

sum(diag(prop.table(tab2)))

在这里插入图片描述

#Bayes判别分析模型
lda_2 = lda(G ~ x1 + x2 + x3 + x4,prior = c(2,3)/5)
lda_2

在这里插入图片描述

#Bayes判别符合率
pre3 = predict(lda_2)
G3 = pre3$class
tab3 = table(G,G3)
tab3

在这里插入图片描述

sum(diag(prop.table(tab3)))

在这里插入图片描述
(2)某公司2008年财务数据为:x1 = 78.3563,x2 = 0.8895,x3 = 1.8001,x4 = 14.1002。试判定2009年该公司是否会陷入财务困境。

predict(qda_1,data.frame(x1 = 78.3563,x2 = 0.8895,x3 = 1.8001,
                         x4 = 14.1002))

在这里插入图片描述
5)植物分类的判别分析:费歇(Fisher)于1936年发表的鸢尾花(Iris)数据被广泛的作为判别分析的例子。数据是对3种鸢尾花(g):刚毛鸢尾花(第1组)、变色鸢尾花(第2组)和佛吉尼亚鸢尾花(第3组)各抽取一个容量为50的样本,测量其花萼长(sepallen,x1),花萼宽(sepalwide,x2)、花瓣长(petallen,x3)、花瓣宽(petalwide,x4),单位为mm,…。试对该数据进行Fisher判别分析和Bayes判别分析。

library(openxlsx)
d6.5 = read.xlsx('mvexer5.xlsx',sheet = 'E6.5')
d6.5

在这里插入图片描述

#Fisher判别分析
attach(`d6.5`)
library(MASS)
lda_1 = lda(G ~ x1 + x2 + x3 + x4)
lda_1

在这里插入图片描述

pre1 = predict(lda_1)
G1 = pre1$class
head(data.frame(G,G1))

在这里插入图片描述

tab1 = table(G,G1)
tab1

在这里插入图片描述

diag(prop.table(tab1,1))

在这里插入图片描述

sum(diag(prop.table(tab1)))

在这里插入图片描述

#Bayes判别分析
lda_1 = lda(G ~ x1 + x2 + x3 + x4,prior = c(1,2,3)/6)
lda_1

在这里插入图片描述

pre2 = predict(lda_1)
G2 = pre2$class
tab2 = table(G,G2)
tab2

在这里插入图片描述

sum(diag(prop.table(tab2)))

在这里插入图片描述