Ensinando R…

Escrevi esse post* pensando em ajudar quem vai dar ministrar seus primeiros minicrusos, aulas ou disciplinas sobre o R ou que utilizem o R. Me baseio na minha experiência ensinando R desde 2014 – no caso, alguns minicursos e algumas disciplinas de pós-graduação. Não é uma baita experiência, mas é melhor do que nada!

Então… algumas dicas ou conselhos, que você pode seguir, adaptar ou ignorar 😉

1 – Lembre-se como era no começo…

Se você está ensinando R, é porque já tem um bom comando desta linguagem. E sempre que adquirimos um bom comando de algo, corremos o risco de esquecer como foi difícil chegar naquele lugar… Afinal, alguém já definiu a palavra “trivial” como “aquilo que você sabe fazer, não importa quão difícil foi aprender aquilo em primeiro lugar.” rs

Então, lembre-se que, para quem está iniciando, nada é trivial!

Exemplos de coisas não triviais:

  • Definir o diretório de trabalho (setwd)
  • Ver a estrutura de um arquivo (str)
  • Saber quantas linhas e colunas um objeto tem
  • Ver se uma variável é contínua ou categórica
  • Escrever os comandos em um editor de texto e salvá-los, ao invés de fazer tudo na linha de comando e perder os comandos depois
  • Abrir e salvar um script
  • Lembrar de colocar um # antes dos comentários
  • Interpretar um comando com mais de um argumento
  • Saber que algo que foi feito, até mesmo um read.table, só permanece se foi criado um objeto para armazenar
  • Entender o que é um objeto.

2 – Comece sempre do mais simples

Digamos que o objetivo é rodar algo complexo, como um modelo linear generalizado; o comando seria algo como

glm(y ~ x, data=meus_dados_lindos, family=poisson).

Como chegar neste comando mais complexo?

Podemos ir por partes; supondo que os dados estejam em um data.frame e você já tenha falado o que são data.frames e como pegar partes deles, podemos começar criando objetos x e y:

x = meus_dados_lindos$x; y = meus_dados_lindos$y

Depois fazendo um gráfico e um modelo linear:

plot(y ~ x)

lm(y ~ x)

Depois salvando o modelo linear como um objeto:

mod1 = lm(y ~ x)

Depois inserindo o argumento data:

mod1 = lm(y ~ x, data=meus_dados_lindos)

E finalmente adicionando a família:

mod1 = glm(y ~ x, data=meus_dados_lindos, family=poisson).

Demora? Sim, demora. Mas fica mais claro entender o que cada comando faz. Isso se aplica a qualquer comando com mais de um argumento, desde um read.table até um gamm. Dependendo da profundidade desejada, uma aula inteira pode ser necessária para explicar um argumento de uma função.

3 – Às vezes menos é mais, e o excelente pode ser pior que o péssimo, já dizia Sun Tzu.

Tenha o objetivo em mente… O que é desejado: passar todas as formas possíveis de fazer uma análise; ou passar um grande número de análises que podem ser feitas sobre um conjunto de dados; ou explicar em detalhes algo para que a pessoa consiga entender outros códigos? Não sei se é possível atingir todos esses objetivos, então uma escolha precisa ser feita, e ela depende do seu objetivo. De qualquer modo, acho importante resistir à tentação de colocar tudo que queremos no código. Pela minha experiência, é possível demorar uma manhã inteira para explicar um script de duas ou três páginas.

4 – Construa sobre o que já foi construído antes

Essa frase ficou estranha né. rs

Mas então, digamos que vou ensinar como rodar um modelo generalizado aditivo no R… Para isso, vou construir em cima de um modelo linear, porque o princípio e a sintaxe são essencialmente os mesmos, apenas com a adição de alguns argumentos. E é legal, no começo do curso, passar e explicar detalhadamente comandos que serão usados continuamente – no meu caso, são read.table, plot, str… Sendo continuamente usados, tais comandos ficam melhor gravados na memória de quem está aprendendo. Por outro lado, um comando complexo usado uma única vez tende a ser esquecido. Lembrando também da importância da repetição para o aprendizado – comandos ou procedimentos usados repetidamente serão aprendidos e interiorizados mais facilmente.

5 – Exercícios!

Eu acho muito importante dar exercícios durante as aulas. No começo eu dava exercícios relativamente complexos, mas fui percebendo que, num curso mais introdutório, isso não faz muito sentido. Eu acho interessante exercícios que repliquem o código já feito, com pequenas modificações. Por exemplo, posso rodar um GLM sobre uma conjunto de dados e pedir para rodarem o mesmo GLM sobre outro conjunto de dados. As modificações no código serão mínimas – mas elas não são triviais. E é interessante que os exercícios no começo tenham poucos passos, aumentando de dificuldade gradualmente. Assim, no fim do curso será possível que uma pessoa consiga escrever um código que no começo do curso a deixava assustada.

6 – Teste seu script e seus dados…

Antes do curso, é importante ter certeza de que seu script funciona… Mesmo ele estando em perfeita ordem, pode ter certeza que erros vão surgir. Melhor minimizar os erros e assim a frustração.

7 – Flexibilidade é legal!

É muito difícil prever quanto conteúdo poderá ser passado em um determinado tempo, e é fácil superestimar isso. Então é importante ser flexível… É bem comum de algo que eu esperava passar em meia-hora demorar uma hora e meia pra ser passado – e isso é normal! O que importa é que haja um aproveitamento. Isso é uma questão de planejamento – e entender quanto tempo é preciso pra passar algo requer experiência – mas também flexibilidade – dependendo da turma, aquele conteúdo às vezes poderia ser passado em meia-hora.

8 – Intervalos são mais legais ainda!

Tentar entender estatística ou código num estado de exaustão profunda é difícil… Então é importante ter intervalos durante a aula. Eu dou intervalos de vinte minutos – acho que é o necessário para refrescar a cabeça e conseguir aproveitar melhor a segunda parte da aula. E horário de almoço também é importante… Sim, algo do código ou do conteúdo pode ter que ser sacrificado para isso. Mas se a pessoa está num nível de exaustão que só está querendo que aquilo acabe, o conteúdo já está sendo sacrificado, só que de uma forma mais dolorosa.

9 – Peça feedback…

Algo que lhe parece trivial pode ser bem difícil para quem está tentando aprender; e muitas vezes pessoas não falam isso, por vergonha ou por não quererem atrapalhar a aula. Então é importante ter certeza de que grande parte da turma está acompanhando. Digo grande parte porque pode acontecer de uma ou duas pessoas não conseguirem acompanhar por mais que você tente; aí fica a decisão de prejudicar o aprendizado dessas pessoas ou do restante da turma.

10 – Há diferentes graus de habilidade; lidar com isso é importante.

Na turma provavelmente haverá pessoas que terão bastante facilidade, pessoas com facilidade intermediária e pessoas com muita dificuldade e sofrendo para fazer qualquer coisa no R. E é impossível dar atenção simultânea a todas elas. Se tiver alguém ajudando como monitor, já é de grande ajuda – enquanto você ministra a parte principal da aula, o monitor ou a monitora ajuda quem tem mais dificuldade. Mas não costumo ter essa sorte. Mas, tenho três sugestões de como lidar com isso:

10a – Ajuda mútua:

Peça para que quem tem mais facilidade ajude quem tem mais dificuldade. Tenho feito isso, e me parece trazer bons resultados. E isso maximiza o aprendizado de ambos os lados – ao ajudar alguém a resolver um erro no R, aprendemos um pouco mais sobre o R; e ao explicar alguma coisa, o nosso próprio entendimento daquilo melhora. Então quem tem dificuldade consegue acompanhar e quem tem facilidade aprende mais ainda.

10b – Dois ou três níveis de exercícios:

Ao passar um exercício, é possível que algumas pessoas resolvam em cinco minutos e outras em trinta. Para que ninguém fique entediado, uma opção é passar um exercício adicional e opcional para quem resolver o primeiro exercício rapidamente. Isso dá mais tempo para quem tem mais dificuldade resolver e maximiza o aprendizado de quem tem mais facilidade.

10c – Passar o código inteiro no começo da aula:

Assim, se você precisar explicar alguma coisa por mais tempo do que o planejado, quem quiser pode ir estudando e rodando o código por conta própria.

11 – Passar o código inteiro… Já falei isso né?

Mas é porque isso é uma dica geral… Nas primeiras vezes, eu digitava o código e as pessoas iam copiando. Para cursos introdutórios eu acho melhor que a pessoa digite o código, porque imagino que ao digitar algo o aprendizado é melhor do que simplesmente copiando e colando ou rodando um código já pronto. Mas… Haja olhos pra enxergar aquilo que está sendo projetado! rsrs O que eu faço agora é entregar o código impresso no começo da aula, e continuo digitando ele. Assim ele pode ser copiado da imagem projetada ou do papel. Se for algo muito complexo e o foco do curso não for no R em si, e sim em algum tipo específico de análise, eu entrego o script em formato .R, de modo que basta ir rodando ele, porque haja dedo pra digitar um script de análise de mistura pra análise de movimentação animal… 🙂
E esse meu conselho entra um pouco em conflito no conselho de ser flexível… Porque não há flexibilidade num código impresso. Eu sempre saio um pouco do roteiro, ou porque penso em algo mais interessante, ou por causa de alguma pergunta, ou porque não me planejei direito mesmo (aconteceu isso em uma aula no último curso que ministrei – o código funcionava, mas não era a melhor forma de analisar aqueles dados e só percebi isso durante a aula). Aí o meio-termo entre a flexibilidade e o código pronto é importante.

12 – Misturar teoria e prática pode ser complicado…

Isso é uma opinião minha, e conheço grandes professores de estatística que preferem passar a teoria e a prática juntas. Eu gosto de separar – um ou dois dias de teoria, um ou dois dias de prática, ou algo assim. Fa;co isso porque me parece que são formas diferentes de pensar: uma coisa é entender o que aquela análise estatística faz; outra coisa é pensar como falar pro R fazer aquela análise estatística. Quando se tem familiaridade com a estatística e com o R, fazer essa transição é fácil – mas não para quem está iniciando! E além disso, às vezes um comando relativamente simples, como um gam(y ~ s(x, fx=F, k=-1)), precisa de um dia inteiro para explicar o que é esse s, fx e k. Ou algo relativamente simples de ser explicado requer um comando complexo com vários argumentos – por exemplo, fazer um gráfico de barras.

E outra vantagem de separar teoria da prática é que assim a pessoa não precisa trazer o computador todo dia. Quanto menos andamos com o computador, menor o risco dele ser roubado, pegar chuva etc, principalmente se o curso é dada numa universidade bem no meio da estrada entre duas cidades!

13 – Inspire-se!

Se você quer de fato ser uma boa professora ou um bom professor de R ou de estatística, é importante estudar, sim – mas também é importante ver outros cursos sobre aquele assunto… Para se inspirar e ver outras diferentes formas pelas quais algo pode ser ensinado. Eu acho interessante montar seu próprio material, porque cada pessoa tem o seu jeito de explicar; mas se inspirar nos materias de outras pessoas e pegar elementos deles também é importante.

14 – Não confie cegamente nos conselhos 🙂

Eu acredito que cada pessoa tem o seu jeito de ensinar, e não há um jeito supremo assim como não há a pergunta para a resposta sobre a vida, o Universo e tudo o mais. Então é importante ouvir dicas, conselhos, sugestões – e filtrar tudo para ver o que condiz melhor com o seu estilo e o que vai dar os melhores resultados, pensando no aproveitamento de quem faz o curso e também no seu próprio aprendizado – pois quem ensina, aprende ao ensinar e quem aprende, ensina ao aprender, já dizia Paulo Freire.

* Agradeço ao Marco Antônio Batalha por sugestões para a melhoria deste post.

 

Anúncios

4 pensamentos sobre “Ensinando R…

  1. Pavel, estou com esta sua postagem aqui guardada desde quando foi publicada, para não esquecer de ler e responder! Felizmente, depois de mais de um mês, consegui me organizar, ler e agora estou aqui respondendo. Ufa!

    Então, para começar: que massa, parabéns pela postagem! Ela ecoa um monte de coisas que eu penso também, e acho que nós que queremos ensinar R por aí precisamos pensar um bocado mesmo sobre as melhoras estratégias, caminhos e etc. E como acho que você ensina para um público parecido com o meu (ligado primordialmente à biologia), as preocupações são bem parecidas (poderiam ser diferentes ao se ensinar para pessoas que sabem programação, por exemplo).

    Sobre os pontos:

    1 – Concordo totalmente, temos sempre que nos colocar no lugar da galerinha que está aprendendo e, especialmente, lembrar como foi difícil aprender lá no começo da jornada. Eu sempre busco repetir algumas coisas essenciais ao longo das aulas, além de sempre tentar explicar a mesma coisa de perspectivas diferentes.

    2 – Também adoro começo do simples, e construir as coisas mais complexas em bloquinhos. Faço muito isso ao se ensinar gráficos: no lugar de tacar aquele comando quilométrico, no qual você usar uns 15 argumentos, é bem mais legal começar com um gráfico feio e toscão, e pouco a pouco adicionar argumentos para ele ir melhorando. Facilita o aprendizado, e também evita erros, pois você testa cada etapa de uma vez, sem dar grandes saltos.

    3 – Yeahhh!!!! Até porque eu penso que se o camarada aprende o basicão no R e se sente seguro, ele aos poucos poderá avançar para o mais complexo ou sofisticado quando (e se) precisar. Melhor reforçar bem o aprendizado básico do que tentar avançar com coisas que são fantásticas mas que podem acabar não aprendidas (ou pior: aprendidas incorretamente).

    4 – Isso! E isso remete ao ponto 1. Quando ensinamos um monte, algumas coisas tendem a nos parecer fáceis de usar e lembrar. Mas a pessoa que ouviu aquilo e usou apenas uma vez pode não concordar…

    5 – Sim!!!! E sempre estimular que quem fez o curso, disciplina ou seja lá o que foi que fez, continuar a usar o R. Quando comecei a aprender, eu sofria quando passava muito tempo sem abrir o R, pois me perdia com as coisas mais básicas. Sempre digo para os alunos que depois de aprender a usar o básico do R eles devem usar sempre que possível, tentar ensinar os colegas, e simplesmente usar de vez em quando para manter o hábito. Não é como o ditado de andar de bicicleta, no R a gente se perde muito se ficar longe dele… Então exercícios são fundamentais, durante e depois.

    6 – hehehe, verdade. E mesmo assim, temos que ter em mente que erros inesperados podem surgir, e temos que sempre estar prontos pra isso. Mas claro que testando tudo já evitamos um monte de possíveis dores de cabeça.

    7 e 8 – é isso aí, sem comentários.

    9 – E ajuda muito mesmo quando podemos ter alguém para servir de monitor. Daí a pessoa consegue acompanhar e notar quem está com problemas. Em turmas grandes e heterogêneas, às vezes dá pra conseguir ajuda até dos próprios alunos, com os mais experientes ajudando os iniciantes. Mas um monitor dedicado, alguém que foi para o curso apenas para isso, é algo incrível quando temos o luxo de ter.

    10a- haha, acabou que falei disso acima.
    10b – gosto de propor pequenos “desafios” pros que terminam rápido, com coisas que eles podem tentar fazer enquanto os demais terminam.
    10c – essa acho que depende. Em aulas mais simples do começo, não gosto de compartilhar o código no começo, pois acho importante que as pessoas digitem, para se habituarem às funções, os nomes, etc; acho que ajuda a evitar erros. Mas em casos com códigos maiores e mais complexos, com certeza passar tudo antes ajuda um monte.

    11 – hahaha, estou escrevendo as respostas enquanto leio os pontos. Sim, acho que é por aí. E sabe, nunca pensei em entregar códigos impressos! Acho uma ideia muito massa mesmo! A gente se acostuma tanto com o meio digital que acaba se esquecendo que temos recursos mais simples à disposição, hehehe

    12 – Cara, acho que depende um bocado do nível do que estamos aprendendo. Acho que pras coisas mais “profundas” não tem jeito mesmo, o melhor é ter uma boa preparação teórica antes de partir pra prática. Mas no começo eu gosto do R como um caminho para o aprendizado. Como construir gráficos enquanto aprendemos os conceitos de medidas de tendência central e dispersão, e coisas assim. O que rola aqui é que podemos construir exemplos simples que vão, na medida em que avançam, guiando a gente pelos conceitos.
    Mas é, depende muito do contexto, e misturar muito da teoria e prática pode ser perigoso mesmo.

    13 – Pois é, também acho um barato olhar tutoriais, aulas e coisas assim de outras pessoas, dá pra aprender muito. E no R, que tradicionalmente nos dá muitos caminhos diferentes para se fazer uma mesma tarefa, isso pesa ainda mais. De repente aquele seu jeito de ensinar uma coisa super básica pode não ser tão fácil quanto o de outra pessoa, e podemos sempre incorporar novas maneiras.

    14 – Sim! O legal aqui é escutarmos com atenção os conselhos e indicações, refletir sobre eles, e depois aplicar o que achamos válido.

    Pavel, muito bacana mesmo, valeu pelo texto. Desculpe a demora monstruosa em comentar, queria ter escrito esta resposta no dia que a postagem saiu, hahahaha

    Abração!

    • Oi Marcos,
      Muito obrigado pelos comentários! Fico feliz que concorde com o que escrevi, indica que estou/estamos no caminho certo. 🙂
      10b – Sim, vou começar a formular mais desafios nas próximas disciplinas que eu ministrar 🙂
      10c – Sobre compartilhar o código inteiro – no começo eu ia digitando e as pessoas copiando, mas aí percebi que pessoas ficavam forçando a vista, cerrando os olhos pra ver aquelas letrinhas… Só faltava um binóculos de ópera, rs. Entregar o código impresso foi a solução que achei pra isso – obriga a pessoa a digitar sem que ela precise forçar muito a vista. E quando são coisas muito complexos, por exemplo análise de movimento animal, eu passo o código em formato digital mesmo porque é muita, muita coisa pra digitar.
      12 – Sim, o caminho do meio pode ser o ideal mesmo… Juntar teoria e prática pra algumas coisas, como gráficos e estatísticas simples; e separar para coisas mais complicadas. Mas aí entram também questões logísticas – se não temos uma sala com computadores para as aulas, eu prefiro não obrigar o pessoal a trazer o notebook todos os dias. As ruas de Ilhéus e Itabuna não são as mais seguras do mundo. Mas concordo que juntar pode ser bom em várias situações!

      …Uma das maiores alegrias da minha vida é quando alguém me diz que coseguiu fazer um loop no R com base em algo que ensinei… rs

      Abraço!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s