File: sparse.model.matrix.Rd

package info (click to toggle)
rmatrix 1.7-5-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 12,156 kB
  • sloc: ansic: 97,207; makefile: 280; sh: 165
file content (146 lines) | stat: -rw-r--r-- 6,491 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
\name{sparse.model.matrix}
\title{Construct Sparse Design / Model Matrices}
%
\keyword{array}
\keyword{models}
\keyword{utilities}
%
\alias{sparse.model.matrix}
\alias{fac2sparse}
\alias{fac2Sparse}
%
\description{Construct a sparse model or \dQuote{design} matrix,
  from a formula and data frame (\code{sparse.model.matrix}) or a single
  factor (\code{fac2sparse}).

  The \code{fac2[Ss]parse()} functions are utilities, also used
  internally in the principal user level function
  \code{sparse.model.matrix()}.
}
\usage{
sparse.model.matrix(object, data = environment(object),
		    contrasts.arg = NULL, xlev = NULL, transpose = FALSE,
		    drop.unused.levels = FALSE, row.names = TRUE,
		    sep = "", verbose = FALSE, \dots)

fac2sparse(from, to = c("d", "l", "n"),
	   drop.unused.levels = TRUE, repr = c("C", "R", "T"), giveCsparse)
fac2Sparse(from, to = c("d", "l", "n"),
	   drop.unused.levels = TRUE, repr = c("C", "R", "T"), giveCsparse,
	   factorPatt12, contrasts.arg = NULL)
}
\arguments{
  \item{object}{an object of an appropriate class.  For the default
    method, a model formula or terms object.}
  \item{data}{a data frame created with \code{\link{model.frame}}.  If
    another sort of object, \code{model.frame} is called first.}
  \item{contrasts.arg}{\describe{
      \item{for \code{sparse.model.matrix()}:}{A list, whose entries are
	contrasts suitable for input to the \code{\link{contrasts}}
	replacement function and whose names are the names of columns
	of \code{data} containing \code{\link{factor}}s.}
      \item{for \code{fac2Sparse()}:}{character string or \code{NULL} or
	(coercable to) \code{"\linkS4class{sparseMatrix}"}, specifying the
	contrasts to be applied to the factor levels.}
  }}
  \item{xlev}{to be used as argument of \code{\link{model.frame}} if
    \code{data} has no \code{"terms"} attribute.}
  \item{transpose}{logical indicating if the \emph{transpose} should be
    returned; if the transposed is used anyway, setting \code{transpose = TRUE}
    is more efficient.}
  \item{drop.unused.levels}{should factors have unused levels dropped?
    The default for \code{sparse.model.matrix} has been changed to
    \code{FALSE}, 2010-07, for compatibility with \R's standard (dense)
    \code{\link{model.matrix}()}.}
  \item{row.names}{logical indicating if row names should be used.}
  \item{sep}{\code{\link{character}} string passed to \code{\link{paste}()}
    when constructing column names from the variable name and its levels.}
  \item{verbose}{logical or integer indicating if (and how much)
    progress output should be printed.}
  \item{\dots}{further arguments passed to or from other methods.}
  \item{from}{(for \code{fac2sparse()}:) a \code{\link{factor}}.}
  \item{to}{a character indicating the \dQuote{kind} of sparse matrix to
    be returned.  The default, \code{"d"} is for \code{\link{double}}.}
  \item{giveCsparse}{\bold{deprecated}, replaced with \code{repr}; logical indicating if
    the result must be a \code{\linkS4class{CsparseMatrix}}.}
  \item{repr}{\code{\link{character}} string, one of \code{"C"},
    \code{"T"}, or \code{"R"}, specifying the sparse \emph{repr}esentation to
    be used for the result, i.e., one from the super classes
    \code{\linkS4class{CsparseMatrix}}, \code{\linkS4class{TsparseMatrix}}, or
    \code{\linkS4class{RsparseMatrix}}.}
  \item{factorPatt12}{logical vector, say \code{fp}, of length two;
    when \code{fp[1]} is true, return \dQuote{contrasted} \code{t(X)};
    when \code{fp[2]} is true, the original (\dQuote{dummy})
    \code{t(X)}, i.e, the result of \code{\link{fac2sparse}()}.}
}
\value{
  a sparse matrix, extending \code{\linkS4class{CsparseMatrix}} (for
  \code{fac2sparse()} if \code{repr = "C"} as per default; a
  \code{\linkS4class{TsparseMatrix}} or \code{\linkS4class{RsparseMatrix}}, otherwise).

  For \code{fac2Sparse()}, a \code{\link{list}} of length two, both
  components with the corresponding transposed model matrix, where the
  corresponding \code{factorPatt12} is true.
  
  \code{fac2sparse()}, the basic workhorse of
  \code{sparse.model.matrix()}, returns the \emph{transpose}
  (\code{\link{t}}) of the model matrix.
}
\note{
  \code{model.Matrix(sparse = TRUE)} from package \CRANpkg{MatrixModels}
  may be nowadays be preferable to \code{sparse.model.matrix},
  as \code{model.Matrix} returns an object of class \code{modelMatrix}
  with additional slots \code{assign} and \code{contrasts} relating to
  the model variables.
}
\author{Doug Bates and Martin Maechler, with initial suggestions from Tim
  Hesterberg.
}
\seealso{
  \code{\link{model.matrix}} in package \pkg{stats}, part of base \R{}.
  
  \code{model.Matrix} in package \CRANpkg{MatrixModels}; see \sQuote{Note}.

  \code{as(f, "sparseMatrix")} (see \code{coerce(from = "factor", ..)}
  in the class doc \linkS4class{sparseMatrix}) produces the
  \emph{transposed} sparse model matrix for a single factor \code{f}
  (and \emph{no} contrasts).
}
\examples{
\dontshow{ % for R_DEFAULT_PACKAGES=NULL
library(stats, pos = "package:base", verbose = FALSE)
}
dd <- data.frame(a = gl(3,4), b = gl(4,1,12))# balanced 2-way
options("contrasts") # the default:  "contr.treatment"
sparse.model.matrix(~ a + b, dd)
sparse.model.matrix(~ -1+ a + b, dd)# no intercept --> even sparser
sparse.model.matrix(~ a + b, dd, contrasts = list(a="contr.sum"))
sparse.model.matrix(~ a + b, dd, contrasts = list(b="contr.SAS"))

## Sparse method is equivalent to the traditional one :
stopifnot(all(sparse.model.matrix(~    a + b, dd) ==
	          Matrix(model.matrix(~    a + b, dd), sparse=TRUE)),
	      all(sparse.model.matrix(~0 + a + b, dd) ==
	          Matrix(model.matrix(~0 + a + b, dd), sparse=TRUE)))
%% many more and tougher examples ---> ../tests/spModel.matrix.R

(ff <- gl(3,4,, c("X","Y", "Z")))
fac2sparse(ff) #  3 x 12 sparse Matrix of class "dgCMatrix"
##
##  X  1 1 1 1 . . . . . . . .
##  Y  . . . . 1 1 1 1 . . . .
##  Z  . . . . . . . . 1 1 1 1

## can also be computed via sparse.model.matrix():
f30 <- gl(3,0    )
f12 <- gl(3,0, 12)
stopifnot(
  all.equal(t( fac2sparse(ff) ),
	    sparse.model.matrix(~ 0+ff),
	    tolerance = 0, check.attributes=FALSE),
  is(M <- fac2sparse(f30, drop= TRUE),"CsparseMatrix"), dim(M) == c(0, 0),
  is(M <- fac2sparse(f30, drop=FALSE),"CsparseMatrix"), dim(M) == c(3, 0),
  is(M <- fac2sparse(f12, drop= TRUE),"CsparseMatrix"), dim(M) == c(0,12),
  is(M <- fac2sparse(f12, drop=FALSE),"CsparseMatrix"), dim(M) == c(3,12)
 )
}