向量平方(x²)运算符失效及PCA碎石图绘制异常求助(R语言)
问题解决方案
1. 向量平方运算问题
R语言中不存在x²格式的运算符,这个是Unicode字符,无法被识别为平方运算操作符。正确的平方写法有两种:
- 使用半角脱字符
^:例如对向量vec做平方,写为vec^2 - 使用双星号
**:例如vec**2
2. PCA碎石图绘制问题
你的代码存在两个核心问题,修正后即可得到预期的碎石图:
问题1:未对数据做标准化处理
princomp()默认基于协方差矩阵计算PCA,但olympic$tab中的变量单位、尺度差异极大(比如跑步时间为秒,跳远成绩为米),协方差矩阵会被方差大的变量主导,导致PC的方差排序混乱。需要在princomp()中添加cor=TRUE参数,基于相关矩阵做PCA(自动对数据做标准化处理)。
问题2:使用了全角幂运算符号
代码中的ˆ是全角字符,R无法识别为幂运算操作符,需要替换为半角的^。
修正后的代码
library(ade4) data("olympic") # 基于相关矩阵做PCA,自动标准化数据 pca.olympic <- princomp(olympic$tab, cor = TRUE) # 使用半角^计算方差,绘制碎石图 plot(1:length(pca.olympic$sdev), pca.olympic$sdev^2, type="b", xlab="# PCs", ylab="Variance of PC", main="PCA of Correlation Matrix")
可选优化:绘制方差解释率百分比碎石图
如果需要更常用的“方差解释率百分比”碎石图,可使用以下代码:
library(ade4) data("olympic") pca.olympic <- princomp(olympic$tab, cor = TRUE) # 计算每个PC的方差解释率百分比 variance_pct <- (pca.olympic$sdev^2 / sum(pca.olympic$sdev^2)) * 100 plot(1:length(variance_pct), variance_pct, type="b", xlab="# PCs", ylab="Variance Explained (%)", main="Scree Plot - PCA of Olympic Data")
内容的提问来源于stack exchange,提问作者Cole Hendrickson
相关产品推荐
相关产品推荐

