Learn R Programming

agridat (version 1.5)

digby.jointregression: Multi-environment trial illustrating joint regression

Description

Yield of 10 spring wheat varieties for 17 locations in 1976.

Usage

data(digby.jointregression)

Arguments

source

Digby, P.G.N. (1979). Modified joint regression analysis for incomplete variety x environment data. Journal of Agricultural Science, 93, 81-86.

Details

Yield of 10 spring wheat varieties for 17 locations in 1976. Used to illustrate modified joint regression.

References

Hans-Pieter Piepho, 1997. Analyzing Genotype-Environment Data by Mixed-Models with Multiplicative Terms. Biometrics, 53, 761-766. RJOINT procedure in GenStat. http://www.vsni.co.uk/software/genstat/htmlhelp/server/RJOINT.htm

Examples

Run this code
dat <- digby.jointregression

# Simple gen means, ignoring unbalanced data
round(tapply(dat$yield, dat$gen, mean),3)

n.gen <- nlevels(dat$gen)
n.env <- nlevels(dat$env)

# Estimate theta (env eff)
m0 <- lm(yield ~ -1 + env + gen, dat)
thetas <- coef(m0)[1:n.env]
thetas <- thetas-mean(thetas) # center env effects
# Add env effects to the data
dat$theta <- thetas[match(paste("env",dat$env,sep=""), names(thetas))]

# Initialize beta (gen slopes) at 1
betas <- rep(1, n.gen)

done <- FALSE
while(!done){

  betas0 <- betas
  
  # M1: Fix thetas (env effects), estimate beta (gen slope)
  m1 <- lm(yield ~ -1 + gen + gen:theta, data=dat)
  betas <- coef(m1)[-c(1:n.gen)]
  dat$beta <- betas[match(paste("gen",dat$gen,":theta",sep=""), names(betas))]
  # print(betas)
  
  # M2: Fix betas (gen slopes), estimate theta (env slope)
  m2 <- lm(yield ~ env:beta + gen -1, data=dat)
  thetas <- coef(m2)[-c(1:n.gen)]
  thetas[is.na(thetas)] <- 0  # Change last coefficient from NA to 0
  dat$theta <- thetas[match(paste("env",dat$env,":beta",sep=""), names(thetas))]
  print(thetas)

  # Check convergence
  chg <- sum(((betas-betas0)/betas0)^2)
  cat("Relative change in betas",chg,"")
  if(chg < .0001) done <- TRUE
  
}

# Dibgy Table 2, modified joint regression

round(betas,3)
# genG01 genG02 genG03 genG04 genG05 genG06 genG07 genG08 genG09 genG10 
#  0.953  0.739  1.082  1.024  1.142  0.877 1.089  0.914  1.196  0.947 

round(thetas,3)+1.164-.515 # re-parameterize to match Digby
# envE01 envE02 envE03 envE04 envE05 envE06 envE07 envE08 envE09 envE10 
# -0.515 -0.578 -0.990 -1.186  1.811  1.696 -1.096  0.046  0.057  0.825 
# envE11 envE12 envE13 envE14 envE15 envE16 envE17 
# -0.576  1.568 -0.779 -0.692  0.836 -1.080  0.649

Run the code above in your browser using DataLab