[R-br] Classificar fosforo e textura do solo

Hélio Gallo Rocha heliogallorocha em gmail.com
Terça Maio 21 21:08:26 BRT 2013


Valeu Elias

Seu CRM funcionou  perfeitamente
Testei com todos os niveis, apenas fiz este ajuste, pois no valores limites
estavam classificando errado:

cfosf <- rbind(c(10.001, 20.001, 30.001, 45.001), c(6.61, 12.01, 20.01,
30.01),
               c(4.01, 8.01, 12.01, 18.01), c(2.71, 5.41, 8.01, 12.01))
c=escada(x, y, c(15.001, 35.001, 60.001), cfosf)

Como a gente coloca Resolvido?

Abraço

Hélio


Em 20 de maio de 2013 15:16, Elias Krainski [via R-br] <
ml-node+s2285057n4659361h59 em n4.nabble.com> escreveu:

> Porque em vez de usar esse tipo escada de classificação você não usa um
> tipo suave? Para mim, este último faz mais sentido. Veja exemplo de como
> obter isso com a sua 'escada':
>
> ### Tabela da quinta aproximação
> ###     Nível de Fósforo mg/dm3
> ###Argila%    muito baixo         Baixo    Médio    Bom    Muito Bom
> ###60-100    <2.7(menor e igual)    2.8-5.4    5.5-8    8.1-12    >12
> ###35-60    <4                    4.1-8    8.1-12    12.1-18    >18
> ###15-35    <6.6                    6.7-12    12.1-20    20.1-30    >30
> ### 0-15    <10                    10.1-20    20.1-30    30.1-45    >45
>
> escada <- function(x, y, x.br, y.br, ...) {
>   ix <- findInterval(x, x.br, ...)+1
>   lr <- lapply(1:nrow(y.br), function(j) {
>     i <- which(ix==j)
>     list(i=i, r=findInterval(y[i], y.br[j,], ...)+1)
>   })
>   i <- sort(unlist(lapply(lr, function(x) x$i)),
>             index.return=TRUE, method='quick')$ix
>   unlist(lapply(lr, function(x) x$r))[i]
> }
>
> ### exemplo simulado
> n <- 30000
> x <- 90*runif(n)
> y <- runif(n, 0, 100-x)*.7
>
> cfosf <- rbind(c(10, 20, 30, 45), c(6.6, 12, 20, 30),
>                c(4, 8, 12, 18), c(2.7, 5.4, 8, 12))
> cfosf
> res <- escada(x, y, c(15, 35, 60), cfosf)
> table(res)
>
> plot(x, y, col=res, pch=19, las=1, asp=1, cex=0.3,
>      xlab="Argila", ylab="Fósforo")
> abline(v=c(15, 35, 60), col=gray(.7))
> for (j in 1:nrow(cfosf))
>   segments(c(0, 15, 35, 60)[j], cfosf[j,],
>            c(15, 35, 60, 100)[j], cfosf[j,], lty=3)
> legend("topright", c("Muito baixo", "Baixo", "Médio", "Muito bom"),
>        pch=19, col=1:5, bty='n', title='Textura')
> segments(0,100,100,0, lty=3)
>
> ### usando esses dados simulados
> ### (ideal e' usar dados reais)
> ### para obter uma funcao suave
>
> require(MASS)
> aj <- polr(resp ~ x*y, data.frame(resp=factor(res, ordered=TRUE)))
>
> prd <- predict(aj)
>
> plot(x, y, col=unclass(prd), pch=19, las=1, asp=1, cex=0.3,
>      xlab="Argila", ylab="Fósforo")
> legend("topright", c("Muito baixo", "Baixo", "Médio", "Muito bom"),
>        pch=19, col=1:5, bty='n', title='Textura')
>
> ### classificando um novo solo (Argila=36, fosforo=19)
> ### usando a escada:
> escada(36, 19, c(15, 35, 60), cfosf)
> ### suave:
> predict(aj, newdata=data.frame(x=36, y=19))
>
>
> Att.
> Elias.
>
>
> ------------------------------
> Em 18/05/2013 09:28, *Hélio Gallo Rocha < [hidden email]<http://user/SendEmail.jtp?type=node&node=4659361&i=0>>
> * escreveu:
> Bom dia a todos,
>
> Para recomendar adubação fosfatada é necessário classificar a quantidade
> de fósforo da análise em conjunto a textura do solo.
>
>       Tabela da quinta aproximação
>
>
>
> Nível de Fósforo mg/dm3
>
> Argila%
>
> muito baixo
>
> Baixo
>
> Médio
>
> Bom
>
> Muito Bom
>
> 60-100
>
> <2.7 (menor e igual)
>
> 2.8-5.4
>
> 5.5-8
>
> 8.1-12
>
> >12
>
> 35-60
>
> <4
>
> 4.1-8
>
> 8.1-12
>
> 12.1-18
>
> >18
>
> 15-35
>
> <6.6
>
> 6.7-12
>
> 12.1-20
>
> 20.1-30
>
> >30
>
> 0-15
>
> <10
>
> 10.1-20
>
> 20.1-30
>
> 30.1-45
>
> >45
>
>
>
> Fiz o seguinte:
>  solo=c(1:50)                       # resultado da análise do solo
> argila=c(60,35,15,0)            # teor de argila
> p1=c(0,2.7,5.4,8,12)             # fósforo com + de 60% de argila
> p2=c(0,4,8,12,18)                # fósforo com 35 a  60% de argila
> p3=c(0,6.6,12,20,30)            # fósforo com 15 a  35% de argila
> p4=c(0,10,20,30,45)            # fósforo com < 15% de argila
> res=c("Muito.Baixo","Baixo", "Medio", "Alto", "Muito.alto")
>
> Assim se o resultado de P é 3.5 :
> 60% de arg, seria classificado como Baixo
> 35% de arg. seria classificado como muito baixo
>
> andei dando uma olhada na solução do post
> Uso do ifelse
>
>  A saida desta função seria casada com uma recomendação,
>
> Grato a todos
>
> --
> Hélio Gallo Rocha
> IFSULDEMINAS - Câmpus Muzambinho
>
>
>
> _______________________________________________
> R-br mailing list[hidden email] <http://user/SendEmail.jtp?type=node&node=4659361&i=1>https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
>
>
>
> _______________________________________________
> R-br mailing list
> [hidden email] <http://user/SendEmail.jtp?type=node&node=4659361&i=2>
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://r-br.2285057.n4.nabble.com/R-br-Classificar-fosforo-e-textura-do-solo-tp4659355p4659361.html
>  To unsubscribe from R-br, click here<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3357982&code=aGVsaW9nYWxsb3JvY2hhQGdtYWlsLmNvbXwzMzU3OTgyfC0xMzQ3NTkwMDY4>
> .
> NAML<http://r-br.2285057.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>



-- 
Hélio Gallo Rocha
IFSULDEMINAS - Câmpus Muzambinho
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130521/982d8e0e/attachment.html>


Mais detalhes sobre a lista de discussão R-br