<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div style="font-family:Arial;">Boa tarde a todos!<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">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().<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Para começar, mostro uma situação em que isso funciona:<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">pca1 <- prcomp(USArrests, scale = TRUE)<br></div>
<div style="font-family:Arial;">table1 <- data.frame(loadings = pca1$rotation[, "PC1"], scale = pca1$scale, coef = NA_real_, row.names = row.names(pca1$rotation))<br></div>
<div style="font-family:Arial;">table1$coef <- table1$loadings / table1$scale<br></div>
<div style="font-family:Arial;">firstcomponent1 <- with(USArrests, Murder * table1["Murder", "coef"] + Assault * table1["Assault", "coef"] + UrbanPop * table1["UrbanPop", "coef"] + Rape * table1["Rape", "coef"])<br></div>
<div style="font-family:Arial;">cor(firstcomponent1, pca1$x[, "PC1"])<br></div>
<div style="font-family:Arial;"># resultado: 1,00<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Agora, uma situação onde isso não funciona:<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">library("survey")<br></div>
<div style="font-family:Arial;">data(api)<br></div>
<div style="font-family:Arial;">dclus2 <- svydesign(id = ~ dnum + snum, fpc = ~ fpc1 + fpc2, data = apiclus2)<br></div>
<div style="font-family:Arial;">pca2 <- svyprcomp(~ api99 + api00 + ell, design = dclus2, scale = TRUE, scores = TRUE)<br></div>
<div style="font-family:Arial;">table2 <- data.frame(loadings = pca2$rotation[, "PC1"], scale = pca2$scale, coef = NA_real_, row.names = row.names(pca2$rotation))<br></div>
<div style="font-family:Arial;">table2$coef <- table2$loadings / table2$scale<br></div>
<div style="font-family:Arial;">firstcomponent2 <- with(apiclus2, api99 * table2["api99", "coef"] + api00 * table2["api00", "coef"] + ell * table2["ell", "coef"])<br></div>
<div style="font-family:Arial;">cor(firstcomponent2, pca2$x[, "PC1"])<br></div>
<div style="font-family:Arial;"> # resultado: 0,506<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">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()?<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Grato!<br></div>
<div style="font-family:Arial;"> </div>
<div id="sig4487139"><div class="signature" id="signature"><a href="http://lattes.cnpq.br/9234772336296638" title="Currículo Lattes">Leonardo Ferreira Fontenelle</a><br></div>
</div>
<div style="font-family:Arial;"> </div>
</body>
</html>