if (FALSE) {
library(agridat)
data(cullis.earlygen)
dat <- cullis.earlygen
# Show field layout of checks. Cullis Table 1.
dat$check <- ifelse(dat$entry < 8, dat$entry, NA)
libs(desplot)
desplot(dat, check ~ col*row,
num=entry, cex=0.5, flip=TRUE, aspect=121/150, # true aspect
main="cullis.earlygen (yield)")
desplot(dat, yield ~ col*row,
num="check", cex=0.5, flip=TRUE, aspect=121/150, # true aspect
main="cullis.earlygen (yield)")
grays <- colorRampPalette(c("white","#252525"))
desplot(dat, weed ~ col*row,
at=0:6-0.5, col.regions=grays(7)[-1],
flip=TRUE, aspect=121/150, # true aspect
main="cullis.earlygen (weed)")
libs(lattice)
bwplot(yield ~ as.character(weed), dat,
horizontal=FALSE,
xlab="Weed score", main="cullis.earlygen")
# Moving Grid
libs(mvngGrAd)
shape <- list(c(1),
c(1),
c(1:4),
c(1:4))
# sketchGrid(10,10,20,20,shapeCross=shape, layers=1, excludeCenter=TRUE)
m0 <- movingGrid(rows=dat$row, columns=dat$col, obs=dat$yield,
shapeCross=shape, layers=NULL)
dat$mov.avg <- fitted(m0)
if(require("asreml", quietly=TRUE)) {
libs(asreml,lucid)
# Start with the standard AR1xAR1 analysis
dat <- transform(dat, xf=factor(col), yf=factor(row))
dat <- dat[order(dat$xf, dat$yf),]
m2 <- asreml(yield ~ weed, data=dat, random= ~gen,
resid = ~ ar1(xf):ar1(yf))
# Variogram suggests a polynomial trend
m3 <- update(m2, fixed= yield~weed+pol(col,-1))
# Now add a nugget variance
m4 <- update(m3, random= ~ gen + units)
lucid::vc(m4)
## effect component std.error z.ratio bound
## gen 73780 10420 7.1 P 0
## units 30440 8073 3.8 P 0.1
## xf:yf(R) 54730 10630 5.1 P 0
## xf:yf!xf!cor 0.38 0.115 3.3 U 0
## xf:yf!yf!cor 0.84 0.045 19 U 0
## # Predictions from models m3 and m4 are non-estimable. Why?
## # Use model m2 for predictions
## predict(m2, classify="gen")$pvals
## ## gen predicted.value std.error status
## ## 1 Banks 2723.534 93.14719 Estimable
## ## 2 Eno008 2981.056 162.85241 Estimable
## ## 3 Eno009 2978.008 161.57129 Estimable
## ## 4 Eno010 2821.399 153.96943 Estimable
## ## 5 Eno011 2991.612 161.53507 Estimable
## # Compare AR1 with Moving Grid
## dat$ar1 <- fitted(m2)
## head(dat[ , c('yield','ar1','mov.avg')])
## ## yield ar1 mg
## ## 1 2652 2467.980 2531.998
## ## 11 3394 3071.681 3052.160
## ## 21 3148 2826.188 2807.031
## ## 31 3426 3026.985 3183.649
## ## 41 3555 3070.102 3195.910
## ## 51 3453 3006.352 3510.511
## pairs(dat[ , c('yield','ar1','mg')])
}
}
Run the code above in your browser using DataLab