<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div style="font-family:Arial;">O problema não é específico dos dados. Usei o "api" para facilitar a reprodução, mas esbarrei no problema ao analisar o banco de dados de um inquérito domiciliar de abrangência nacional. Minha intenção era criar um indicador econômico baseado em bens, que as pessoas poderiam utilizar em seus próprios estudos. Dizer "pega essas variáveis e joga no PCA" poderia até ser uma alternativa tecnicamente correta, mas restringiria o uso do indicador a quem sabe o que é isso. Dessa forma, seguindo o passo de outras iniciativas semelhantes, eu gostaria de dizer "pega as variáveis, multiplica por esse número e você tem o indicador XYZ".<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Outro motivo para eu poder dizer que o centro da questão é a ferramente é que eu rodei a PCA (com os pesos amostrais) no Stata, e os resultados foram semelhantes aos que eu consigo no R com o predict() ou com o "with(apiclus2, api99 * table2["api99", "coef"] + ... ", mas diferentes dos que eu consigo no R com o pca2$x[, "PC1"].<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Dessa forma, embora a resposta possa admitidamente ser mas criativa do que isso, estou entre as possibilidades de que (a) os componentes principais do svyprcomp têm alguma interpretação especial que me escapa até agora, ou (b) o svyprcomp tem algum erro, que deveria ser identificado e reparado. Infelizmente, na estatística eu sou usário, então não consigo abrir o código do svyprcomp e dizer se a forma como ele lida com os pesos amostrais (ou a SVD) está correta ou não.<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Grato pela atenção,<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> </div>
<div> </div>
<div>Em Ter 26 abr. 2016, às 18:18, Cesar Rabak escreveu:<br></div>
<blockquote type="cite"><div dir="ltr"><div style="font-family:Arial;">Leonardo,<br></div>
<div> </div>
<div>Você já está no terceiro post sobre o seu problema sem que ninguém tenha feito uma intervenção, é o que a gente chama de « depuração confessional » (veja <a href="https://books.google.com.br/books?id=4miO-X83hmUC&pg=PA255&lpg=PA255&dq=C+programming+confessional+debugging&source=bl&ots=ECCCrPnkdL&sig=8EjauFqGZhBBnIcBL3w6TCz9m2o&hl=en&sa=X&ved=0ahUKEwiBqqTam63MAhWDfpAKHYCsC7kQ6AEIHTAA#v=onepage&q=C%20programming%20confessional%20debugging&f=false">https://books.google.com.br/books?id=4miO-X83hmUC&pg=PA255&lpg=PA255&dq=C+programming+confessional+debugging&source=bl&ots=ECCCrPnkdL&sig=8EjauFqGZhBBnIcBL3w6TCz9m2o&hl=en&sa=X&ved=0ahUKEwiBqqTam63MAhWDfpAKHYCsC7kQ6AEIHTAA#v=onepage&q=C%20programming%20confessional%20debugging&f=false</a>)!!<br></div>
<div> </div>
<div>Sendo específico com relação ao que você reporta, acho que você deve tentar entender se o problema é com os dados ou com os métodos:<br></div>
<div> </div>
<div>Escolha um dos conjuntos de dados, ou o "USArrest" ou o "api" e aplique as duas formas de fazer a ACP, analise os resultados.<br></div>
<div> </div>
<div>Por último, e imagino que não seja importante para você desvendar o mistério que lhe apareceu, coloco a seguinte dúvida, qual a vantagem de fazer toda essa ginástica se para gerar o tal resultado que não necessitaria do comando para "<span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size"> </span></span><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">análise de componentes principais propriamente dito" você usa coeficientes, loadings, etc. obtidos desse comando?</span></span><br></div>
<div> </div>
<div><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">HTH</span></span><br></div>
</div>
<div><div style="font-family:Arial;"> </div>
<div defang_data-gmailquote="yes"><div style="font-family:Arial;">2016-04-24 17:13 GMT-03:00 Leonardo Ferreira Fontenelle <span dir="ltr"><<a href="mailto:leonardof@leonardof.med.br">leonardof@leonardof.med.br</a>></span>:<br></div>
<blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204, 204, 204);padding-left:1ex;" defang_data-gmailquote="yes"><div style="font-family:Arial;"><u></u><br></div>
<div><div style="font-family:Arial;">Parece que não sou a única pessoa com dificuldade em gerar esse vetor (quase) perfeitamente correlacionado com o primeiro vetor. O próprio comando predict não consegue!<br></div>
<div style="font-family:Arial;"> <br></div>
<div style="font-family:Arial;">Retomando os exemplos anteriores:<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;"> <br></div>
<div style="font-family:Arial;"><span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">pca1 <- prcomp(USArrests, scale = TRUE)</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font"></span></span><br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">predpca1 <- predict(pca1, USArrests)</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font"></span><br></div>
<div style="font-family:Arial;"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">cor(pca1$x[, "PC1"], predpca1[, "PC1"])</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font"></span><br></div>
<div style="font-family:Arial;"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font"># resultado: 1,00</span><br></div>
<div style="font-family:Arial;"> <br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;"><span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">library("survey")</span></span><br></div>
<div><span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">data(api)</span></span><br></div>
<div><span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">dclus2 <- svydesign(id = ~ dnum + snum, fpc = ~ fpc1 + fpc2, data = apiclus2)</span></span><br></div>
<div style="font-family:Arial;"><span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">pca2 <- svyprcomp(~ api99 + api00 + ell, design = dclus2, scale = TRUE, scores = TRUE)</span></span><br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">predpca2 <- predict(pca2, dclus2$variables)</span><br></div>
<div style="font-family:Arial;"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font">cor(pca2$x[, "PC1"], predpca2[, "PC1"])</span><br></div>
<div style="font-family:Arial;"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif" class="font"># resultado: 0,506</span><br></div>
<div style="font-family:Arial;"> <br></div>
<div style="font-family:Arial;">Isso é um erro do  svyprcomp??<span><span style="color:rgb(136, 136, 136)" class="colour"></span></span><br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;"> <br></div>
<div><div><span><span style="color:rgb(136, 136, 136)" class="colour"><a title="Currículo Lattes" href="http://lattes.cnpq.br/9234772336296638">Leonardo Ferreira Fontenelle</a></span></span><br></div>
</div>
<div style="font-family:Arial;"> </div>
<div><div><div> <br></div>
<div> <br></div>
<div>Em Dom 24 abr. 2016, às 16:11, Leonardo Ferreira Fontenelle escreveu:<br></div>
<blockquote type="cite"><div>Em Dom 24 abr. 2016, às 00:16, Leonardo Ferreira Fontenelle escreveu:<br></div>
<blockquote type="cite"><div style="font-family:Arial;">Boa tarde a todos!<br></div>
<div style="font-family:Arial;"> <br></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;"> <br></div>
<div style="font-family:Arial;">Para começar, mostro uma situação em que isso funciona:<br></div>
<div style="font-family:Arial;"> <br></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;"> <br></div>
<div style="font-family:Arial;">Agora, uma situação onde isso não funciona:<br></div>
<div style="font-family:Arial;"> <br></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;"> <br></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;"> <br></div>
<div style="font-family:Arial;">Grato!<br></div>
<div style="font-family:Arial;"> <br></div>
<div><div><a title="Currículo Lattes" href="http://lattes.cnpq.br/9234772336296638">Leonardo Ferreira Fontenelle</a><br></div>
</div>
<div style="font-family:Arial;"> <br></div>
</blockquote><div style="font-family:Arial;"> <br></div>
<div style="font-family:Arial;">O problema tem a ver com a ponderação das observações. Não apenas essa parece ser a única diferença entre prcomp() e svyprcomp() (a função não leva em consideração correlações dentro dos conglomerados) mas também usar svyprcom() num delineamento gera componentes com uma correlação quase perfeita com os índices criados à mão como no e-mail anterior.<br></div>
<div style="font-family:Arial;"> <br></div>
<div style="font-family:Arial;">Digitar "svyprcomp" na linha de comando do R, sem aspas ou parênteses, mostra o código-fonte. Ele me parece usar uma abordagem equivalente à da resposta <a href="http://stats.stackexchange.com/a/113488">http://stats.stackexchange.com/a/113488</a>. Mesmo assim, não consigo entender de que forma posso criar um índice à mão que seja (quase) perfeitamente correlacionado com o primeiro componente.<br></div>
<div style="font-family:Arial;"> <br></div>
<div><div><a href="http://lattes.cnpq.br/9234772336296638" title="Currículo Lattes">Leonardo Ferreira Fontenelle</a><br></div>
</div>
</blockquote><div style="font-family:Arial;"> <br></div>
</div>
</div>
</div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">_______________________________________________<br></div>
<div style="font-family:Arial;"> R-br mailing list<br></div>
<div style="font-family:Arial;"> <a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br></div>
<div style="font-family:Arial;"> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br></div>
<div style="font-family:Arial;"> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></div>
</blockquote></div>
</div>
<div><u>_______________________________________________</u><br></div>
<div>R-br mailing list<br></div>
<div><a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br></div>
<div><a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br></div>
<div>Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></div>
</blockquote><div style="font-family:Arial;"> </div>
</body>
</html>