## ----setup, message=FALSE---------------------------------------------------------------
library("knitr")
knitr::opts_chunk$set(fig.align="center", fig.width=6, fig.height=6)
options(width=90)

## ----gge--------------------------------------------------------------------------------
library(agridat)
data(yan.winterwheat)
dat1 <- yan.winterwheat

library(gge)
m1 <- gge(dat1, yield~gen*env, scale=FALSE)
biplot(m1, main="yan.winterwheat - GGE biplot",
       flip=c(1,0), origin=0, hull=TRUE)

## ---------------------------------------------------------------------------------------
m2 <- gge(dat1, yield~gen*env, scale=TRUE)
biplot(m2, main="yan.winterwheat - GGE biplot",
       flip=c(1,1), origin=0)

## ---------------------------------------------------------------------------------------
biplot(m2, main="yan.winterwheat - GGE biplot - PC 2 & 3",
       comps=c(2,3), flip=c(1,1), origin=0)

## ----mosaic-----------------------------------------------------------------------------
plot(m1, main="yan.winterwheat")

## ----ggb--------------------------------------------------------------------------------
library(agridat)
data(crossa.wheat)
dat2 <- crossa.wheat

# Define mega-environment groups of locations
dat2$eg <- ifelse(is.element(dat2$loc,
                             c("KN","NB","PA","BJ","IL","TC",
                               "JM","PI","AS","ID","SC","SS",
                               "SJ","MS","MG","MM")), "Grp1", "Grp2")

library(gge)
# Specify env.group as column in data frame
m3 <- gge(dat2, yield~gen*loc, env.group=eg, scale=FALSE)
biplot(m3, main="crossa.wheat - GGB biplot")

## ----eval=FALSE-------------------------------------------------------------------------
# library(agridat)
# library(reshape2)
# library(nipals)
# dat3 <- agridat::yan.winterwheat
# dat3 <- acast(dat3, gen~env, value.var="yield")
# dat3 <- scale(dat3, center=TRUE, scale=FALSE)
# Xsvd <- svd(dat3)
# Xnip <- nipals(dat3, center=FALSE, scale=FALSE)
# U <- Xsvd$u
# S <- diag(Xsvd$d)
# V <- Xsvd$v
# T <- Xnip$scores
# Lam <- diag(Xnip$eig)
# P <- Xnip$loadings

## ----eval=FALSE-------------------------------------------------------------------------
# (U %*% S)[ , 1:2]
# (T %*% Lam)[ , 1:2]

## ----eval=FALSE-------------------------------------------------------------------------
# V[ , 1:2]
# P[ , 1:2]

## ----eval=FALSE-------------------------------------------------------------------------
# U[ , 1:2]
# T[ , 1:2]

## ----eval=FALSE-------------------------------------------------------------------------
# (S %*% V)[ , 1:2]
# (Lam %*% P)[ , 1:2]

