Lolium Rigidum. Dentro de un estudio sobre la competencia entre dos biotipos de plantas Lolium Rigidum: (Ritz‐Streibig). Un biotopo es resistente al glifosato (herbicida total, muy peligroso aunque de amplio uso) y el otro es de tipo salvaje y sensible al glifosato. Se dispone (valores experimentales) de la densidad x (plantas/m2) del biotopo sensible, junto a la densidad z del biotopo resistente. Se mide la biomasa (gr/planta) del biotopo sensible después de la germinación para los diferentes valores (x, z). Se quiere ajustar un modelo hiperbólico, en el que la relación de la biomasa con las densidades (x, z) viene dada por la siguiente función: f(x, z; , , ) = / ( 1 + * (x + *z) ) > dat <- read.table("D:\\...\\LoliumRigidum.txt", header=T) > summary(dat) z x biomass Min. : 0.00 Min. : 2 Min. : 1.063 1st Qu.: 0.00 1st Qu.: 8 1st Qu.: 2.278 Median : 8.00 Median :16 Median : 3.257 Mean :17.71 Mean :25 Mean : 4.895 3rd Qu.:31.00 3rd Qu.:32 3rd Qu.: 5.103 Max. :64.00 Max. :64 Max. :23.600 > biomasa <- dat$biomass ### biomasa del biotopo sensible > x <- dat$x ### x: densidad (plantas/m2) del biotipo sensible al glyfosato > z <- dat$z ### z: densidad (plantas/m2) del biotipo resistente al glyfosato x11() plot( z ~ x, xlab="x: densidad de plantas sensibles", ylab="z: densidad de plantas resistentes", main="valores experimentales (x,z)", cex.main=0.9 ) 0 10 20 30 40 50 60 valores experimentales (x,z) z: densidad de plantas resistentes > > + + 0 10 20 30 40 x: densidad de plantas sensibles 50 60 1 > table(z) z 0 7 8 15 16 31 32 62 63 64 15 1 11 1 8 1 5 3 3 1 > > + + x11() plot( biomasa ~ x, pch=as.numeric(as.factor(z)), xlab="x: densidad de plantas sensibles", main="biomasa vs. x para distintos valores de z", cex.main=0.9 ) 5 10 biomasa 15 20 biomasa vs. x para distintos valores de z 0 10 20 30 40 50 60 x: densidad de plantas sensibles > > > > ### ### ### ### ajuste de un modelo hiperbólico start: a0=20, valor medio cuando x=z=0 c0 = 1, ¿ambos biotipos son igualmente competitivos? b0 tal que 20/(1+b*(x+z)) = 5, con x+z=20; esto es, b0=0.15 > m1 <- nls( biomasa ~ a / (1 + b * (x + c * z )), + start=list(a=20, b=0.15, c=1), trace=T ) 183.8273 129.1265 128.8172 128.8172 : : : : 20.00 0.15 1.00 25.6262008 0.1777948 25.9164523 0.1776496 25.9145193 0.1776284 1.1430284 1.1349882 1.1349312 > summary( m1 ) Formula: biomasa ~ a/(1 + b * (x + c * z)) 2 Parameters: Estimate Std. Error t value Pr(>|t|) a 25.9145 2.3393 11.078 1.42e-14 *** b 0.1776 0.0355 5.004 8.68e-06 *** c 1.1349 0.2964 3.829 0.000387 *** Residual standard error: 1.673 on 46 degrees of freedom Number of iterations to convergence: 3 Achieved convergence tolerance: 8.447e-06 > ### gráfico del modelo ajustado > aa <- coef(m1)[1]; bb <- coef(m1)[2]; cc <- coef(m1)[3]; > ### función media del modelo > fmod <- function(xxx, zzz){ aa / (1 + bb * (xxx + cc * zzz )) } > > > > + + xx <- seq(0,65, length=14) zz <- xx bbiom <- matrix(,nrow=length(xx), ncol=length(zz)) for(i in 1:length(xx)){ for(j in 1:length(zz)){ bbiom[i,j] <- fmod(xx[i], zz[j]) }} > > + + > x11() parapuntos <- persp( xx, zz, bbiom, theta=25, phi=25, d=10^6, zlim=c(0,27), ticktype="detailed", xlab="x: sensible", ylab="z: resistente", zlab="biomasa", cex.axis=0.7, shade=0.1, col="ivory" ) mtext( "Lolium Rigidum", side=3, line=0, font=2, cex=0.9 ) > > > > ### se añaden los puntos observados puntos <- trans3d( x, z, biomasa, pmat=parapuntos ) #points( puntos$x, puntos$y, col="red", pch=16 ) points( puntos, col="red", pch=16, cex=0.7 ) > ### se añade una línea azul desde cada punto al valor predicho > biopred <- predict( m1 ) > m1pred <- trans3d( x, z, biopred, pmat = parapuntos ) > obs <- trans3d( x, z, biomasa, pma = parapuntos ) > segments( m1pred$x, m1pred$y, obs$x, obs$y, col="blue", lty=1 ) > points( puntos, col="red", pch=16, cex=0.7 ) > ### se añade el contorno para x+cc*z=50, esto es, la línea que une los > ### puntos (50, 0, fmod(50,0)) y (0,50/cc, fmod(0,50/cc)) > > > > fmod1 <- fmod(50,0); fmod2 <- fmod(0,50/cc) ct1 <- trans3d( 50, 0, fmod1, pmat=parapuntos ) ct2 <- trans3d( 0, 50/cc, fmod2, pmat=parapuntos ) segments(ct1$x,ct1$y,ct2$x,ct2$y, lty=1, lwd=2, col="blue") > ### densidad (no probabilística) virtual, "perpendicular" > ### a los contornos x+cc*z=cte: esto es, el "modelo" sobre la línea z=cc*x > > > > > vv <- seq(0,65, length=100) ### valores z uu <- vv/cc ### valores x ceros <- rep(0, length(uu)) transceros <- trans3d( uu, vv, ceros, pmat=parapuntos) lines( transceros$x, transceros$y, col="blue", lty=3 ) 3 > fmod.uuvv <- aa / (1 + bb * (uu + cc * vv )) > pp1 <- trans3d( uu, vv, fmod.uuvv, pmat=parapuntos ) > lines( pp1$x, pp1$y, col="blue", lwd=2 ) Lolium Rigidum 25 20 biomasa 15 10 5 60 40 0 0 20 20 x: se n sible 40 60 0 z i es r : en st te 4 > > > > ### ### ### ### Visualización del modelo condicionando a cc obtenido en m1 proyectando datos y modelo sobre el plano z=cc*x (el modelo pasa a ser la curva azul representada en el gráfico anterior. dv = x + cc * z , llamada densidad virtual > cc <- coef(m1)[3]; > dv <- x + cc*z > > + + x11() plot( dv, biomasa, ylim=c(0,25), xlab="densidad virtual (x+c*z)", ylab="biomasa del biotopo sensible", main="biomasa vs. densidad virtual", cex.main=0.9 ) > fdv <- function(x){ aa / (1 + bb * x) } > curve( fdv, add=T, col="blue", lwd=2 ) 15 10 5 0 biomasa del biotopo sensible 20 25 biomasa vs. densidad virtual 0 20 40 60 80 100 120 densidad virtual (x+c*z) 5