[R-br] Como recriar um componente de PCA obtido com svyprcomp()

Leonardo Ferreira Fontenelle leonardof em leonardof.med.br
Domingo Abril 24 00:16:40 BRT 2016


Boa tarde a todos!
 
Estou tentando escrever os resultados de uma análise de componentes
principais de forma que os leitores possam calcular o primeiro
componente a partir dos dados sem a necessidade de utilizar um comando
de análise de componentes principais propriamente dito. Minha ideia é
informar a codificação das variáveis, as cargas, os desvios-padrão, e
então orientar os leitores a multiplicar os valores das variáveis pelas
cargas e dividir pelos desvios-padrão e então somar tudo. Minha
expectativa é de que o resultado seja altamente correlacionado àquele
obtido por uma análise de componentes principais propriamente dita. No
entanto, como explico a seguir, não estou conseguindo, e de alguma forma
isso tem a ver com eu estar usando svyprcomp() em vez de prcomp().
 
Para começar, mostro uma situação em que isso funciona:
 
pca1 <- prcomp(USArrests, scale = TRUE)
table1 <- data.frame(loadings = pca1$rotation[, "PC1"], scale =
pca1$scale, coef = NA_real_, row.names = row.names(pca1$rotation))
table1$coef <- table1$loadings / table1$scale
firstcomponent1 <- with(USArrests, Murder * table1["Murder", "coef"] +
Assault * table1["Assault", "coef"] + UrbanPop * table1["UrbanPop",
"coef"] + Rape * table1["Rape", "coef"])
cor(firstcomponent1, pca1$x[, "PC1"])
# resultado: 1,00
 
Agora, uma situação onde isso não funciona:
 
library("survey")
data(api)
dclus2 <- svydesign(id = ~ dnum + snum, fpc = ~ fpc1 + fpc2, data
= apiclus2)
pca2 <- svyprcomp(~ api99 + api00 + ell, design = dclus2, scale = TRUE,
scores = TRUE)
table2 <- data.frame(loadings = pca2$rotation[, "PC1"], scale =
pca2$scale, coef = NA_real_, row.names = row.names(pca2$rotation))
table2$coef <- table2$loadings / table2$scale
firstcomponent2 <- with(apiclus2, api99 * table2["api99", "coef"] +
api00 * table2["api00", "coef"] + ell * table2["ell", "coef"])
cor(firstcomponent2, pca2$x[, "PC1"])
 # resultado: 0,506
 
Como eu consigo cargas ("loadings") e desvios-padrão ("scale") que eu
possa usar de forma a conseguir calcular à mão algum vetor altamente
correlacionado com o primeiro componente do svyprcomp()?
 
Grato!
 
Leonardo Ferreira Fontenelle[1]
 

Links:

  1. http://lattes.cnpq.br/9234772336296638
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160424/2fc3967e/attachment.html>


Mais detalhes sobre a lista de discussão R-br