Am trying to fit a simple NL model to determine Economical Optimum Nitrogen Rates.
The segmented (quadratic + plateau) model only works with some y's, in some cases I get a "singular gradient" error.
I'll appreciate any ideas in how to solve the singular gradient error.
Thanks,
Jose
# The following code works using yield2 in the nls model but not using yield.
# Economical constants, nitrogen price in dollars per lb and corn price in dollars per bushel
nprice <- 0.17
cprice <- 2.25
ratio <- nprice/cprice
# Example data,
nrate <- c(0,60,90,120,150,180) yield2 <- c(161.7,187.1,188.5,196.6,196.0,196.5) yield <- c(163.4,178.1,179.6,178.2,184.4,184.5)
data.1 <- data.frame(nrate = nrate, yield = yield) plot(data.1)
qp.nls.fit<- nls(yield ~ (b0 + b1*nrate + b2*I(nrate^2))*(nrate <= x0)
+ (b0 + b1*x0 + b2*I(x0^2))*(nrate > x0),
data=data.1,
start=list(b0=125, b1=0.5, b2=-0.001, x0=135),
trace=T)
qp.nls.fit
summary(qp.nls.fit)
c.qp.fit <- coefficients(qp.nls.fit)
attach(as.list(c.qp.fit))yld.x0 <- b0 + b1*x0 + b2*x0^2 maxn <- -b1/(2*b2) eonr <- (ratio - b1)/(2*b2) eonr2 <- round(eonr, digits = 0) yldmaxn <- b0 + b1*maxn + b2*maxn^2 yldeonr <- b0 + b1*eonr + b2*eonr^2 yldeonr2 <- round(yldeonr, digits = 0)
plot(yield ~ nrate,
pch = 16,
main = "Quadratic plus Plateau Model",
xlab = expression(paste("Nitrogen rate [lbs ac" ^-1,"]")),
ylab = expression(paste("Corn yield [bu ac"^-1,"]")))
curve(predict(qp.nls.fit, data.frame(nrate = x)), add = T)
text(100,175, paste("EONR=",eonr2))
text(100,173, paste("Yield at EONR=",yldeonr2))
-- Jose A. Hernandez Ph.D. Candidate Precision Agriculture Center
Department of Soil, Water, and Climate University of Minnesota 1991 Upper Buford Circle St. Paul, MN 55108
Ph. (612) 625-0445, Fax. (612) 625-2208
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
