
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@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... 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