R语言学习笔记:主成分分析

Principal Component Analysis:当有多个相似变量,希望提取出“最大公约数”,是重要的降维手法

数据:IQ.FULL.csv

美国ASVAB的数据,用来评估参军人员的智力水平。

举例:四项技能:Word,Math,Parag,Arith

```

iqdata = read.csv ("IQ.Full.csv", sep = ',', header = T, stringsAsFactors = F)

pairs (iqdata [, c('Word', 'Parag', 'Math', 'Arith')])

```

做出散点图:


如果我们希望使用一个指标(分数)来衡量某人的智力水平,先从两个变量开始:Word和Parag,为了方便运算,随机选取50个人的数据作为分析样本

```

set.seed(1)

iqsample <- iqdata[sample(nrow(iqdata), 50, replace=FALSE), c("Word","Parag", "Math", "Arith")]

plot(iqsample$Word, iqsample$Parag, pch = 16)

```

找到一条线,举例这些点最近,每个点的投影即是新变量

假设这条线已经找到:

将这条线看做是数轴,找到线上所有这些点的平均值点处,其他所有点用其投影在这条线上相距平均值点的n倍标准差来表示,类似于对两个成绩进行加权平均

```

pc.1 = prcomp(iqsample[, c("Word","Parag")])

pc.1$rotation #将每一个主成分占到各自变量的比例抽取出来

```


PC1第一个主成分说明word占据了0.93的权重,parag占据了0.35的权重;pc2捕捉的是parag的成绩比word成绩好多少(两门课之间偏颇的水平)

一般还会对主成分进行标准化

```

pc.1 <- prcomp(iqsample[, c("Word","Parag")], scale = TRUE)

pc.1$rotation  # weights

```

标准化之后二者对于第一个主成分的贡献成分是一样的。标准化即是对可能存在的不同分值进行标准化,统一为一个衡量比例。

对于第二个主成分的贡献表明了两个主成分的偏颇大小

利用

```

pc.1$x

``

语句可以把每一个信息点的主成分都显示出来


最左边这列显示数据的标号,主成分二负的越多表示word水平比parag要好的多

通过前面的主成分1相等可以得出结论,word和parag水平相等,对学生成绩的偏差贡献相等

一些有趣的结果:

```

# pca of all subjects

pca.all <- prcomp(iqdata[,  c(11:20)], scale.=TRUE)

pca.all$rotation

```

从主成分2当中看出,偏理论类型的学科和偏实际应用的学科之间存在一些偏差

再看性别之间的偏差

```

# gender role

prop.table(table(iqdata$Gender))  # almost 50/50 among gender

plot(pca.all$x[, 1], pca.all$x[, 2], col=as.factor(iqdata$Gender),

    xlim=c(-10, 10), ylim=c(-10, 10),

    xlab="PC1", ylab="PC2")

abline(v=0, h=0)

```


可以看出,男女差距的最大不同是男性主要集中在横轴下方,女性则集中在横轴上方,这是主成分2的差距,意味着男女在偏理论和偏实操的学科之间存在着偏差

你可能感兴趣的:(R语言学习笔记:主成分分析)