如何用PCA预测GDP per capita?R中指定目标变量的实现疑问
解决方案:针对GDP per capita的有监督成分提取与方差解释
核心说明
普通PCA(prcomp)是无监督方法,仅基于自变量的协方差结构提取成分,完全不考虑目标变量(GDP per capita)。你之前得到的R²=90%,其实就是前两个主成分对GDP per capita的方差解释率——这是通过主成分回归(PCR)得到的结果,也就是你要的答案。
如果想直接提取优先解释GDP per capita方差的成分,需要用有监督的成分提取方法,比如偏最小二乘(PLS)。
方法1:用现有PCA结果计算GDP方差解释率
你已经完成了PCA,只需用提取的主成分回归GDP per capita,就能得到准确的方差解释率:
# 提取前两个主成分得分 pc_scores <- zpca[, 1:2] # 把GDP和主成分合并成数据框 model_data <- data.frame(gdppc = all$gdppc, pc_scores) # 拟合回归模型 gdppc_pcr <- lm(gdppc ~ ., data = model_data) # 查看R²(即主成分对GDP的方差解释率) summary(gdppc_pcr)$r.squared
这个结果和你画图得到的90%一致,就是前两个主成分能解释的GDP per capita方差比例。
方法2:用PLS提取以GDP为目标的成分
如果你想从一开始就提取优先解释GDP方差的成分,使用pls包的偏最小二乘回归:
- 安装并加载包:
install.packages("pls") library(pls)
- 拟合PLS模型(指定2个成分):
# all是包含GDP和所有自变量的数据框 pls_model <- plsr(gdppc ~ ., data = all, ncomp = 2, scale = TRUE, center = TRUE)
- 查看结果:
summary(pls_model)
输出里的Cumulative % variance of response就是前n个成分对GDP per capita的累计方差解释率,这正是你想要的“以GDP为目标的方差解释”结果。
- 提取PLS成分得分:
pls_scores <- predict(pls_model, newdata = all, type = "scores")
关于你遇到的predict报错问题
predict(prcomp_object, data)要求输入的数据和PCA建模时的自变量结构完全一致(即和allexceptgdppc的列名、数量匹配)。你输入单独的GDP变量,结构不匹配,所以报错。实际上你不需要把GDP传给predict,predict(pca, all)会自动忽略all里的GDP变量,只处理和allexceptgdppc对应的自变量,生成主成分得分。
内容的提问来源于stack exchange,提问作者maxpl727
相关产品推荐
相关产品推荐

