<div dir="ltr">Prezada Adriele,<div><br></div><div>A questão de "detecção", e mais ainda, a remoção de dados aberrantes em bancos de dados tem várias dimensões, dentre elas a puramente matemática.</div><div><br></div><div>Como você menciona uma fonte desses dados aberrantes como erros de balança,imagino que os outros pontos seriam escrutinizados antes de se jogar fora para facilitar a análise matemática, "pontos de influência" me vêm à mente, mas para tornar curto este post:</div><div><br></div><div>Há² um pacote no R para detecção de outliers, obviamente de forma "automática" usando técnicas de testes estatísticos e outro usando técnicas de <i>bootstrap</i> e detecção não paramétrica.</div><div><br></div><div>Quanto ao seu algoritmo, que li de maneira perfunctoria, e portanto sujeito a erros de interpretação, quer me parecer que você usa a mesma regressão que vai ajustar seus dados para detectá-los, isso me parece inadequado: se essa fosse a ação almejada, bastaria você usar os dados da regressão os pontos de alavanca, influentes, etc. e retirá-los.</div><div><br></div><div>Uma outra fonte que você pode se interessar é que existem l<u>ivros</u> inteiros dedicados a esse assunto, que podem colocar mais luz no seu problema (ou deixá-la com mais dúvidas!).</div><div><br></div><div>HTH</div><div>--</div><div>Cesar Rabak</div><div><br></div><div><br></div><div><br></div><div>[1] Para um tratamento jocoso, veja o <i>fortune</i> sobre <i>outliers</i> no R!</div><div>[2] Que eu conheço, uma pesquisa mais aprofundada pode revelar uma miríade!</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-07-20 18:17 GMT-03:00 Mauro Sznelwar via R-br <span dir="ltr"><<a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><span style="font-size:medium;color:#0000ff">Não poderia disponilizar o Data Set, ou pelo menos parte dele para rodar?</span></div><div><div class="h5">
<div> </div>
<div> </div>
<div> </div>
<div dir="ltr"><br>
<div>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">Boa tarde pessoal,</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif"><span> </span></span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">estou trabalhando com um banco de dados que possuem várias coletas de pesos ao longo do tempo de vários bois.</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">O meu objetivo é deixar um ajuste simples (pode até ser um modelo não- linear ao invés de uma regressão simples), porém, preciso remover os possíveis pontos discrepantes que atrapalham o ajuste, de forma recursiva (automática). O algoritmo será executado em vários momentos, enquanto acompanha o crescimento do animal. O mais importante  seria a remoção dos <em>outiliers</em> do banco de dados.  Eu criei um algoritmo para fazer isso. </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">Gostaria de saber se alguém possui uma ideia melhor ou sugestão. Segue a função  criada.</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif"> </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-family:'Times New Roman',serif"><span style="font-size:12pt"><strong>OBS:</strong> Muitos pontos discrepantes ainda ficam no banco, isso devido a um erro operacional da balança que pesa os animais. Precisaria de algo mais robusto para remover os pontos </span><span style="font-size:16px">destoantes de forma recursiva para todos os animais</span><span style="font-size:12pt">.</span></span></p>
<p class="MsoNormal" style="line-height:normal"> </p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif"><span> </span></span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">DADOS é um data.frame com as seguintes colunas: BRINCO (identificação ou numero do animal), DATA (dia da pesagem do peso do animal) e PESO (peso do animal correspondente ao dia)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif"><span> </span></span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">fit_linear <- function(DADOS){</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">fit_aux = c()</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">BRINCO = as.numeric(as.vector(levels( as.factor(DADOS[,"BRINCO"])))) </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">pdf(file = "ajuste%03d.pdf")   # salvar os gráficos em pdf</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">for (i in BRINCO){</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">dados = subset(DADOS, BRINCO == i, selec =  c( BRINCO, DATA, PESO))</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">j=1</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">while (j<=30){</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">dias =  as.vector(as.numeric(as.<wbr>factor(dados[,"DATA"]))) </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">pesos = as.numeric(as.vector(dados$<wbr>PESO))</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">dad = cbind(dias, pesos)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">mod <- lm(pesos~dias)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">INFLUENTES = influence.measures(mod)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">dados_analise = cbind(INFLUENTES$is.inf, dad)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">dados_influentes = as.data.frame(dados_analise)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">colnames(dados_influentes) = c("x1", "x2", "x3", "x4", "x5", "x6", "DATA", "PESO")</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">dados = subset(dados_influentes, (x1==FALSE & x2==FALSE & x3==FALSE & x4==FALSE & x5==FALSE & x6==FALSE), </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">               selec =  c(x1, x2, x3, x4, x5, x6, DATA, PESO))</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">j = j+1</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">}</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">res <- residuals(mod)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">h <- hatvalues(mod)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">P = length(mod$coefficient); N=length(peso); P; N; hc<-3*P/N;hc</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">limt <- list(c(DFB=2/sqrt(N),FDFits=2*<wbr>sqrt(P/N),cov.r=3*P/N,</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US"> Cook=qf(0.5,2,8, lower.tail = TRUE, log.p = FALSE),hat=3*P/N))</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">N=length(peso); P=length(mod$coefficient)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">rs <- rstudent(mod)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">h <- lm.influence(mod)$hat; lc <- 3*P/N</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">minrs=min(min(rs),-3)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">maxrs=max(max(rs),3)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">ymin=minrs-.1</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">ymax=maxrs+.1</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">maxh=max(max(h),lc)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">minh=min(h)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">xmin=minh-.1</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">xmax=maxh+.1</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">par(mfrow=c(1,1))</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">plot(c(xmin,xmax),c(ymin,ymax)<wbr>, type="n", xlab="h - leverage", ylab="RStudent", main= i)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">abline(h=-2.5, col="red")</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">abline(h=2.5,col="red"); abline(v=lc, col="blue")</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">points(h,rs)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">plot(dad,  main= i)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">abline(mod,lty=2)</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">}</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif" lang="EN-US">dev.off() </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">}</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif"> </span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif">Agradeço,</span></p>
<p class="MsoNormal" style="line-height:normal"><span style="font-size:12pt;font-family:'Times New Roman',serif"> </span></p>
</div>
-- <br>
<div class="m_5781070892129659363gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div style="font-family:times,serif;margin:0cm 0cm 0.0001pt;font-size:16px">Adriele Giaretta Biase.</div>
<div style="font-family:times,serif;margin:0cm 0cm 0.0001pt;font-size:16px">Mestre em  Estatística e Experimentação Agropecuária - UFLA. <br>Doutora em Estatística e Experimentação Agronômica - ESALQ/ USP</div>
<div style="font-family:times,serif;margin:0cm 0cm 0.0001pt;font-size:16px"><span style="font-size:12pt">Contato: (19) 98861-0619.</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div><div>______________________________<wbr>_________________<br>R-br mailing list<br><a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br><a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/<wbr>cgi-bin/mailman/listinfo/r-br</a><br>Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-<wbr>guia</a>) e forne�a c�digo m�nimo reproduz�vel.</div><br>______________________________<wbr>_________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" rel="noreferrer" target="_blank">https://listas.inf.ufpr.br/<wbr>cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" rel="noreferrer" target="_blank">http://www.leg.ufpr.br/r-br-<wbr>guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br></div>