首页 > 解决方案 > 无法进行转换以应用我的 PCA 模型

问题描述

首先,我想说我花了几个小时试图弄清楚我的数据发生了什么,也许我无法理解理论或所需步骤。

读取数据

数据集:uscrime

uscrime <- read.csv('uscrime.txt', header = TRUE, sep = '')
uscrime <- dplyr::mutate_all(uscrime, function(x) as.numeric(as.character(x)))
uscrime_pca <- prcomp(uscrime, center = TRUE,scale. = TRUE)

使用 pcaCharts,我发现我只需要 k = 5

在此处输入图像描述

使用 PC1 到 PC5 创建简单的线性模型

使用 PC 结合犯罪数据,创建线性回归模型

  k  = 5
  uscrime_PCs <- cbind(uscrime_pca$x[,1:k],uscrime[,16])
  model <- lm(V6~., data = as.data.frame(uscrime_PCs))
  summary(model)

应用转换

  beta0 <- model$coefficients[1]
  betas <- model$coefficients[2:(k+1)]
  alpha <- uscrime_pca$rotation[,1:k] %*% betas
  mu <- sapply(uscrime[,1:16],mean)
  sigma <- sapply(uscrime[,1:16],sd)
  origAlpha <- alpha/sigma
  origBeta0 <- beta0 - sum(alpha*mu /sigma)
  estimates <- as.matrix(uscrime[,1:16]) %*% origAlpha + origBeta0

这是我想用我的新模型计算的值

  value_to_be_calculate <- data.frame(M= 14.0, So = 0, Ed = 10.0, Po1 = 12.0, Po2  = 15.5, LF = 0.640, M.F = 94.0, Pop = 150, NW = 1.1, U1 = 0.120, U2 = 3.6, Wealth = 3200, Ineq = 20.1, Prob = 0.040,Time = 39.0)

这是我无法解决的部分:

   pred_df <- data.frame(predict(uscrime_pca, value_to_be_calculate)) 
   pred <- predict(model, pred_df)

其他问题

我没有在与 PCA 模型estimates有关的计算中以任何方式使用变量value_to_be_calculate

标签: rpca

解决方案


推荐阅读