\HeaderA{fitPLM}{Fit a Probe Level Model to Affymetrix Genechip Data.}{fitPLM}
\keyword{manip}{fitPLM}
\begin{Description}\relax
This function converts an \code{\LinkA{AffyBatch}{AffyBatch}} into an
\code{\LinkA{PLMset}{PLMset}} by fitting a specified robust linear model to the
probe level data.
\end{Description}
\begin{Usage}
\begin{verbatim}
fitPLM(object,model=PM ~ -1 + probes +samples,
variable.type=c(default="factor"),
constraint.type=c(default="contr.treatment"),
subset=NULL,
background=TRUE, normalize=TRUE, background.method = "RMA.2",normalize.method = "quantile",background.param=list(),normalize.param=list(),output.param =
                 verify.output.param(), model.param =
                 verify.model.param(object, model),
                 verbosity.level=0)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{object}] an \code{\LinkA{AffyBatch}{AffyBatch}}
\item[\code{model}] A formula describing the model to fit. This is slightly
different from the standard method of specifying formulae in R. Read
the description below
\item[\code{variable.type}] a way to specify whether variables in the model
are factors or standard variables
\item[\code{constraint.type}] should factor variables sum to zero or have
first variable set to zero (endpoint constraint)
\item[\code{subset}] a vector with the names of probesets to be used. If NULL
then all probesets are used.
\item[\code{normalize}] logical value. If \code{TRUE} normalize data using
quantile normalization
\item[\code{background}] logical value. If \code{TRUE} background correct
using RMA background correction
\item[\code{background.method}] name of background method to use.
\item[\code{normalize.method}] name of normalization method to use.
\item[\code{background.param}] A list of parameters for background routines
\item[\code{normalize.param}] A list of parameters for normalization
routines
\item[\code{output.param}] A list of parameters controlling optional output
from the routine.
\item[\code{model.param}] A list of parameters controlling model procedure
\item[\code{verbosity.level}] An integer specifying how much to print
out. Higher values indicate more verbose. A value of 0 will print nothing
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
This function fits robust Probe Level linear Models to all the probesets in
an \code{\LinkA{AffyBatch}{AffyBatch}}. This is carried out on a probeset by
probeset basis. The user has quite a lot of control over which model
is used and what outputs are stored. For more details please read the vignette.
\end{Details}
\begin{Value}
An \code{\LinkA{PLMset}{PLMset}}
\end{Value}
\begin{Author}\relax
Ben Bolstad \email{bmb@bmbolstad.com}
\end{Author}
\begin{References}\relax
Bolstad, BM (2004) \emph{Low Level Analysis of High-density
Oligonucleotide Array Data: Background, Normalization and
Summarization}. PhD Dissertation. University of California,
Berkeley.
\end{References}
\begin{SeeAlso}\relax
\code{\LinkA{expresso}{expresso}},
\code{\LinkA{rma}{rma}}, \code{\LinkA{threestep}{threestep}}
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
if (require(affydata)) {
  data(Dilution)
  Pset <- fitPLM(Dilution, model=PM ~ -1 + probes + samples)
  se(Pset)[1:5,]

  image(Pset)
  NUSE(Pset) 

  #now lets try a wider class of models
  ## Not run: Pset <- fitPLM(Dilution,model=PM ~ -1 + probes +liver,normalize=FALSE,background=FALSE)
  ## Not run: coefs(Pset)[1:10,]

  ## Not run: Pset <- fitPLM(Dilution,model=PM ~ -1 + probes + liver + scanner,normalize=FALSE,background=FALSE)
  coefs(Pset)[1:10,]

  #try liver as a covariate
  logliver <- log2(c(20,20,10,10))
  ## Not run: Pset <- fitPLM(Dilution,model=PM~-1+probes+logliver+scanner,normalize=FALSE,background=FALSE,variable.type=c(logliver="covariate"))
  coefs(Pset)[1:10,]

  #try a different se.type
  ## Not run: Pset <- fitPLM(Dilution,model=PM~-1+probes+scanner,normalize=FALSE,background=FALSE,model.param=list(se.type=2))
  se(Pset)[1:10,]
}
\end{ExampleCode}
\end{Examples}

