psmat efficiently expands a panel-vector or 'indexed_series' ('pseries') into a matrix. If a data frame or 'indexed_frame' ('pdata.frame') is passed, psmat returns a 3D array or a list of matrices.
psmat(x,...)## Default S3 method:psmat(x, g, t =NULL, transpose =FALSE, fill =NULL,...)## S3 method for class 'data.frame'psmat(x, by, t =NULL, cols =NULL, transpose =FALSE, fill =NULL, array =TRUE,...)# Methods for indexed data / compatibility with plm:## S3 method for class 'pseries'psmat(x, transpose =FALSE, fill =NULL, drop.index.levels ="none",...)## S3 method for class 'pdata.frame'psmat(x, cols =NULL, transpose =FALSE, fill =NULL, array =TRUE, drop.index.levels ="none",...)## S3 method for class 'psmat'plot(x, legend =FALSE, colours = legend, labs =NULL, grid =FALSE,...)
Arguments
x: a vector, indexed series 'indexed_series' ('pseries'), data frame or 'indexed_frame' ('pdata.frame').
g: a factor, GRP object, atomic vector (internally converted to factor) or a list of vectors / factors (internally converted to a GRP object) used to group x. If the panel is balanced an integer indicating the number of groups can also be supplied. See Examples.
by: data.frame method: Same input as g, but also allows one- or two-sided formulas using the variables in x, i.e. ~ idvar or var1 + var2 ~ idvar1 + idvar2.
t: same inputs as g/by, to indicate the time-variable(s) or second identifier(s). g and t together should fully identify the panel. If t = NULL, the data is assumed sorted and seq_col is used to generate rownames for the output matrix.
cols: data.frame method: Select columns using a function, column names, indices or a logical vector. Note: cols is ignored if a two-sided formula is passed to by.
transpose: logical. TRUE generates the matrix such that g/by -> columns, t -> rows. Default is g/by -> rows, t -> columns.
fill: element to fill empty slots of matrix / array if panel is unbalanced. NULL will generate a NA of the right type.
array: data.frame / pdata.frame methods: logical. TRUE returns a 3D array (if just one column is selected a matrix is returned). FALSE returns a list of matrices.
drop.index.levels: character. Either "id", "time", "all" or "none". See indexing .
...: arguments to be passed to or from other methods, or for the plot method additional arguments passed to ts.plot.
legend: logical. Automatically create a legend of panel-groups.
colours: either TRUE to automatically colour by panel-groups using rainbow or a character vector of colours matching the number of panel-groups (series).
labs: character. Provide a character-vector of variable labels / series titles when plotting an array.
grid: logical. Calls grid to draw gridlines on the plot.
Details
If n > 2 index variables are attached to an indexed series or frame, the first n-1 variables in the index are interacted.
Returns
A matrix or 3D array containing the data in x, where by default the rows constitute the groups-ids (g/by) and the columns the time variable or individual ids (t). 3D arrays contain the variables in the 3rd dimension. The objects have a class 'psmat', and also a 'transpose' attribute indicating whether transpose = TRUE.
Note
The pdata.frame method only works for properly subsetted objects of class 'pdata.frame'. A list of 'pseries' won't work. There also exist simple aperm and [ (subset) methods for 'psmat' objects. These differ from the default methods only by keeping the class and the 'transpose' attribute.
See Also
Time Series and Panel Series , Collapse Overview
Examples
## World Development Panel Datahead(wlddev)# View dataqsu(wlddev, pid =~ iso3c, cols =9:12, vlabels =TRUE)# Sumarizing datastr(psmat(wlddev$PCGDP, wlddev$iso3c, wlddev$year))# Generating matrix of GDPr <- psmat(wlddev, PCGDP ~ iso3c,~ year)# Same thing using data.frame methodplot(r, main = vlabels(wlddev)[9], xlab ="Year")# Plot the matrixstr(r)# See srructurestr(psmat(wlddev$PCGDP, wlddev$iso3c))# The Data is sorted, could omit tstr(psmat(wlddev$PCGDP,216))# This panel is also balanced, so# ..indicating the number of groups would be sufficient to obtain a matrixar <- psmat(wlddev,~ iso3c,~ year,9:12)# Get array of transposed matricesstr(ar)plot(ar)plot(ar, legend =TRUE)plot(psmat(collap(wlddev,~region+year, cols =9:12),# More legible and fancy plot~region,~year), legend =TRUE, labs = vlabels(wlddev)[9:12])psml <- psmat(wlddev,~ iso3c,~ year,9:12, array =FALSE)# This gives list of ps-matriceshead(unlist2d(psml,"Variable","Country", id.factor =TRUE),2)# Using unlist2d, can generate DF## Indexing simplifies thingswldi <- findex_by(wlddev, iso3c, year)# Creating an indexed framePCGDP <- wldi$PCGDP # An indexed_series of GDP per Capitahead(psmat(PCGDP),2)# Same as above, more parsimoniousplot(psmat(PCGDP))plot(psmat(wldi[9:12]))plot(psmat(G(wldi[9:12])))# Here plotting panel-growth rates