====== Minhas propostas ======
===== Proposta A =====
A função irá tratar variáveis quantitativas coletadas ao longo do tempo, em taxas de amostragem diferentes e analisar a existência de correlação entre esses dois dados, sem o efeito do tempo, retornando gráficos exploratórios.
Em maior detalhe, a função irá:
* igualar a taxa de amostragem de dois dados (x e y). O usuário poderá escolher entre fazer a soma ou a média dos dados coletados mais frequentemente.
* criar dois modelos lineares (lmx e lmy) descrevendo a variação de cada uma das duas variáveis em função do tempo. A função irá comparar modelos preliminares antes de escolher os modelos lmx e lmy finais. O usuário poderá escolher dentre os seguintes modelos a serem comparados: polinômio de primeiro grau, polinômio de segundo grau, polinômio de terceiro grau, função senoide. Os modelos finais serão escolhidos pelo valor de p e pela soma dos desvios quadráticos residuais.
* utilizar os resíduos desses dois modelos finais para criar um terceiro modelo linear (lm3) descrevendo a variação da variável y em função da x
* retornar sumário do terceiro modelo linear lm3
* retornar uma tabela que contenha os dados já tratados, para ser utilizada pelo usuário. Haverá a opção de adicionar os dados tratados em uma tabela já existente.
* retornar dois gráficos com a variação de x e y em relação ao tempo, para os primeiros dez dias de dados. O usuário terá a opção de sobrepor esses dois gráficos.
* plot y~x dos dados brutos
* plot y~x dos dados descontando o efeito do tempo (resíduos dos modelos lineares (lmx e lmy) da variação de cada variável (x e y) em função do tempo)
Objetos e argumentos de entrada da função:
x - vetor numérico quantitativo
x.horario - vetor contendo os horários de amostragem da variável x
y - vetor numérico quantitativo
y.horario - vetor contendo os horários de amostragem da variável y
resume.por="sum","mean" - argumento que define o método a ser utilizado para igualar as taxas de amostragem (respectivamente: soma ou média dos dados coletados mais frequentemente).
modelos="p1","p2","p3","fs"- argumento para selecionar os modelos preliminares a serem comparados para se obter os modelos finais da variação de x e y em relação ao tempo (respectivamente: polinômio de primeiro grau (y=a+bx), polinômio de segundo grau (y=a+bx+cx^2), polinômio de terceiro grau (y=a+bx+cx^2+dx^3), função senoide (y=sin(x)))
tabela="" - argumento que determina como retornar os dados tratados. Se não especificada, a função retornará uma tabela nova. Se o usuário especificar um data frame, os dados serão adicionados como colunas novas no data frame já existente.
sobrep - argumento lógico. Se TRUE, serão sobrepostos os gráficos de linha da variação de x e y em relação ao tempo
xlab="x" - legenda a ser colocada no eixo da variável x nos gráficos
ylab="y" - legenda a ser colocada no eixo da variável y nos gráficos
Objeto de saída:
lista com o sumário do modelo linear de y em função de x e tabela contendo os dados tratados.
Gráficos gerados:
* dois gráficos com a variação de x e y em relação ao tempo, para os primeiros dez dias de dados
* plot y~x dos dados brutos
* plot y~x dos dados descontando o efeito do tempo (resíduos dos modelos lineares (lmx e lmy) da variação de cada variável (x e y) em função do tempo)
===== Proposta B =====
A função irá calcular o melhor caminho de um ponto A até B, com possibilidade de paradas, sendo que os pontos estão dentro de um espaço delimitado e a posição deles neste espaço se altera com o tempo.
Em maior detalhe, a função irá:
* calcular a distância do ponto inicial, no horário da partida, até o ponto final (ou parada, se existir) em todos os horários amostrados
* determinar o melhor horário para se chegar no ponto final, levando em consideração:
* o horário que tenha menor distância
* o tempo gasto para chegar, de acordo com uma velocidade determinada pelo usuário
* o tempo de espera entre a chegada e o aparecimento do ponto na posição.
* Será escolhido o horário em que a posição do ponto seja mais próxima do ponto de partida, que seja alcançado com a velocidade pretendida e cujo tempo de espera para o ponto aparecer na posição seja o menor possível.
* No caso de existirem paradas, o próximo trecho será calculado utilizando a posição final do trecho anterior e o novo horário de partida será o horário em que o ponto apareceu nessa posição.
* A rota será construída de trecho em trecho, até o ponto final.
Objetos e argumentos de entrada da função:
posx - data frame onde a primeira coluna contém os nomes dos pontos e as colunas seguintes, a posição dos pontos no eixo x, em cada horário amostrado, com taxa de amostragem constante.
posy - data frame onde a primeira coluna contém os nomes dos pontos e as colunas seguintes, a posição dos pontos no eixo y, em cada horário amostrado, com taxa de amostragem constante.
p.partida - caracter correspondente ao nome do ponto de partida
ordem.fixa - argumento lógico. Se FALSE, a ordem dos pontos de parada é escolhida de forma a otimizar o tempo do deslocamento
p.parada - lista de caracteres correspondendo aos nomes dos pontos de parada. Se ordem.fixa=TRUE, colocar os pontos na ordem desejada.
p.destino - caracter correspondente ao nome do ponto de destino
t.partida - valor numérico que indica a coluna de dados correspondente ao horário de partida
vel - valor numérico indicando a velocidade do deslocamento, no formato: unidade de x e y/taxa de amostragem
Objeto de saída: data frame com os pontos determinados pelo usuário, posição x e y de cada ponto, o horário de chegada em cada parada e ponto final, tempo de espera até o ponto aparecer na posição esperada.
Gráfico gerado: plot xy ilustrando a posição dos pontos no espaço. Conterá os pontos determinados pelo usuário, com nome e horário, e uma linha indicando o caminho do ponto inicial até o ponto final
Milene, ambas as suas propostas são interessantes, mas o plano B é MUITO mais legal. O plano A é, no final das contas, uma função que automatiza um tipo de análise. É relativamente comum as pessoas fazerem esse tipo de função, mas é uma coisa pouco desafiadora e de aplicação restrita, afinal, quem mais vai fazer exatamente este mesmo tipo de análise?
Já seu plano B é super desafiador e interessante, a questão é: você sabe por onde começar a escrever esse tipo de algoritmo? Se a resposta for positiva, é só prosseguir. Se for negativa, você pode prosseguir com o plano A ou tentar montar uma versão menos complicada do plano B. Mas, se você prosseguir com o plano B, explique melhor no seu help como tem que ser esses data.frames que a função recebe, porque não ficou muito claro pra mim o que tem nesses data.frames além das coordenadas x e y.
Olá Milene,
Sobre o plano A, concordo com o Danilo. Tome cuidado para não ser algo muito específico ao seu caso e à sua estrutura de dados. Isto tem muito mais cara de script do que de função. Como função acaba tendo uma aplicação restrita demais.
Sobre o plano B, é mesmo **muito** mais legal! O desafio de implementar o algoritmo é algo bastante interessante e que eu recomendo que você siga em frente.
--- //[[saramortara@gmail.com|Sara]] //