<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>Em Ter 26 abr. 2016, às 22:52, Cesar Rabak escreveu:<br></div>
<blockquote type="cite"><div dir="ltr"><div style="font-family:Arial;">Caro Leonardo,<br></div>
<div> </div>
<div>Seu post enseja vários assuntos:<br></div>
<div> </div>
<div>A respeito de « <span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">criar um indicador econômico baseado em bens », você já considerou usar o CCEB da ABEP <a href="http://www.abep.org/criterio-brasil">http://www.abep.org/criterio-brasil</a>?</span></span><br></div>
</div>
</blockquote><div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Obrigado por estar ajudando, Cesar.<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Com relação ao CCEB, já até usei em estudo anterior (<a defang_id="pub-id::doi" href="http://dx.doi.org/10.5712/rbmfc7%2825%29482">http://dx.doi.org/10.5712/rbmfc7(25)482</a>), mas neste caso ele não me atende.  Além de eles serem ajustados a partir de levantamentos de dados restritos aos grandes centros urbanos, todas as versões usam um ou mais dados que estão ausentes no inquérito em questão. Conheço outro indicador econômico baseado em bens, mas ele foi criado para domicílios urbanos e também tem itens que não estão disponíveis no banco de dados.<br></div>
<div style="font-family:Arial;"> </div>
<blockquote type="cite"><div dir="ltr"><div><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">"pega essas variáveis e joga no PCA" vai ser sempre diferente de "pega as variáveis, multiplica por esse número e você tem o indicador XYZ" porque no primeiro caso um procedimento matemático criado para encontrar as dimensões com maior variabilidade nos dados seria aplicado enquanto no segundo você estaria criando um indicador baseado em uma média ponderada (no mínimo) ou uma combinação linear das variáveis com coeficientes fixos a priori.</span></span><br></div>
</div>
</blockquote><div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">O "multiplica esse número" seria derivado da análise de componentes principais. Se fosse para criar um indicador sem PCA, eu não estaria quebrando a cabeça com essa questão :)<br></div>
<div style="font-family:Arial;"> </div>
<blockquote type="cite"><div dir="ltr"><div><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">A diferença entre os dois procedimentos está, como você intui, no uso diferente dos pesos e no fato de o projeto do inquérito para os dados do exemplo usarem aglomerados (/clusters/), no caso deste exemplo 15 deles, e tamanho das populações de 757 casos (essa informação é usada para corrigir a variância calculada [a famosa correção para população finita]).</span></span><br></div>
</div>
<div> </div>
<div><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">Por isso, minha humilde insistência que você não compare duas coisas diferentes, pois o exemplo do USArrests com procomp não tem nenhuma dessas sofisticações.</span></span><br></div>
</blockquote><div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Olhando o código do svyprcomp(), ele não usa nem correção para população finita, nem conglomerados, apenas a ponderação das observações. Naturalmente, fazer PCA com e sem ponderação das observações tem que dar resultados diferentes, ainda mais em bancos de dados diferentes. O meu uso para o USArrests e o prcomp() foi mostrar que, nesse cenário mais usual, não existe essa discrepância entre métodos diferentes de obter o componente.<br></div>
<div style="font-family:Arial;"> </div>
<blockquote type="cite"><div dir="ltr"><div><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">Não entendo esta parte: «. . . 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"]. »</span></span><br></div>
<div> </div>
<div><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">Como você calculou os "coef"'s em cada SW?</span></span><br></div>
<div> </div>
</div>
</blockquote><div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Os coeficientes em questão são a divisão das cargas pelas escalas. Isso está ilustrado no código em meu primeiro e-mail, mas repito abaixo:<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">library("survey")<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">data(api)<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">dclus2 <- svydesign(id = ~ dnum + snum, fpc = ~ fpc1 + fpc2, data = apiclus2)<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">pca2 <- svyprcomp(~ api99 + api00 + ell, design = dclus2, scale = TRUE, scores = TRUE)<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">table2 <- data.frame(loadings = 
pca2$rotation[, "PC1"], scale = pca2$scale, coef = NA_real_, row.names =
 row.names(pca2$rotation))<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">table2$coef <- table2$loadings / table2$scale<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">firstcomponent2 <- with(apiclus2, 
api99 * table2["api99", "coef"] + api00 * table2["api00", "coef"] + ell *
 table2["ell", "coef"])<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">cor(firstcomponent2, pca2$x[, "PC1"])<br></span></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;"> </div>
<div style="font-family:Arial;">Existe uma forma mais elegante de obter os coeficientes, sem data.frame, mas só pensei nela depois de postar o primeiro e-mail.<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Com relação à correlação, eu até tenho no meu .Rprofile um  "svycor"  que calculava <a href="https://stat.ethz.ch/pipermail/r-help/2003-July/036645.html">correlação a partir do svyvar</a> (), mas não achei pertinente usá-lo no código postado. Desde então, seguindo a "depuração confessional", encontrei uma alternativa mais facilmente reprodutível:<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">> cov.wt(cbind(caseiro = firstcomponent2, original = pca2$x[, "PC1"]), wt = weights(dclus2), cor = TRUE)$cor<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">#            caseiro  original<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font"># caseiro  1.0000000 0.4049466<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font"># original 0.4049466 1.0000000</span><br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Naturalmente, esse comando não leva em consideração os conglomerados e FPC, mas ( como eu já disse) o próprio svyprcomp() também não.<br></div>
<div style="font-family:Arial;"> </div>
<blockquote type="cite"><div dir="ltr"><div style="font-family:Arial;"><span style="font-family:Arial" class="font"><span style="font-size:12.8px" class="size">Para dizer se a svyprcomp pode ter algum erro ou não, você precisa criar um design que seja apropriado para poder usar os dados os USArrests na svyprcomp e conseguir chegar nos resultados da prcomp do pacote "base" do R, que indicaria que não há erro, ou se o condicionamento dos dados estiver correto para svyprcomp, então discutir a discrepância com os autores do pacote survey.</span></span><br></div>
</div>
</blockquote><div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Criando um objeto survey.design sem pesos amostrais nem conglomerados, o svyprcomp() se comporta igual ao prcomp():<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">> d <- svydesign(ids = ~ 1, data = USArrests)<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font"><span style="color:#ff0000" class="colour">Warning message:<br></span></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font"><span style="color:#ff0000" class="colour">In svydesign.default(ids = ~1, data = USArrests) :<br></span></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font"><span style="color:#ff0000" class="colour">  No weights or probabilities supplied, assuming equal probability</span><br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">> svypc <- svyprcomp(~ Murder + Assault + UrbanPop + Rape, d, scale. = TRUE, scores = TRUE)<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">> pca1 <- prcomp(USArrests, scale = TRUE)</span><br></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">> svypc<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Standard deviations:<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">[1] 1.5748783 0.9948694 0.5971291 0.4164494<br></span></div>
<div> </div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Rotation:<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">                PC1        PC2        PC3         PC4<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Murder   -0.5358995  0.4181809 -0.3412327  0.64922780<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Assault  -0.5831836  0.1879856 -0.2681484 -0.74340748<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">UrbanPop -0.2781909 -0.8728062 -0.3780158  0.13387773<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Rape     -0.5434321 -0.1673186  0.8177779  0.08902432<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">> pca1<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Standard deviations:<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">[1] 1.5748783 0.9948694 0.5971291 0.4164494<br></span></div>
<div> </div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Rotation:<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">                PC1        PC2        PC3         PC4<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Murder   -0.5358995  0.4181809 -0.3412327  0.64922780<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Assault  -0.5831836  0.1879856 -0.2681484 -0.74340748<br></span></div>
<div><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">UrbanPop -0.2781909 -0.8728062 -0.3780158  0.13387773<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">Rape     -0.5434321 -0.1673186  0.8177779  0.08902432</span><br></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">> cor(svypc$x[, "PC1"], predict(svypc, USArrests)[, "PC1"])<br></span></div>
<div style="font-family:Arial;"><span style="font-family: menlo, consolas, "courier new", monospace, sans-serif;" class="font">[1] 1</span><br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Não sei se ajuda na linha de raciocínio, mas também inverti a situação e apliquei o prcomp() ao api:<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font">dclus2 <- svydesign(id = ~ dnum + snum, fpc = ~ fpc1 + fpc2, data = apiclus2)</span><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"><br></span></div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font">svypc <- svyprcomp(~ api99 + api00 + ell, design = dclus2, scale = TRUE, scores = TRUE)</span><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"><br></span></div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font">pc <- prcomp(~ api99 + api00 + ell, data = apiclus2, scale = TRUE, retx = TRUE)</span><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"><br></span></div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font">cov.wt(cbind(svypc$x[, "PC1"], predict(svypc, apiclus2)[, "PC1"]), wt = weights(dclus2), cor = TRUE)$cor</span><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"><br></span></div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"># correlação: 0,40</span><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"><br></span></div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font">cor(cbind(pc$x[, "PC1"], predict(pc, apiclus2)[, "PC1"]))</span><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"><br></span></div>
<div style="font-family:Arial;"><span style="font-family: tahoma, sans-serif, sans-serif;" class="font"># correlação: 1</span><br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Então, novamente, a divergência entre o $x e o predict() é específica do svyprcomp() e tem a ver com a forma como ele lida com os pesos das observações.<br></div>
<div style="font-family:Arial;"> </div>
<div style="font-family:Arial;">Abraços,<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>