1. 首页
  2. 自学中心
  3. 软件
  4. R

R 主成分回归

R学习-主成分分析和主成分回归
#主成分分析和主成分回归
Pearson 1901年提出 Hotelling 1933进一步发展
一 princomp() 函数
princomp(x, cor = FALSE, scores = TRUE, covmat = NULL,
subset = rep(TRUE, nrow(as.matrix(x))), …)
# 分析用数据
# cor 是否用样本的协方差矩阵作主成分分析
prcomp()
二 summary()函数
三 loadings()函数
四 predict() 函数
五 screeplot() 函数
六 biplot() 函数
主成分分析实例一
某中学随机抽取某年级30名学生,测量其身高,体重,胸围,坐高,针对这30名中学生身体四项指标数据做主成分分析。
student<-data.frame(
X1=c(148, 139, 160, 149, 159, 142, 153, 150, 151, 139,
140, 161, 158, 140, 137, 152, 149, 145, 160, 156,
151, 147, 157, 147, 157, 151, 144, 141, 139, 148),
X2=c(41, 34, 49, 36, 45, 31, 43, 43, 42, 31,
29, 47, 49, 33, 31, 35, 47, 35, 47, 44,
42, 38, 39, 30, 48, 36, 36, 30, 32, 38),
X3=c(72, 71, 77, 67, 80, 66, 76, 77, 77, 68,
64, 78, 78, 67, 66, 73, 82, 70, 74, 78,
73, 73, 68, 65, 80, 74, 68, 67, 68, 70),
X4=c(78, 76, 86, 79, 86, 76, 83, 79, 80, 74,
74, 84, 83, 77, 73, 79, 79, 77, 87, 85,
82, 78, 80, 75, 88, 80, 76, 76, 73, 78)
)
#主成分分析
student.pr <- princomp(student, cor = TRUE)
#显示结果
summary(student.pr, loadings=TRUE)
#预测,显示各样本主成分的值
pre<-predict(student.pr)
#显示碎石图
screeplot(student.pr,type=”lines”)
# 主成分分析散点图
biplot(student.pr)
主成分分析实例二
对128个成年男子的身材进行测量,每人测得16项指标,身高,坐高,胸围,头高,裤长,下档,手长,领围,前胸,后背,肩厚,肩宽,袖长,肋围,腰围,腿肚,分别用X1-X16表示。16项指标的相关矩阵R。从相关矩阵出发进行主成分分析,随16项指标进行分类。
命令
x<-c(
1.00,
0.79, 1.00,
0.36, 0.31, 1.00,
0.96, 0.74, 0.38, 1.00,
0.89, 0.58, 0.31, 0.90, 1.00,
0.79, 0.58, 0.30, 0.78, 0.79, 1.00,
0.76, 0.55, 0.35, 0.75, 0.74, 0.73, 1.00,
0.26, 0.19, 0.58, 0.25, 0.25, 0.18, 0.24, 1.00,
0.21, 0.07, 0.28, 0.20, 0.18, 0.18, 0.29,-0.04, 1.00,
0.26, 0.16, 0.33, 0.22, 0.23, 0.23, 0.25, 0.49,-0.34, 1.00,
0.07, 0.21, 0.38, 0.08,-0.02, 0.00, 0.10, 0.44,-0.16, 0.23, 1.00,
0.52, 0.41, 0.35, 0.53, 0.48, 0.38, 0.44, 0.30,-0.05, 0.50, 0.24, 1.00,
0.77, 0.47, 0.41, 0.79, 0.79, 0.69, 0.67, 0.32, 0.23, 0.31, 0.10, 0.62, 1.00,
0.25, 0.17, 0.64, 0.27, 0.27, 0.14, 0.16, 0.51, 0.21, 0.15, 0.31, 0.17, 0.26, 1.00,
0.51, 0.35, 0.58, 0.57, 0.51, 0.26, 0.38, 0.51, 0.15, 0.29, 0.28, 0.41, 0.50, 0.63, 1.00,
0.21, 0.16, 0.51, 0.26, 0.23, 0.00, 0.12, 0.38, 0.18, 0.14, 0.31, 0.18, 0.24, 0.50, 0.65, 1.00
)
names<-c(“X1”, “X2”, “X3”, “X4”, “X5”, “X6”, “X7”, “X8”, “X9”,
“X10”, “X11”, “X12”, “X13”, “X14”, “X15”, “X16”)
R<-matrix(0, nrow=16, ncol=16, dimnames=list(names, names))
for (i in 1:16){
for (j in 1:i){
R<-x[(i-1)*i/2+j]; R[j,i]<-R
}
}
#主成分分析
pr<-princomp(covmat=R)
load<-loadings(pr)
#
plot(load[,1:2])
text(load[,1], load[,2], adj=c(-0.4, 0.3))
主成分回归
示例一:
考虑进口总额Y与三个自变量:国内总产值,存储量,总消费量之间的关系。现收集了1949-1959共11年的数据,试做线性回归和主成分回归分析。
conomy<-data.frame(
x1=c(149.3, 161.2, 171.5, 175.5, 180.8, 190.7, 202.1, 212.4, 226.1, 231.9, 239.0),
x2=c(4.2, 4.1, 3.1, 3.1, 1.1, 2.2, 2.1, 5.6, 5.0, 5.1, 0.7),
x3=c(108.1, 114.8, 123.2, 126.9, 132.1, 137.7, 146.0, 154.1, 162.3, 164.3, 167.6),
y=c(15.9, 16.4, 19.0, 19.1, 18.8, 20.4, 22.7, 26.5, 28.1, 27.6, 26.3)
)
线性回归
lm.sol<-lm(y~x1+x2+x3, data=conomy)
summary(lm.sol)
主成分回归
# 主成分分析
conomy.pr<-princomp(~x1+x2+x3, data=conomy, cor=T)
summary(conomy.pr, loadings=TRUE)
pre<-predict(conomy.pr)
conomy$z1<-pre[,1]; conomy$z2<-pre[,2]
lm.sol<-lm(y~z1+z2, data=conomy)
summary(lm.sol)
示例二:

在响应变量Y与p个解释变量的回归模型中,当解释变量间具有较强的多重共线性时,利用经典的回归方法求回归系数的最小二乘估计,一般效果较差。主成份回归的主要思想是首先通过主成分分析来精简变量,将多个相关的原始变量指标转化为几个独立的综合指标,然后将其作为主成分的观测值,并建立回归模型,以简化回归方程的结构。

主成分回归可以解决变量间共线性的问题,但也给回归模型的解释带来一定的复杂性,因为主成分是原始变量的线性组合,不是直接观测的变量,其含义有时不明确。在求得主成分回归方程后,经常又适用逆变换将其变为原始变量的回归方程。当原始变量间有较强的多重共线性,其主成分又有特殊的含义时,采用主成分回归的效果往往较好。

 

例题: 有学者认为,血清中低密度脂蛋白增高和高密度脂蛋白降低,是引起动脉硬化的一个重要原因。现测量了30名动脉硬化疑似患者的:x1:载脂蛋白AI,x2:载脂蛋白B,x3:载脂蛋白E,x4:载脂蛋白C,y1:低密度脂蛋白中的胆固醇含量,y2:高密度脂蛋白中的胆固醇含量。资料见下表,试对y2/y1对四个解释变量进行主成分回归.

R 主成分回归
例题数据

 

1. 进行主成分分析

本例利用prcomp()函数进行主成分分析。

a=read.csv(“pcareg.csv”);b=data.frame(a[,1:4]);pca=prcomp(b,scale=T);summary(pca)

R 主成分回归
主成分分析结果

 

主成分分析结果表明,前三个主成分可以解释总变异的90.87%,因此本文取前三个主成分。

2. 主成分得分

调用主成分分析的得分,并将响应变量标准化。

reg.data=data.frame(pca$x[,1:3],y=scale(a[,7],scale=T));head(reg.data)

R 主成分回归
主成分得分结果

 

3.主成分回归

pca.reg=lm(y~.,data=reg.data);summary(pca.reg)

R 主成分回归
主成分回归结果

 

三个主成分的回归系数均达到显著水平,其回归方程为: y’=-0.386PC1+0.682PC2+0.312*PC3

4. 逆变换为原始变量的回归方程

①主成分载荷:调用主成分分析的主成分载荷如下:

R 主成分回归
主成分载荷

 

故前三个主城表达式为:

PC1=-0.272 X1’+0.526 X2’+0.636 X3’+0.494 X4′

PC2=0.826 X1′-0.155 X2’+0.065 X3’+0.537 X4′

PC3=-0.441 X1′-0.774 X2’+0.107 X3’+0.442 X4′

X1’,X2’,X3’,X4’为标准化的解释变量。 将以上关系式带入回归方程得: y’ = 0.53* X1′ -0.55* X2′ -0.17*X3 +0.31*X4′

②原始变量的均值和标准差:求得原始变量的均值和标准差如下:

R 主成分回归
均数和标准差

 

因此:X1’=(X1-153)/23.76;X2’=(X2-125.33)/18.38;X3’=(X3-8.08)/2.16;X4’=(X4-20.35)/6.97

将以上关系式带入PC的关系式得回归方程: y = -11.003+ 0.020*x1 – 0.030*x2 -0.078*x3 + 0.045*x4

本文来自baijiahao,观点不代表一起大数据-技术文章心得立场,如若转载,请注明出处:https://baijiahao.baidu.com/s?id=1584631455008389646&wfr=spider&for=pc

联系我们

在线咨询:点击这里给我发消息

邮件:23683716@qq.com

跳至工具栏