tag:blogger.com,1999:blog-27848002744492454102024-03-12T23:45:46.215-03:00O Manuscrito de Tunbridge WellsBlog do curso ECO1800 Técnicas de Pesquisa em Economia - Turma 2JC - PUC-RioUnknownnoreply@blogger.comBlogger18125tag:blogger.com,1999:blog-2784800274449245410.post-49197339078403411702012-08-10T06:18:00.002-03:002012-08-10T23:54:10.301-03:00Boas vindas à turma de 2012-2Aos alunos do segundo semestre de 2012, boas vindas ao curso! Este é o blog da turma 2JC da disciplina Técnicas de Pesquisa em Economia.<br />
<br />
Na coluna à esquerda, vocês encontrarão o material didático do curso: software, slides e listas de exercícios. Como eu disse em sala, estou revisando os slides do semestre passado e os atalhos serão ativados à medida em que o curso avançar (os slides da primeira aula já foram publicados). As listas de exercícios estão todas disponíveis. Se houver revisão nelas, será pontual e avisarei quando acontecer.<br />
<br />
Na coluna à direita, logo abaixo da caixa de busca, encontram-se atalhos para sites de interesse, apostilas, vídeos e material didático adicional. Esses atalhos estão ordem decrescente de relevância. Explorá-los não é obrigatório, mas acredito que há muita coisa ali que pode ajudá-los ao longo do curso e, também, depois da sua conclusão, se vocês quiserem aprofundar o estudo dos tópicos que abordaremos.<br />
<br />
Aos alunos com matrícula anterior a 2010.1, isto é, alunos do currículo antigo, repito que a turma 2JC de TPE pertence ao currículo novo. Recomendo a leitura do aviso que o coordenador da graduação pediu-me que desse à turma do semestre passado, republicado <a href="http://omanuscritodetunbridgewells.blogspot.com.br/2012/02/orientacao-para-os-alunos-com-matricula.html" target="_blank">aqui</a>. Quem tiver dúvida sobre isso deve procurar Luciano, na secretaria do Departamento de Economia.<br />
<br />
Divulgarei à turma pelo Twitter tudo que eu publicar aqui no blog. Para seguir-me no Twitter, use o botão no alto, à direita.<br />
<br />
Os seus comentários aos textos do blog serão sempre bem vindos. Caso queiram comunicar-se comigo diretamente, meu email está no programa do curso, distribuído em sala e também disponível <a href="https://dl.dropbox.com/u/73505426/ECO1800/ECO1800%20Programa%202012-2.pdf" target="_blank">aqui</a>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-15772447903851574142012-06-21T02:54:00.000-03:002012-06-21T03:05:42.681-03:00Uma análise post-mortem dos resultados da segunda provaA média da turma na segunda prova foi 6,8 (ignorando um aluno faltoso) e a mediana, 7,0. As estatísticas da primeira prova foram praticamente as mesmas (média e mediana iguais a 7,0). Assim, pode-se dizer que o desempenho da turma foi bastante consistente ao longo do semestre. No entanto, o mesmo não se pode dizer do desempenho <b>individual</b> dos alunos: a correlação entre as notas da P1 e as da P2 foi baixíssima, igual a 0,1. Constatações contraditórias, aparentemente.<br />
<div>
<br /></div>
<div>
A contradição explica-se pelo efeito de cancelamento que houve entre dois grupos de alunos. <br />
<a name='more'></a><br />
Observei em sala de aula que alguns alunos tiveram um ótimo desempenho na primeira prova e abandonaram as aulas depois dela. Outros, ao contrário, tiveram um desempenho mais fraco na primeira prova e redobraram esforços na segunda metade do curso. Uma maneira de mensurar esses grupos é calcular a diferença (D) entre a nota padronizada da segunda prova e a nota padronizada da primeira prova. (A nota padronizada é calculada subtraindo da nota que o aluno tirou a média da turma, e depois dividindo essa diferença pelo desvio padrão das notas da turma.) Definindo arbitrariamente uma mudança significativa de desempenho em |D| > 1, descobrimos que quase metade da turma enquadra-se. <span style="background-color: white;">Houve seis alunos com D < -1, isto é, alunos cujo desempenho piorou significativamente entre as provas. Alguns destes são alunos cujo comparecimento às aulas notei ter diminuído bastante logo depois da primeira prova. Prevejo que terminarão o curso com uma sensação de oportunidade perdida. Vale lembrar uma advertência que, por força de norma, é incluída em todo material de divulgação dos fundos de investimento: "a rentabilidade obtida no passado não representa garantia de resultados futuros." Por outro lado, </span><span style="background-color: white;">houve sete alunos com D > 1, isto é, alunos que viraram o jogo depois de um desempenho menos estelar na P1. Desse grupo, permito-me citar os três casos que mais saltam aos olhos: Jessica Assis, Philipe Sarkis e Raila Sousa. Parabéns aos três!</span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-80909302344910298942012-06-12T22:04:00.000-03:002012-11-08T00:40:02.906-02:00Solução do desafio da aula 12No slide 12-17, lancei para vocês o desafio de construir, usando R, a função distribuição conjunta P(V,C,S,G) a partir das distribuições condicionais dadas no mesmo slide. A distribuição final deveria estar num arranjo 2x2x2x2. Este é um exercício muito bom de construção e manipulação de arranjos em R. Eis a seguir a minha resposta, anotada.<br />
<br />
<a name='more'></a>O primeiro passo é inserir os dados do problema nas estruturas de dados que estudamos do R:<br />
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow: auto; padding: 10px; word-wrap: normal;">Prob_S <span style="margin: 0px; padding: 0px;"><-</span> <a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.25</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.75</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span>
Prob_G <span style="margin: 0px; padding: 0px;"><-</span> <a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.62</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.38</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span>
Prob_CdadoSG <span style="margin: 0px; padding: 0px;"><-</span> <a href="http://inside-r.org/r-doc/base/array" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">array</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.05</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.20</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.74</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.96</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.95</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.8</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.26</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.04</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span>
<a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span>
Prob_VdadoC <span style="margin: 0px; padding: 0px;"><-</span> <a href="http://inside-r.org/r-doc/base/array" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">array</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.10</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.75</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.9</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">.25</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span></pre>
As distribuições da safra (S) e do subsídio governamental (G) estão em vetores simples de dois elementos cada, porque essas variáveis são independentes de qualquer outra na topologia da rede bayesiana que estudamos em sala. A situação é mais complicada com as distribuições condicionais de C e V. Os comandos acima armazenam a distribuição P(C|SG) num arranjo 2x2x2, que pode ser entendido alternativamente como duas matrizes 2x2. A primeira matriz é <span style="font-family: 'Courier New', Courier, monospace;">Prob_CdadoSG[,,1]</span> e ela contém as probabilidades de um valor "baixo" para C (o custo da mercadoria) dadas as quatro combinações possíveis de S e G:<br />
<br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> Prob_CdadoSG[,,1]</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> [,1] [,2]</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1,] 0.05 0.74</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[2,] 0.20 0.96</span><br />
<div>
<br /></div>
<div>
Nessa matriz, os valores de S estão nas colunas; os valores de G, nas linhas. Assim, a primeira coluna da matriz contém as probabilidades condicionais dado um valor "baixo" da safra (S). A segunda coluna, as probabilidades condicionais dado um valor "alto" da safra. Olhando agora ortogonalmente: a primeira linha da matriz contém as probabilidades condicionais dado um valor "baixo" do subsídio governamental (G). A segunda linha, as probabilidades condicionais dado um valor "alto" do subsídio. Para testar a sua compreensão, diga: o que contém <span style="font-family: 'Courier New', Courier, monospace;">Prob_CdadoSG[1,2,1]</span>? Resposta: P(C=B|S=A,G=B).</div>
<div>
<br /></div>
<div>
A segunda matriz <span style="font-family: 'Courier New', Courier, monospace;">Prob_CdadoSG[,,2]</span> contém as probabilidades de um valor "alto" para C dadas as quatro combinações de S e G, e a sua estrutura é idêntica à da primeira matriz. Observe que essa segunda matriz é que contém os dados encontrados no slide. Naturalmente, cada elemento da primeira matriz contém a diferença entre o número 1 e o elemento correspondente nesta segunda matriz:</div>
<div>
<br /></div>
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> Prob_CdadoSG[,,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> [,1] [,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1,] 0.95 0.26</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[2,] 0.80 0.04</span></div>
</div>
<div>
<br /></div>
<div>
Veja agora que a distribuição condicional P(V|C) foi armazenada numa matriz 2x2 onde os valores de V estão estão nas colunas e os de C, nas linhas. Por exemplo, <span style="font-family: 'Courier New', Courier, monospace;">Prob_VdadoC[1,2]</span> contém P(V=A|C=B):</div>
<div>
<br /></div>
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> Prob_VdadoC</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> [,1] [,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1,] 0.10 0.90</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[2,] 0.75 0.25</span></div>
</div>
<div>
<br /></div>
<div>
Como devia ser, os elementos de cada linha da matriz somam 1. (Por quê?)</div>
<div>
<br /></div>
<div>
Agora começamos a construir, passo a passo, a distribuição conjunta das quatro variáveis do modelo. Primeiro, calculamos a distribuição conjunta de S e G, usando o produto externo de dois vetores:</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow: auto; padding: 10px; word-wrap: normal;">Prob_SG <span style="margin: 0px; padding: 0px;"><-</span> Prob_G <span style="margin: 0px; padding: 0px;">%o%</span> Prob_S</pre>
</div>
<div>
O resultado é uma matriz 2x2 onde os valores de S estão nas colunas e os de G, nas linhas. Cada elemento da matriz contém a probabilidade conjunta de se observar a combinação correspondente de valores de S e G:</div>
<div>
<br /></div>
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> Prob_SG</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> [,1] [,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1,] 0.155 0.465</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[2,] 0.095 0.285</span></div>
</div>
<div>
<br /></div>
<div>
Podemos então construir a distribuição conjunta de C, S e G. Este é o comando:
</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow: auto; padding: 10px; word-wrap: normal;">Prob_CSG <span style="margin: 0px; padding: 0px;"><-</span>
<a href="http://inside-r.org/r-doc/base/array" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">array</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span>Prob_CdadoSG<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #339933; margin: 0px; padding: 0px;">,,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="margin: 0px; padding: 0px;">*</span>Prob_SG<span style="color: #339933; margin: 0px; padding: 0px;">,</span>
Prob_CdadoSG<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #339933; margin: 0px; padding: 0px;">,,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="margin: 0px; padding: 0px;">*</span>Prob_SG<span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span>
<a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span></pre>
</div>
<div>
O comando parece complicado à primeira vista, mas ele é uma aplicação direta da expressão:</div>
<div>
<br /></div>
<div>
P(CSG) = P(C|SG) x P(SG).</div>
<div>
<br /></div>
<div>
A distribuição conjunta P(CSG) é estruturada num arranjo 2x2x2 parecido com o arranjo <span style="font-family: 'Courier New', Courier, monospace;">Prob_CdadoSG</span> que criamos no início. Ele é composto por duas matrizes. A primeira contém as probabilidades de se observar C "baixo" conjuntamente com as quatro combinações possíveis de S e G, onde, novamente, os valores de S estão nas colunas e os de G, nas linhas:</div>
<div>
<br /></div>
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> Prob_CSG[,,1]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> [,1] [,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1,] 0.00775 0.3441</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[2,] 0.01900 0.2736</span></div>
</div>
<div>
<br /></div>
<div>
A segunda matriz contém as probabilidades de se observar C "alto" conjuntamente com as quatro combinações possíveis de S e G:</div>
<div>
<br /></div>
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> Prob_CSG[,,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> [,1] [,2]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1,] 0.14725 0.1209</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[2,] 0.07600 0.0114</span></div>
</div>
<div>
<br /></div>
<div>
O passo final é obter a distribuição conjunta das quatro variáveis. Para isso, usaremos a relação:</div>
<div>
<br /></div>
<div>
P(VCSG) = P(V|CSG) x P(CSG)</div>
<div>
<br /></div>
<div>
a qual simplifica para</div>
<div>
<br /></div>
<div>
P(VCSG) = P(V|C) x P(CSG)
</div>
<div>
<br /></div>
<div>
pois V é condicionalmente independente de S e de G, dado C.</div>
<div>
<br /></div>
<div>
Este é o comando em R:</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow: auto; padding: 10px; word-wrap: normal;">Prob_VCSG <span style="margin: 0px; padding: 0px;"><-</span> <a href="http://inside-r.org/r-doc/base/array" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">array</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span>Prob_VdadoC<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="margin: 0px; padding: 0px;">*</span>Prob_CSG<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #339933; margin: 0px; padding: 0px;">,,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span>
Prob_VdadoC<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="margin: 0px; padding: 0px;">*</span>Prob_CSG<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #339933; margin: 0px; padding: 0px;">,,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span>
Prob_VdadoC<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="margin: 0px; padding: 0px;">*</span>Prob_CSG<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #339933; margin: 0px; padding: 0px;">,,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span>
Prob_VdadoC<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="margin: 0px; padding: 0px;">*</span>Prob_CSG<span style="color: #009900; margin: 0px; padding: 0px;">[</span><span style="color: #339933; margin: 0px; padding: 0px;">,,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">]</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span>
<a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin: 0px; padding: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin: 0px; padding: 0px;">c</span></a><span style="color: #009900; margin: 0px; padding: 0px;">(</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #339933; margin: 0px; padding: 0px;">,</span><span style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span><span style="color: #009900; margin: 0px; padding: 0px;">)</span></pre>
</div>
<div>
O arranjo final pode ser entendido como uma "supermatriz" 2x2 onde cada elemento é uma matriz 2x2. A primeira subrmatriz <span style="font-family: 'Courier New', Courier, monospace;">Prob_VCSG[,,1,1]</span> contém as probabilidades conjuntas para as quatro combinações de S e G, mantendo C "baixo" e V "baixo" também. A segunda submatriz <span style="font-family: 'Courier New', Courier, monospace;">Prob_VCSG[,,2,1]</span> contém as probabilidades conjuntas para as quatro combinações de S e G, mantendo C "alto" e V "baixo"; e assim por diante. Observe que, da forma que construímos o arranjo, os seus índices referem-se às variáveis em ordem inversa daquela em que elas aparecem no nome do arranjo. Isto é, o primeiro índice refere-se a G; o segundo, a S; o terceiro, a C; e o quarto e último, a V.</div>
<div>
<br /></div>
<div>
Este, sem dúvida, foi o desafio mais complexo de todo o nosso curso. Parabéns a todos os alunos que conseguiram resolver pelo menos parte dele!</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-18054116595939326392012-05-21T01:10:00.003-03:002012-05-21T01:10:59.538-03:00Pesquisa: melhor dia para monitoria extraPessoal, faremos nos próximos dias uma monitoria extra exclusivamente sobre criação de funções em R. A monitoria será à noite (19h) e deverá durar 45 minutos. Ela vai abordar a lista 8 de exercícios, que poderá ser cobrada na segunda prova.<br />
<br />
Nosso monitor poderá fazer essa monitoria numa 3ª feira, numa 4ª feira ou numa 6ª feira. Para definirmos a data, indiquem no formulário no atalho abaixo qual é o dia da semana mais conveniente para vocês. O fomulário exige uma senha, a qual vou informar em sala de aula, nesta semana.<br />
<br />
Peço que todos respondam, mesmo aqueles que não tenham certeza de que poderão comparecer à monitoria. Obrigado!<br /><br />
<a id="WebLinkDescLink" href="http://pt.surveymonkey.com/s/33CSBLH">Clique aqui para responder ao formulário</a>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-2784800274449245410.post-74745711655884046902012-05-05T14:43:00.001-03:002012-05-05T14:43:42.504-03:00Vale a pena fazer as listas de exercícios?Como vocês sabem, sou da filosofia de que a função primordial da prova é estimular o estudo. Por isso, as nossas provas premiam fortemente quem faz todas as listas de exercício: a primeira metade da prova consiste em questões tiradas das listas, sem alteração. O aluno que faz todas as listas e tira as suas dúvidas sobre todos os exercícios deveria faturar os cinco primeiros pontos da prova em quinze minutos. No entanto, resta a pergunta: esse aluno aumentou as suas chances de um bom desempenho na segunda parte da prova, que consiste em questões inéditas? A seguir, eu uso o R para testar estatisticamente a hipótese de que os alunos que gabaritam a primeira parte da prova têm um desempenho superior na segunda parte.<br />
<div>
<br />
<div>
<a name='more'></a>As notas dos alunos, em cada questão da P1, foram digitadas num arquivo CSV (tipo brasileiro) chamado "NOTAS_2012-1_P1.csv". Se você quiser reproduzir no seu computador a análise que eu fiz, baixe o arquivo <a href="http://dl.dropbox.com/u/73505426/ECO1800/NOTAS_2012-1_P1.csv" target="_blank">neste atalho</a>. É um bom exercício de utilização do R!</div>
<div>
<br /></div>
<div>
Depois de baixar o arquivo de dados, tome o cuidado de colocá-lo no diretório de trabalho do R. Para saber qual é esse diretório, como vimos em sala de aula, você pode usar a função <span style="font-family: 'Courier New', Courier, monospace;">getwd()</span>. O primeiro passo da análise, é claro, é importar o arquivo de dados para um moldura na área de trabalho do R:</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;">notasP1 <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><-</span> <a href="http://inside-r.org/r-doc/utils/read.csv2" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">read.csv2</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span><span style="color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">"NOTAS_2012-1_P1.csv"</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span></pre>
</div>
<div>
Observe que usamos a "versão 2" da função de leitura dos arquivos CSV, porque o arquivo está no padrão brasileiro, no qual a vírgula é o separador decimal e ponto-e-vírgula indica a separação de colunas.</div>
</div>
<div>
<br /></div>
<div>
Vamos atar a moldura ao caminho de busca de nomes do R, para não precisarmos digitar o nome da moldura antes dos nomes das colunas (por exemplo, poderemos consultar as notas na primeira questão digitando <span style="font-family: 'Courier New', Courier, monospace;">Q1</span> ao invés de <span style="font-family: 'Courier New', Courier, monospace;">notasP1$Q1</span>):</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;"><a href="http://inside-r.org/r-doc/base/attach" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">attach</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span>notasP1<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span></pre>
</div>
<div>
Agora, criaremos três novas colunas na moldura. A primeira será chamada "Disc" e conterá a soma das notas na parte discursiva da prova, com questões tiradas das listas de exercícios. A segunda coluna será chamada "MultEsc" e conterá a soma das notas da segunda parte, questões inéditas de múltipla escolha. A terceira nova coluna será chamada "ETL" (significando "Estudou Todas as Listas") e conterá o valor lógico TRUE se o aluno gabaritou as questões discursivas; e FALSE, caso contrário. (Sim, é possível um aluno que estudou bem todas as listas errar uma questão discursiva por nervosismo ou carência mnemônica; assim como é possível um aluno apenas estudar os slides, não fazer as listas, e mesmo assim gabaritar as questões discursivas. Nesta análise, porém, vou ignorar essas duas possibilidades e usar o gabarito da primeira parte da prova como uma indicação de que o aluno "estudou bem todas as listas".)</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;">notasP1<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">[</span><span style="color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">"Disc"</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">]</span> <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><-</span> Q1<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q2<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q3
notasP1<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">[</span><span style="color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">"MultEsc"</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">]</span> <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><-</span> Q4<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q5<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q6<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q7<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q8<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">+</span>Q9
notasP1<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">[</span><span style="color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">"ETL"</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">]</span> <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><-</span> notasP1<span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">$</span>Disc <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">==</span> <span style="color: #cc66cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">5</span></pre>
</div>
<div>
Por que foi necessário especificar o nome da moldura na criação da terceira coluna "ETL", ao fazermos referência à coluna "Disc"? Porque a coluna "Disc" foi criada depois do comando <span style="font-family: 'Courier New', Courier, monospace;">attach(notasP1)</span> e, portanto, ela não se encontra no caminho de busca. Digite <span style="font-family: 'Courier New', Courier, monospace;">Disc</span> e o console reagirá dizendo que não consegue encontrar esse objeto! Para sanar isso, execute novamente o comando:</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;"><a href="http://inside-r.org/r-doc/base/attach" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">attach</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span>notasP1<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span></pre>
</div>
<div>
Examine o conteúdo da moldura e observe que as três novas colunas foram criadas depois da última coluna original, chamada "TOTAL".</div>
<br />
<div>
A esta altura, você já deve ter percebido que o 25º aluno faltou à prova: todas as suas notas contêm o valor NA, que significa "Not Available" ("não disponível"). Isto não é necessário para o teste que faremos, mas, só para lembrar um pouco da flexibilidade da indexação no R, vamos excluir esse aluno faltoso da moldura:</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;">notasP1 <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><-</span> notasP1<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">[</span><a href="http://inside-r.org/r-doc/base/c" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">c</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span><span style="color: #cc66cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">1</span><span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">:</span><span style="color: #cc66cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">24</span><span style="color: #339933; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">,</span><span style="color: #cc66cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">26</span><span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">:</span><span style="color: #cc66cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">30</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span><span style="color: #339933; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">,</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">]</span></pre>
</div>
<div>
Digite de novo <span style="font-family: 'Courier New', Courier, monospace;">notasP1</span> e verifique que a 25ª linha da moldura foi excluída. (Se você obteve uma mensagem de erro ao digitar o comando acima, provavelmente esqueceu da última vírgula dentro de colchetes. E se você não entendeu a necessidade dessa vírgula, é hora de revisar a nossa aula sobre indexação em R.)</div>
<br />
<div>
Estamos prontos para explorar os dados e investigar a questão que nos interessa: estudar bem todas as listas correlaciona-se com um bom resultado nas questões de múltipla escolha? Antes de realizar o teste formal, vamos aproveitar a oportunidade para lembrar de um diagrama muito utilizado em análise exploratória de dados chamado "diagrama de caixas" ("<a href="http://en.wikipedia.org/wiki/Box_plot" target="_blank">box plot</a>" em inglês). Ele apresenta graficamente cinco observações especiais numa amostra qualquer de dados: o menor valor, o primeiro <a href="http://pt.wikipedia.org/wiki/Quartil" target="_blank">quartil</a>, a mediana, o terceiro <a href="http://pt.wikipedia.org/wiki/Quartil" target="_blank">quartil</a> e o valor máximo. Vamos gerar no R, e depois interpretar, o diagrama de caixas das notas na segunda parte da prova para os dois subgrupos de alunos, os que "estudaram bem todas as listas" e os que não. Digite no console o seguinte comando (observe a sintaxe da fórmula entre parênteses, similar àquela usada na função <span style="font-family: 'Courier New', Courier, monospace;">lm</span>):</div>
<div>
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;"><a href="http://inside-r.org/r-doc/graphics/boxplot" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">boxplot</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span>MultEsc <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">~</span> ETL<span style="color: #339933; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">,</span>
xlab=<span style="color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">"Estudou bem as listas"</span><span style="color: #339933; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">,</span>
ylab=<span style="color: blue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">"Nota na 2ª parte da prova"</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span></pre>
</div>
<div>
Você deveria ver o seguinte gráfico:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r2aAru2XoiIcfmgRkYRKlHtXRYRrTuhBiN50e0uVxejGrJs8mDa8e6bOV46kCEuQIHhhOVquHguwvlnyBTUcJWpUR27FzgZpqBkV3XKA4TpAKiCiiDB-ojGXqK5zi2VPU8xiTgDrt5n-/s1600/boxplotp1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" border="0" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r2aAru2XoiIcfmgRkYRKlHtXRYRrTuhBiN50e0uVxejGrJs8mDa8e6bOV46kCEuQIHhhOVquHguwvlnyBTUcJWpUR27FzgZpqBkV3XKA4TpAKiCiiDB-ojGXqK5zi2VPU8xiTgDrt5n-/s400/boxplotp1.jpg" title="Box plot das notas da segunda parte da P1" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<br />
O diagrama de caixas nos diz o seguinte, em palavras. No grupo de alunos que não estudaram bem as listas (a caixa à esquerda), houve uma grande dispersão de notas na 2ª parte da prova: a menor nota foi -1 (pode haver nota negativa, porque erros são penalizados nas questões de múltipla escolha) e a maior nota foi 5 (a maior nota possível). Além disso, o diagrama mostra que, desses alunos, 25% tiraram nota menor ou igual a 1; 50% tiraram nota menor ou igual a 2; e 75% tiraram nota menor ou igual a 3. Já no grupo de alunos que estudaram bem as listas (caixa à direita), a dispersão não foi tão grande: a menor nota foi 2 e a maior nota 5. Desses alunos, 50% tiraram nota menor ou igual a 3,5.<br />
<br />
O diagrama de caixas mostra, numa rápida olhada, que o desempenho nas questões inéditas dos alunos que estudaram bem as listas foi melhor do que o desempenho dos que não estudaram bem as listas. Mas será que essa diferença de desempenho é <b>estatisticamente significativa</b>? Vamos testar essa hipótese através de uma regressão entre as notas nas questões de múltipla escolha e a variável binária ETL:<br />
<pre class="r geshifilter-R" style="color: #222222; font-size: 12px; line-height: 15px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; word-wrap: normal;"><a href="http://inside-r.org/r-doc/base/summary" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">summary</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span><a href="http://inside-r.org/r-doc/stats/lm" style="color: #0077df; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"><span style="color: #003399; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">lm</span></a><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">(</span>MultEsc <span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">~</span> ETL<span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span><span style="color: #009900; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">)</span></pre>
O resultado é este:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">Call:</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">lm(formula = MultEsc ~ ETL)</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: 'Courier New', Courier, monospace;">Residuals:</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> Min 1Q Median 3Q Max </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">-3.07895 -1.07895 -0.07895 1.30000 2.92105 </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: 'Courier New', Courier, monospace;">Coefficients:</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> Estimate Std. Error t value Pr(>|t|) </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">(Intercept) 2.0789 0.3752 5.540 7.16e-06 ***</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">ETLTRUE 1.6211 0.6390 2.537 0.0173 * </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">---</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: 'Courier New', Courier, monospace;">Residual standard error: 1.636 on 27 degrees of freedom</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">Multiple R-squared: 0.1925, Adjusted R-squared: 0.1626 </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">F-statistic: 6.436 on 1 and 27 DF, p-value: 0.01728 </span><br />
<br />
Como você pode ver, a variável ETL, quando verdadeira, i.e. assumindo valor 1, correlaciona-se com um aumento de 1,62 ponto na nota média nas questões de múltipla escolha. E esse aumento é sim estatisticamente significativo, ao nível de 5%, já que a hipótese nula de ausência de relação entre as variáveis tem p-valor igual a 1,73%. (Confesso que fiquei surpreso com uma significância tão grande, porque a amostra é pequena, apenas 29 observações.)<br />
<br />
<b>Em suma: estude bem as listas de exercício antes da prova, porque o seu desempenho em toda a prova será melhor!</b><br />
<br />
PS: Você é capaz de realizar uma regressão entre as notas na segunda parte da prova e as notas na primeira parte? O resultado dessa regressão desmente ou confirma o resultado acima?</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-71788190971824927972012-05-04T09:40:00.000-03:002012-05-04T09:44:57.368-03:00Migrando para DropboxIsto não é propaganda ou endosso, turma. Quero só avisá-los de que estou mudando o depósito que uso para os arquivos de slides e listas de exercícios, disponíveis aqui no blog. Até agora, eu vinha usando o Scribd, que é mais dedicado a textos, mas andei enfrentando dificuldades em publicar alguns tipos de arquivos (por exemplo, CSV). Depois de avaliar o Dropbox por alguns dias, concluí que ele atende melhor aos nossos objetivos: é mais simples e parece ser mais estável e rápido do que o outro. A mudança deve ser transparente para vocês. <b>Se algum de vocês enfrentar qualquer dificuldade para baixar os arquivos dos links do blog, peço que me comunique imediatamente por e-mail.</b>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-15356678784184695102012-04-03T15:41:00.003-03:002012-04-04T11:53:32.481-03:00A função sample() e probabilidades que não somam 1Observamos em sala hoje que a função <span style="font-family: 'Courier New', Courier, monospace;">sample()</span> não reclama se for designado ao seu argumento <span style="font-family: 'Courier New', Courier, monospace;">prob</span> um vetor de probabilidades que não somam 1. Especificamente, o comando<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a> = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/packages/cran/prob">prob</a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.9</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span></pre>
</div>
</div>
produziu uma amostra de vinte números sorteados do conjunto {1, 2, 3}, sem reclamar de termos pedido que, no sorteio, o número 1 tivesse probabilidade 10%; o número 2, probabilidade 10%; e o número 3, probabilidade 90%. O que está acontecendo? Vamos descobrir apelando para a lei dos grandes números:<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;">amostra <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000000</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a> = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/packages/cran/prob">prob</a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.9</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span></pre>
</div>
</div>
O vetor <b>amostra</b> criado acima contém um milhão de sorteios do conjunto {1, 2, 3}, com as mesmas probabilidades impróprias de antes. Depois de criar essa grande amostra, verifique quantos números 1, 2 e 3 foram produzidos, usando este comando:<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: black; font-weight: bold;">for</span> <span style="color: #009900;">(</span>n <span style="color: black; font-weight: bold;">in</span> <span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>amostra<span style="color: #009900;">[</span>amostra == n<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span></pre>
</div>
</div>
Você verá que há aproximadamente 91 mil números 1; 91 mil números 2; e 818 mil números 3. De onde saíram essas frequências? Daqui:<br />
<br />
91.000 <span style="background-color: #f9f9f9; font-family: sans-serif; line-height: 19px;">÷</span><span style="background-color: #f9f9f9; font-family: sans-serif; font-size: 13px; line-height: 19px;"> </span>1.000.000 <span style="background-color: white; font-family: sans-serif; line-height: 19px; text-align: center;">≅</span><span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;"> 0,1 </span></span><span style="background-color: #f9f9f9; font-family: sans-serif; line-height: 19px;">÷ </span><span style="background-color: white; font-family: inherit; line-height: 19px; text-align: center;">1,1 = 0,1 </span><span style="background-color: #f9f9f9; font-family: sans-serif; line-height: 19px;">÷ </span><span style="background-color: white; font-family: inherit; line-height: 19px; text-align: center;">(0,1+0,1+0,9)</span><br />
<span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;">818.000 </span></span><span style="background-color: #f9f9f9; font-family: sans-serif; line-height: 19px;">÷ </span><span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;">1.000.000 </span></span><span style="background-color: white; font-family: sans-serif; line-height: 19px; text-align: center;">≅</span><span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;"> 0,9 </span></span><span style="background-color: #f9f9f9; font-family: sans-serif; line-height: 19px;">÷ </span><span style="background-color: white; font-family: inherit; line-height: 19px; text-align: center;">1,1 = 0,9 </span><span style="background-color: #f9f9f9; font-family: sans-serif; line-height: 19px;">÷ </span><span style="background-color: white; font-family: inherit; line-height: 19px; text-align: center;">(0,1+0,1+0,9)</span><br />
<span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;">Conclusão: quando a função </span><span style="font-family: 'Courier New', Courier, monospace;">sample()</span><span style="font-family: inherit;"> recebe um vetor de "probabilidades" cuja soma é diferente de 1, ela normaliza esses números, isto é, divide-os pela soma deles, e usa as probabilidades normalizadas para sortear elementos do espaço amostral representado no primeiro argumento.</span></span><br />
<span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; line-height: 19px; text-align: center;"><span style="font-family: inherit;">PS: No último comando acima, usei pela primeira vez a estrutura de controle </span><span style="font-family: 'Courier New', Courier, monospace;">for</span><span style="font-family: inherit;">, que ainda não estudamos. O que ela faz é simplesmente cumprir o comando </span><span style="font-family: 'Courier New', Courier, monospace;">print(length(amostra[</span><span style="font-family: 'Courier New', Courier, monospace;">amostra</span> <span style="font-family: 'Courier New', Courier, monospace;">==n]))</span><span style="font-family: inherit;"> três vezes, variando "n" de 1 a 3. O comando repetido, por sua vez, conta quantos números "n" são encontrados no vetor <b>amostra</b>.</span></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-2661852060029601112012-04-01T10:53:00.001-03:002012-04-03T15:52:51.174-03:00R bonitinhoUm site muito legal para aprender macetes do R é o <a href="http://www.inside-r.org/" target="_blank">inside-R</a>. Ali dentro, descobri outro dia uma ferramenta que pretendo usar a partir de agora para preparar os textos aqui do blog. Chama-se <a href="http://www.inside-r.org/pretty-r" target="_blank">Pretty R</a> e é um gerador de código HTML a partir de código R que torna mais legível a sintaxe da linguagem. Por exemplo, o código abaixo calcula os cinquenta primeiros números de <a href="http://pt.wikipedia.org/wiki/N%C3%BAmero_de_Fibonacci" target="_blank">Fibonacci</a>:<br />
<div>
<br /></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">F <- c(0,1)</span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">while(length(F) < 50) F <- c(F, sum(tail(F,2)))</span></div>
<div>
<br /></div>
<div>
Veja como fica na formatação Pretty R:</div>
<div>
</div>
<div>
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;">F <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">while</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>F<span style="color: #009900;">) </span>< <span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span> F <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>F<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/utils/tail"><span style="color: #003399; font-weight: bold;">tail</span></a><span style="color: #009900;">(</span>F<span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span></pre>
</div>
</div>
</div>
<div>
Bem mais claro, não é? Observe que os nomes de todas as funções da linguagem aparecem em azul no código embelezado e ligam à biblioteca de ajuda do R. Para testar, clique em <span style="font-family: 'Courier New', Courier, monospace;">tail</span> diretamente no código acima e aprenda o que essa função faz.<br />
<br />
PS: Nesse código usei a estrutura de repetição <span style="font-family: 'Courier New', Courier, monospace;">while</span> (significa "enquanto", em inglês) que ainda não estudamos em sala. Mas a tradução do comando para o português é imediata: "enquanto o comprimento do vetor F for menor do que 50, acrescente-lhe mais um elemento, sendo o seu valor igual à soma dos dois últimos elementos do vetor F."</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-81999700869044989802012-03-27T17:09:00.000-03:002012-03-27T17:34:14.689-03:00Selecionando linhas de uma moldura de dadosNa terminologia das bases de dados relacionais, a moldura de dados (<i>data frame</i>) da linguagem R é uma estrutura em que cada linha representa uma <b>entidade</b> e cada coluna representa um <b>atributo</b> das entidades. Por exemplo, considere a sequência de comandos abaixo:<br />
<br />
<a name='more'></a><span style="color: red; font-family: 'Courier New', Courier, monospace;">> m <- c("Rio de Janeiro", "São Paulo")</span><br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> p <- c(175.7, 389.3)</span><br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> municípios <- list(nome = m, pib2009 = p)</span><br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> municípios <- data.frame(municípios)</span><br />
<br />
Os três primeiros comandos criam uma lista chamada "municípios" com dois componentes. O primeiro é um vetor alfanumérico contendo os nomes dos municípios "Rio de Janeiro" e "São Paulo". O segundo, um vetor numérico contendo o produto interno bruto desses municípios em 2009, em bilhões de reais (dados do IBGE). O quarto comando, por fim, dá a essa lista a classe <span style="font-family: 'Courier New', Courier, monospace;">data.frame</span>, criando então a moldura. Nessa moldura, as entidades são os municípios e cada linha da moldura representa uma entidade. Os atributos que as descrevem são o nome e o PIB, correspondendo às duas colunas da moldura.<br />
<br />
No contexto das bases de dados relacionais, a entidade (a linha na moldura) é mais importante do que o atributo (a coluna), porque o objetivo primário das bases de dados é a identificação das entidades. No contexto da estatística, porém, as colunas são mais importantes. A Estatística não está interessada nos indivíduos. A Estatística foi criada para estudar características de grupos e relacionamentos entre grupos. Por isso, a linguagem R orienta-se mais naturalmente para a manipulação das colunas das molduras do para a manipulação das suas linhas. Continuando o exemplo de cima, é trivial obter os valores das colunas e realizar contas com eles:<br />
<br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> municípios$pib2009</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] 175.7 389.3</span><br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> mean(municípios$pib2009)</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] 282.5</span><br />
<div>
<br /></div>
<div>
A seleção das entidades é um menos intuitiva, porque isso não é a ênfase da Estatística (embora seja crucial nas bases de dados). Para selecionar, por exemplo, todos os dados do município do Rio de Janeiro, pode-se usar indexação com vetores lógicos, que estudamos em aulas passadas:</div>
<div>
<br /></div>
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> municípios[municípios$nome == "Rio de Janeiro", ]</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;"> nome pib2009</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">1 Rio de Janeiro 175.7</span></div>
</div>
<div>
<br /></div>
<div>
Em suma: é possível selecionar individualmente tanto uma coluna quanto uma linha de uma moldura de dados. Mas é sintaticamente mais simples selecionar colunas, porque em última análise são as colunas que interessam mais em Estatística.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-1637492009167860062012-03-23T08:56:00.001-03:002012-03-24T10:21:43.501-03:00Formatando números em R<span style="font-family: inherit;">Um comentário sobre formatação de números na linguagem R, assunto que surgiu em sala outro dia. Quando digitamos uma expressão na linha de comando e concluímos com [</span><span style="background-color: white; font-family: inherit; line-height: 19px;">↵</span><span style="font-family: inherit;">]</span><span style="background-color: white; font-family: inherit; line-height: 19px;">, a expressão é repassada automaticamente para a função </span><span style="background-color: white; line-height: 19px;"><span style="font-family: 'Courier New', Courier, monospace;">print()</span></span><span style="background-color: white; font-family: inherit; line-height: 19px;">, a qual "imprime" (i.e. mostra na próxima linha do console) o resultado da expressão. Por exemplo, quando digitamos</span><br />
<span style="background-color: white; line-height: 19px;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; color: red; line-height: 19px;"><span style="font-family: 'Courier New', Courier, monospace;">> sqrt(2)</span></span>
<span style="background-color: white; color: red; line-height: 19px;"><span style="font-family: inherit;"><br /></span></span><br />
<span style="font-family: inherit;"><span style="background-color: white; line-height: 19px;">O que o sistema na verdade executará quando pressionamos a tecla </span>[<span style="background-color: white; line-height: 19px;">↵] </span><span style="background-color: white; line-height: 19px;">é o comando...</span></span><br />
<a name='more'></a><br />
<span style="background-color: white; color: red; line-height: 19px;"><span style="font-family: 'Courier New', Courier, monospace;">> print(sqrt(2))</span></span>
<span style="background-color: white; color: red; line-height: 19px;"><span style="font-family: inherit;"><br /></span></span><br />
<span style="background-color: white; line-height: 19px;"><span style="font-family: inherit;">como você pode verificar digitando o segundo comando acima. Um dos argumentos da função </span><span style="font-family: 'Courier New', Courier, monospace;">print()</span><span style="font-family: inherit;"> chama-se </span><span style="font-family: 'Courier New', Courier, monospace;">digits</span><span style="font-family: inherit;"> e serve para especificar quantos dígitos significativos <b>antes e depois</b> da vírgula serão mostrados, no mínimo. Por exemplo, usando a constante pré-determinada </span><span style="font-family: 'Courier New', Courier, monospace;">pi</span><span style="font-family: inherit;">:</span></span><br />
<span style="line-height: 19px;"><br /></span>
<span style="color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px;">> pi</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace; line-height: 19px;">[1] 3.141593</span><br />
<span style="color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px;">> print( pi , digits = 3 )</span><br />
<span style="color: blue; font-family: 'Courier New', Courier, monospace; line-height: 19px;">[1] 3.14</span><br />
<div>
<div>
<span style="color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px;">> print( 10*pi , digits = 3 )</span></div>
<div>
<span style="color: blue; font-family: 'Courier New', Courier, monospace; line-height: 19px;">[1] 31.4</span></div>
<div style="line-height: 19px;">
<span style="font-family: inherit;"><br /></span></div>
</div>
<div style="line-height: 19px;">
<span style="font-family: inherit;">Aliás, </span><span style="font-family: 'Courier New', Courier, monospace;">digits</span><span style="font-family: inherit;"> é uma opção global de sistema e por definição os números são mostrados em R com sete dígitos significativos. (Estou abusando dos espaços entre os argumentos da função para tornar o código mais claro, seguindo o exemplo do John Kruschke. A linguagem R é bastante tolerante com isso.)</span>
<span style="font-family: inherit;"><br /></span><br />
<span style="font-family: inherit;">É mais comum, no entanto, estarmos interessados em limitar o número de dígitos <b>depois do separador decimal</b>, independentemente do número total de dígitos. A maneira mais simples é arredondar o número usando a função </span><span style="font-family: 'Courier New', Courier, monospace;">round()</span><span style="font-family: inherit;">:</span></div>
<div style="line-height: 19px;">
<span style="font-family: inherit;"><br /></span></div>
<div style="line-height: 19px;">
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> round( pi, 3 )</span></div>
<div style="line-height: 19px;">
<span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] 3.142</span></div>
<div style="line-height: 19px;">
<br /></div>
<div>
<div style="line-height: 19px;">
<span style="font-family: inherit;">Outra solução é usar a função </span><span style="font-family: 'Courier New', Courier, monospace;">format()</span><span style="font-family: inherit;">, com seus argumentos </span><span style="font-family: 'Courier New', Courier, monospace;">digits</span><span style="font-family: inherit;"> (que funciona como na função </span><span style="font-family: 'Courier New', Courier, monospace;">print()</span><span style="font-family: inherit;"> acima) e </span><span style="font-family: 'Courier New', Courier, monospace;">nsmall</span><span style="font-family: inherit;">. Esse segundo argumento determina o número <b>mínimo</b> de dígitos depois do separador decimal, respeitando o argumento digits. Para esclarecer:</span></div>
<div style="line-height: 19px;">
<span style="font-family: inherit;"><br /></span></div>
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> x <- 1000/7</span></span><br />
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> x</span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] 142.8571</span></span><br />
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> format( x , digits = 3 )</span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] "143"</span></span><br />
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> x</span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] 142.8571</span></span><br />
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">Observe que a função <span style="font-family: 'Courier New', Courier, monospace;">format()</span> arredonda corretamente, não destrói o conteúdo original do objeto formatado e, ao contrário de <span style="font-family: 'Courier New', Courier, monospace;">print()</span> e <span style="font-family: 'Courier New', Courier, monospace;">round()</span>, devolve no modo alfanumérico. Veja agora como os argumentos <span style="font-family: 'Courier New', Courier, monospace;">digits</span> e <span style="font-family: 'Courier New', Courier, monospace;">nsmall</span> se comportam juntos:</span><br />
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> x <- 1000/7</span></span><br />
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> format( x , digits = 4 )</span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] "142.9"</span></span><br />
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> format( x , digits = 4 , nsmall = 3 )</span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] "142.857"</span></span><br />
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> format( x , digits = 4 , nsmall = 12 )</span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] "142.857142857143"</span></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span style="line-height: 19px;"><span style="color: red;">> format( x , digits = 8 , nsmall = 1 )</span></span></span><br />
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] "142.85714"</span></span><br />
<div style="line-height: 19px;">
<br /></div>
<div style="line-height: 19px;">
Por fim, você pode usar essa função também para mudar o separador decimal de ponto para vírgula:</div>
<div style="line-height: 19px;">
<br /></div>
<div>
<div>
<span style="line-height: 19px;"><span style="color: red; font-family: 'Courier New', Courier, monospace;">> format( pi , decimal.mark = "," )</span></span></div>
<div>
<span style="line-height: 19px;"><span style="color: blue; font-family: 'Courier New', Courier, monospace;">[1] "3,141593"</span></span></div>
</div>
<div style="line-height: 19px;">
<br /></div>
<div style="line-height: 19px;">
Existem em R funções de formatação mais flexíveis, que usam especificações de formato no estilo da linguagem C de programação. Se você quiser se aventurar, comece estudando a função <span style="font-family: 'Courier New', Courier, monospace;">formatC()</span>. </div>
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-32502274422675838542012-03-11T03:53:00.001-03:002012-08-10T06:45:31.070-03:00Sobre a diferença entre os operadores de designação em RFiquei devendo a vocês uma explicação sobre a diferença entre os operadores <span style="font-family: 'Courier New', Courier, monospace;"><-</span> e <span style="font-family: 'Courier New', Courier, monospace;">=</span> na linguagem R. Os dois operadores designam o objeto nomeado à sua esquerda ao resultado da expressão à sua direita. Por exemplo, os comandos<br />
<br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> x <- 2+2</span><br />
<br />
e<br />
<br />
<span style="color: red; font-family: 'Courier New', Courier, monospace;">> x = 2+2</span><br />
<br />
fazem a mesma coisa: designam ao valor 4 o objeto chamado "x". Lê-se "x recebe o resultado de dois mais dois" (em inglês, "<i>x gets...</i>").<br />
<br />
Significa isso que os dois operadores funcionam exatamente da mesma maneira? Na verdade, não. Há uma diferença sutil entre eles. <br />
<a name='more'></a><br />
Quem não quiser esquentar a cabeça com isso, não precisa ler o resto. Apenas siga esta recomendação: <b>use <span style="font-family: 'Courier New', Courier, monospace;"><-</span> para todas as designações, exceto quando estiver atribuindo valores a argumentos nomeados de funções.</b> Por exemplo, escreva <span style="font-family: 'Courier New', Courier, monospace;">rep(1:3, each=2)</span> e <u>não</u> <span style="font-family: 'Courier New', Courier, monospace;">rep(1:3, each<-2)</span>.<br />
<br />
<span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"><span style="font-family: inherit;">Estritamente falando, o símbolo da igualdade matemática não é adequado para representar a operação de designação. O motivo é que u</span></span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"><span style="font-family: inherit;">ma coisa não é igual ao seu nome. </span></span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;">Existe uma hierarquia entre a coisa e o seu nome.</span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"> </span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"><span style="font-family: inherit;">Quando designamos um nome para alguma coisa, esta é mais importante. Uma mulher reagirá de uma maneira se o seu amante lhe entregar uma rosa; reagirá de outra maneira, se receber um pedaço de papel onde se lê a palavra "rosa". Além disso, a coisa, normalmente, precede o seu nome (embora o nome sobreviva à rosa, como Umberto Eco nos lembraria). Esses aspectos de hierarquia e precedência não existem numa igualdade matemática. A igualdade matemática é simétrica. Quando escrevo 2+2 = 4, não estou designando arbitrariamente o símbolo "4" à expressão 2+2. Estou afirmando uma equivalência entre a expressão e o quarto número inteiro </span></span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;">positivo</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">. Da mesma maneira, quando em matemática escrevo x = 2+2, não estou designando o símbolo "x" para a expressão à direita, mas afirmando que o valor da incógnita é igual ao valor da expressão. O que "x" representa não é a expressão 2+2, mas sim um valor desconhecido que é </span><u style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">revelado</u><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"> pela expressão. A </span><a href="http://en.wikipedia.org/wiki/Equals_sign" style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;" target="_blank">igualdade na matemática</a><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">, em suma, tem a natureza de uma revelação. A designação, por outro lado, tem a natureza de uma imposição. Por isso, merece um símbolo diferente de "=". Numa linguagem de programação que usa = como operador de designação, x = y tem um significado diferente de y = x, o que é uma óbvia corrupção da notação matemática clássica. (Devo esse exemplo a Niklaus Wirth, veja o pós escrito abaixo.) </span><br />
<div style="text-align: center;">
<br /></div>
<span style="background-color: #f9f9f9; line-height: 19px; text-align: center;">Pelos motivos acima, algumas linguagens de programação </span><a href="http://en.wikipedia.org/wiki/Assignment_(computer_science)" style="background-color: #f9f9f9; line-height: 19px; text-align: center;" target="_blank">dispõem de símbolos específicos</a><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"> para a designação de valores a variáveis. </span><span style="text-align: center;">R é uma delas. C</span><span style="text-align: center;">omo vocês sabem,</span><span style="text-align: center;"> R é a versão livre da linguagem S de computação estatística. Quando S surgiu, em meados da década de 70, os seus criadores decidiram (provavelmente influenciados pela <a href="http://en.wikipedia.org/wiki/APL_(programming_language)" target="_blank">linguagem APL</a>) que o símbolo </span><span style="background-color: #f9f9f9; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode'; font-size: 22px; line-height: 19px; text-align: center;">←</span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"><span style="font-family: inherit;"> indicava de forma clara, sem ambiguidade, a natureza direcional e ativa da operação de designação: o nome à esquerda do operador é como um local para onde encaminhamos o resultado da expressão à direita do operador. A seta simboliza essa movimentação de um valor para uma posição na memória do computador, posição essa que passa a ser designada por um nome. Naquela época, nos laboratórios Bell, os pesquisadores utilizavam <a href="http://archive.computerhistory.org/resources/text/GEIS/102658927.terminal_operations.1970.pdf" target="_blank">terminais Execuport</a> através dos quais se podia digitar o símbolo </span>
<span style="font-family: 'Arial Unicode MS', 'Lucida Sans Unicode'; font-size: 22px;">←</span> <span style="font-family: inherit;"> pressionando uma só tecla (essa tecla era "_" e é por isso que esse caractere, na linguagem S, também é um operador de designação; mas não em R). Quando S foi transportada para outros sistemas, adaptou-se o símbolo de designação para a atual combinação de um sinal de "menor que" seguido de um hífen: </span><span style="font-family: 'Courier New', Courier, monospace;"><-</span><span style="font-family: inherit;">.</span></span><br />
<br />
<span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">O fato, porém, é que as linguagens de programação </span><a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;" target="_blank">mais populares</a><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"> hoje (C, Javascript, Python, etc.) usam o símbolo de igualdade como operador de designação. Essa prática é infeliz, mas é a realidade. Por isso, algumas pessoas, principalmente programadores que usam aquelas linguagens, preferem usar o símbolo de igualdade para designações. Atendendo a essa demanda, por volta do ano 2001 a linguagem S passou a admitir essa forma de designação. R herdou depois essa dupla notação, que permanece até hoje e às vezes causa alguma confusão.</span><br />
<br />
Qual a diferença, afinal, entre os dois operadores? <b>O operador </b><b><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><-</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"> funciona em qualquer lugar. O operador </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">=</span></b><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"><b> só funciona na linha de comando, ou como uma das expressões numa lista agrupada de expressões entre chaves.</b> Mas onde então ele não funcionaria? Eis um exemplo, para você digitar no console:</span><br />
<br />
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x <- 1</span><br />
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> if (x = 1) 1 else 0</span><br />
<span style="background-color: #f9f9f9; color: blue; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">Erro: '=' inesperado em "if(x ="</span><br />
<br />
<span style="background-color: #f9f9f9; line-height: 19px; text-align: center;">Aqui o programador quer que o sistema verifique se o valor de x é igual a 1 e, em sendo, mostrar esse número; caso contrário, que mostre na tela o dígito zero. Mas R interpreta a expressão entre parênteses como uma designação imprópria, porque o operador </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">=</span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;"> foi usado, e então acusa erro.</span><br />
<br />
<span style="background-color: #f9f9f9; line-height: 19px; text-align: center;">A maneira correta é usar o operador relacional </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">==</span><span style="background-color: #f9f9f9; line-height: 19px; text-align: center;">, assim:</span><br />
<br />
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x <- 1</span><br />
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: red;">> if (x == 1) 1 else 0</span></span><br />
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: blue;">[1] 1</span></span><br />
<br />
<span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">E quanto ao operador </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><-</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">, como ele se comportaria nessa situação? Ele é mais forte do que o operador </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">=</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"> e funciona dentro da estrutura de controle </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">if</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">. Experimente:</span><br />
<br />
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x <- 0</span><br />
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: red;">> if (x <- 1) 1 else 0</span></span><br />
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: blue;">[1] 1</span></span>
<br />
<br />
<span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">Nesse caso, o que aconteceu foi o seguinte. O sistema executou a designação "forte" e impôs o valor 1 ao objeto x, que continha antes o valor 0. Um subproduto da designação é o próprio valor designado, que foi então coagido para o valor lógico TRUE (isto é, "verdadeiro"), levando finalmente ao resultado "1". Todo valor diferente de zero é coagido, nessa situação, para o valor lógico TRUE, por exemplo:</span><br />
<br />
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x <- 0</span><br />
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: red;">> if (x <- 3.1415927) 1 else 0</span></span><br />
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: blue;">[1] 1</span></span><br />
<div style="text-align: left;">
<span style="line-height: 19px;"><br /></span></div>
<div style="text-align: left;">
<span style="line-height: 19px;">No caso dos argumentos nomeados das funções, tradicionalmente usa-se o operador =, porque usar o operador mais forte <span style="font-family: 'Courier New', Courier, monospace;"><-</span> faz a designação "transbordar" para fora do escopo da função. Por exemplo, a função raiz quadrada <span style="font-family: 'Courier New', Courier, monospace;">sqrt()</span> tem um único argumento chamado "x", o qual não se costuma nomear explicitamente na chamada da função. Mas vamos nomeá-lo, para mostrar a diferença de escopo entre os operadores:</span></div>
<div style="text-align: left;">
<span style="line-height: 19px;"><br /></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x <- 0</span></div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: red;">> sqrt(x = 2)</span></span></div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: blue;">[1] 1.414214</span></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x</span></div>
<div style="text-align: left;">
<span style="background-color: #f9f9f9; color: blue; font-family: 'Courier New', Courier, monospace; line-height: 19px;">[1] 0</span></div>
<br />
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="line-height: 19px;">Veja que o argumento da função (x = 2) não modificou o valor de x no ambiente global. Esse é normalmente o comportamento desejado, porque os nomes dos argumentos das funções são descartáveis, estamos interessados no resultado da função. Agora observe o que acontece se usamos o operador <span style="font-family: 'Courier New', Courier, monospace;"><-</span> para designar o valor do argumento da função:</span></div>
<div style="text-align: left;">
<span style="line-height: 19px;"><br /></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x <- 0</span></div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: red;">> sqrt(x <- 2)</span></span></div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><span style="color: blue;">[1] 1.414214</span></span></div>
<div style="text-align: -webkit-auto;">
</div>
<div style="text-align: -webkit-auto;">
<span style="background-color: #f9f9f9; color: red; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">> x</span></div>
<span style="background-color: #f9f9f9; color: blue; font-family: 'Courier New', Courier, monospace; line-height: 19px;">[1] 2</span><br />
<br />
<div style="text-align: left;">
</div>
<span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">Agora a chamada da função modificou o conteúdo do objeto global x; o seu valor mudou de 0 para 2.</span><br />
<br />
<span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">Essa diferença entre os operadores de designação em R é relevante? Para a maioria dos usuários, acredito que não. Por isso, <a href="http://blog.revolutionanalytics.com/2008/12/use-equals-or-arrow-for-assignment.html" target="_blank">alguns dizem</a> que a escolha entre usar </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;"><-</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"> ou </span><span style="background-color: #f9f9f9; font-family: 'Courier New', Courier, monospace; line-height: 19px; text-align: center;">=</span><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;"> acaba sendo uma questão de gosto. O símbolo de igualdade tem duas vantagens: é mais econômico (uma tecla ao invés de três) e aproxima o código R das linguagens mais populares. No nosso curso, porém, adotarei a recomendação que eu fiz lá em cima e repito aqui: </span><b>usarei <span style="font-family: 'Courier New', Courier, monospace;"><-</span> para todas as designações, exceto quando estiver atribuindo valores a argumentos nomeados de funções.</b> Os motivos são os seguintes:<br />
<br />
1. Como argumentei no início, designação não é igualdade. Por isso acho o uso do símbolo = uma impropriedade, mesmo que seja consagrado em outras linguagens.<br />
<br />
2. Para quem é iniciante em programação, que é o caso da maioria dos alunos em Economia, o símbolo <span style="font-family: 'Courier New', Courier, monospace;"><-</span> me parece o mais didático para indicar a designação.<br />
<br />
3. Na grande maioria dos artigos, livros e blogs sobre R que vi até agora, os autores usam <span style="font-family: 'Courier New', Courier, monospace;"><-</span> para designação. Parece, portanto, ser o padrão da linguagem.<br />
<br />
Uma recomendação final: use sempre espaços ao redor de <span style="font-family: 'Courier New', Courier, monospace;"><-</span>, para evitar a ambiguidade visual de um comando como <span style="font-family: 'Courier New', Courier, monospace;">x<-1</span> (estamos designando x ao valor 1 ou estamos testando se x é menor do que -1?).<br />
<br />
<span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">PS: Para uma crítica ao uso do símbolo de igualdade na designação, vinda de um importante cientista da computação, veja a seção 4.1 do artigo </span><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.8309&rep=rep1&type=pdf" style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;" target="_blank">"Good Ideas, Through the Looking Glass"</a><span style="background-color: #f9f9f9; font-family: inherit; line-height: 19px; text-align: center;">, de Niklaus Wirth, criador da linguagem Pascal.</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-8614631587704892502012-03-07T18:07:00.000-03:002012-03-10T20:05:24.728-03:00Dicas de uso do console RComo vimos na aula de ontem, as teclas de navegação [<span style="background-color: #f9f9f9; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode'; font-size: 22px; line-height: 19px; text-align: center;">↑</span><span style="background-color: #f9f9f9; font-family: sans-serif; font-size: 13px; line-height: 19px;">] e [</span><span style="background-color: #f9f9f9; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode'; font-size: 22px; line-height: 19px; text-align: center;">↓</span><span style="background-color: #f9f9f9; font-family: sans-serif; font-size: 13px; line-height: 19px;">] servem para recuperar o texto dos comandos que já foram executados. Todos esses comandos são preservados num histórico interno do console, desde o início da sessão atual de uso do R. Dica: para ver de uma vez só todo o histórico de comandos, use a função </span><span style="background-color: #f9f9f9; font-size: 13px; line-height: 19px;"><span style="font-family: 'Courier New', Courier, monospace;">history()</span></span><span style="background-color: #f9f9f9; font-family: sans-serif; font-size: 13px; line-height: 19px;">.</span><br />
<br />
Outra dica. Se você começar a digitar o nome de uma função na linha de comando e, antes de completá-lo, apertar a tecla [Tab], o console completará o nome para você. Caso exista mais de uma função cujo nome comece com as letras que você já digitou, o sistema listará para você todas as possibilidades.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-87968431314492970972012-03-03T11:44:00.000-03:002012-03-03T12:27:28.871-03:00Instalando o sistema RNeste final de semana, vocês devem instalar o sistema R em seus computadores. O nosso curso é bastante prático e vocês precisarão do sistema para poderem estudar e resolver as listas de exercícios. Para instalar o R, selecione o link à esquerda no blog, onde está escrito "Software", segundo o sistema operacional que você usa (Windows ou Mac OS X). Você baixará um arquivo de instalação executável. Execute o arquivo. O sistema será instalado numa pasta chamada "R". Para executá-lo no Windows 7, selecione o botão "Iniciar", abaixo e à esquerda na tela, e digite "R". Um programa chamado "R 2.14.2" deverá ser encontrado pela busca do Windows. Você o reconhecerá facilmente pelo ícone, uma letra R maiúscula azul. Como você o usará com frequência neste semestre (e, quem sabe, nos próximos semestres também, em outras disciplinas), recomendo fixar o programa na barra de tarefas ou no menu Iniciar. Basta selecionar o programa com o botão direito do mouse e escolher a opção que você prefere para fixar. Quem estiver usando Windows XP ou Mac OS X e tiver dúvidas para encontrar ou executar o programa, mande um e-mail para a gente.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-85739143616165450072012-03-03T10:00:00.002-03:002012-03-03T10:34:24.592-03:00Stack OverflowEstou acrescentando à nossa lista de sites recomendados (à direita no blog) um link que merece um comentário. Trata-se do <a href="http://stackoverflow.com/questions/tagged/r)" target="_blank">Stack Overflow</a>, um fórum dedicado a sanar dúvidas bem específicas da comunidade de estudantes e profissionais na área de TI. A estrutura do fórum é democrática e todos podem responder as perguntas e pedidos de ajuda de todos. Até onde vi, a qualidade das respostas é muito boa e acho que o site pode ser útil para o aprendizado de vocês em R, durante o curso e depois dele. O site é organizado em seções dedicadas às diversas linguagens de programação que existem. O link que estou inserindo ao lado corresponde, é claro, àquela que estamos estudando.<br />
<div>
<br /></div>
<div>
Na verdade, o Stack Overflow é um capítulo da <a href="http://stackexchange.com/" target="_blank">Stack Exchange</a>, uma grande coleção de fóruns de perguntas e respostas abrangendo áreas temáticas <a href="http://stackexchange.com/sites" target="_blank">muito mais amplas</a> do que programação ou TI. Por exemplo, o fórum <a href="http://stats.stackexchange.com/" target="_blank">CrossValidated</a> é dedicado à análise estatística de dados. Existe outro dedicado à <a href="http://economics.stackexchange.com/" target="_blank">Economia</a>. Vocês vão encontrar também fóruns sobre <a href="http://gaming.stackexchange.com/" target="_blank">videogames</a>, <a href="http://photo.stackexchange.com/" target="_blank">fotografia</a>, <a href="http://cooking.stackexchange.com/" target="_blank">culinária</a>, e dezenas de outros assuntos.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-31790357443412098682012-03-02T12:35:00.001-03:002012-03-03T09:51:56.553-03:00A rede de IndraOntem em sala eu lancei um segundo desafio. Na capa dos slides do nosso curso há a foto de uma teia de aranha respingada com gotículas d'água, que eu disse representar a "rede de Indra". O que é a rede de Indra e em que sentido ela simboliza as redes bayesianas que estudaremos em breve? Um aluno já me mandou uma boa resposta, mas não totalmente completa. Quando estudarmos as redes bayesianas, o simbolismo vai ficar mais claro.<br />
<br />
Na próxima semana, começaremos o nosso estudo formal da linguagem R. Quem tiver dificuldade em instalar o software, mande um email para mim ou para o monitor.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-6030425487187224172012-02-28T16:57:00.000-03:002012-03-03T09:50:09.531-03:00Desafio: título do blogHoje em sala eu lancei um desafio sobre o título do nosso blog. O primeiro aluno que descobrisse o que o título tem a ver com a nossa disciplina ganharia meio ponto na P1. O seu colega Thiago Frotte descobriu, parabéns! Vou manter o mistério, caso outros queiram tentar descobrir.<br />
<br />
EM 02/03/2012: Menções honrosas aos alunos Daniel Abib e Michelle Ferreira, que também mandaram a resposta certa ao desafio.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-57787012487477450842012-02-28T16:51:00.001-03:002012-03-03T09:49:25.769-03:00Orientação para os alunos com matrícula anterior a 2010Reproduzo abaixo a mensagem do Coordenador de Graduação da Economia que transmiti hoje cedo em sala, sobre a mudança no programa de TPE (novo currículo). Atenção os alunos com matrícula anterior a 2010:<br />
<blockquote class="tr_bq">
<i>Este é o novo curso de Técnicas de Pesquisa em Economia (ECO 1800). O curso faz parte da grade obrigatória dos alunos que se deparam com o NOVO currículo (isto é, os alunos que ingressaram em 2010). Se V. ingressou no curso antes de 2010 e, portanto, se depara com o currículo antigo, V. deverá se matricular no curso de TPE ministrado pelo professor Marco Antônio Cavalcanti, ou o curso de Econometria II do novo currículo (cujo conteúdo corresponde ao conteúdo de TPE do currículo antigo). Os conteúdos desta matéria e da matéria ministrada po Marco Antônio Cavalcanti são distintos. Portanto, V. precisa fazer a matéria de TPE do currículo antigo, o Departamento de Economia não considerará como válida a apresentação desta TPE. Quaisquer dúvidas ou perguntas, procure o coordenador Vinicius Carrasco ou o secretário Luciano Rossi.</i></blockquote>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2784800274449245410.post-74443632839911295512012-02-27T00:38:00.002-03:002012-03-03T09:48:25.054-03:00Boas vindas aos alunos da turma de 2012-1Bem vindos ao blog da disciplina Técnicas de Pesquisa em Economia da PUC-Rio, turma 2JD!<br />
<br />
À esquerda vocês encontrarão o material didático do curso. À direita, uma coleção de sites que recomendo a vocês. Além da publicação deste material, usarei o blog para complementar as discussões que teremos em sala de aula sobre a linguagem R e os tópicos teóricos da nossa disciplina, como inferência bayesiana, redes bayesianas e modelos ocultos de Markov.<br />
<br />
Eu uso também bastante o Twitter, para antecipar o tema das aulas, recomendar leituras extras ou sites interessantes, e para avisos de modo geral. Para seguir-me, use o botão no alto do blog, à direita. (Você precisará ter uma conta no Twitter.)Unknownnoreply@blogger.com0