R语言做主身分阐明的进程
昨天写了一篇关于主身分阐明领略的文章,今早登岸QQ看到舍得老师的提醒,发明本身阐明中有个较量严重的问题。问题发生的原因概略是这样造成的:
这两天写毕设,想用主身分阐明法确定权重,这个权重并不是确定所发生的各主身分的权重而是原始变量的权重,确定要领我在之前的文章中提到过,这里不表,接待各人纠错。在确定了原指标的权重后我思考为什么操作主身分阐明法可以或许给原变量赋权,提出的假设是:相关变量间操作主身分阐明法构建的原变量权重和原变量的方差有关。
下面用R语言具体阐明这一错误发生的进程,详细如下:
1、提出意料
> x for(i in 1:5){cat(var(x[,i]))} &&各变量的方差
输出:变量7:1.450593、变量7.1:0.9011858、变量7.2:0.6798419、变量7.3:0.3162055、
变量7.4:0.7114625
上图看到变量7、变量7.1的方差较大,于是意料:假如变量方差大而且变量地址的第一、第二主身分系数也大,那么变量的方差对主要主身分的孝敬大概也大。
2、验证
> a eigen(a) &&输出特征值、特征向量
输出:
$values
[1] 2.4827037 1.1607728 0.6199678 0.5945743 0.1419814 &&特征值
$vectors &&特征向量
[,1] [,2] [,3] [,4] [,5]
[1,] -0.5154713 0.3474973 0.2857406 0.4043920 0.6069221
[2,] -0.5901477 0.1397281 0.1231241 0.1860615 -0.7631666
[3,] -0.3153434 -0.6165648 -0.6063161 0.3708382 0.1235566
[4,] -0.3074906 -0.6295498 0.5665878 -0.4190523 0.1117583
[5,] -0.4382044 0.2885074 -0.4631974 -0.6990868 0.1465133
注1:顺便验证了一下R语言的输出特征向量是否已经单元化
> f for(i in 1:5){r[i] sum(r) 结论:可以看出r语言给出的特征向量是颠末单元化的
[1] 1
注2:由条约矩阵的公式A=T(C)BC,个中A,B条约、C为特征矩阵,T(C)为C的转置,可知每列特征向量前标记的改变对条约矩阵的功效不发生影响,因此特征向量图中的第一列可全变为正号
3、阐明
第一主身分的方差孝敬率较大,变量7,变量7.1在第一主身分中的系数也较大,因此这两个变量是能代表第一主身分的两个变量,而这两个变量的方差也较大,所以发生了方差大则对第一主身分孝敬大的错误假设。
4、纠错
但这一假设的错误其实犯得很不该该,原因在于没有对原始数据举办尺度化,尺度化的意义就在于统一量纲,消除方差影响,这样一来所有变量的方差就为1了。所以,很遗憾,上面的计较进程都白整了,嘿嘿。
5、尺度化先容
今朝R语言里尺度化的简朴代码我还不清楚,可以操作中心化处理惩罚后再处理惩罚或用Excel计较完直接读取数据,中心化为:
scale(*,scale=F) 个中*为列向量,可以在此基本上除以原列向量尺度差得尺度化;
尚有个代码是 scale(*,center=F) 先容里说是尺度化,但我看了下功效必定不是,所以还但愿有懂这个代码的跟我说说;
5、结论
主身分阐明只和相关有关,假如两个变量高度相关,可能多个变量高度相关,我设想在方差孝敬较大的几个主身分里必然会有某个主身分是由这几个高度相关变量主要抉择的,而且这一主身分的特征值会排在所有特征值的前列。这一结论尚有待进一步的数学论证。别的我们看到有些特征向量里的标记不统一,这不要紧,它是可以作为鉴定尺度来评价的。譬喻,某校对学生后果举办主身分阐明,个中一个特征值较大的主身分为F=0.33*X1+0.54*X2+0.45*X3-0.32*X4-0.76*X5-0.43*X6,这里X1、X2、X3三变量别离为地理、汗青、文化,X4、X5、X6三变量别离为数学、物理、计较机,那么可以按照这个主身分鉴定该学生更侧重文科照旧理科,其功效文科一定是为正值,理科则为负值。