File: predict.plm.Rd

package info (click to toggle)
r-cran-plm 2.6-2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 6,032 kB
  • sloc: sh: 13; makefile: 4
file content (96 lines) | stat: -rw-r--r-- 4,154 bytes parent folder | download | duplicates (2)
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
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/tool_methods.R
\name{predict.plm}
\alias{predict.plm}
\title{Model Prediction for plm Objects}
\usage{
\method{predict}{plm}(
  object,
  newdata = NULL,
  na.fill = !inherits(newdata, "pdata.frame"),
  ...
)
}
\arguments{
\item{object}{An object of class \code{"plm"},}

\item{newdata}{An optional pdata.frame in which to look for variables to be
used for prediction. If \code{NULL}, the fitted values are returned.
For fixed effects models, supplying a pdata.frame is recommended.}

\item{na.fill}{A logical, only relevant if \code{object} is a pdata.frame, indicating
whether for any supplied out-of-sample indexes (individual, time,
combination of both), the missing fixed effect estimate is filled
with the weighted mean of the model's present fixed effect estimates
or not.}

\item{\dots}{further arguments.}
}
\value{
A numeric (or a pseries if \code{newdata} is a pdata.frame) carrying the
predicted values with length equal to the number of rows as the data
supplied in \code{newdata} and with names the row names of \code{newdata} or, if
\code{newdata = NULL}, the fitted values the original model given in \code{object}.
}
\description{
Predicted values of response based on plm models.
}
\details{
\code{predict}calculates predicted values by evaluating the regression function of
a plm model for \code{newdata} or, if \code{newdata = NULL}, it returns the fitted values
the plm model.

The fixed effects (within) model is somewhat special in prediction as it has
fixed effects estimated per individual, time period (one-way) or both (two-ways
model) which should to be respected when predicting values relating to these
fixed effects in the model: To do so, it is recommended to supply a pdata.frame
(and not a plain data.frame) in \code{newdata} as it describes the relationship
between the data supplied to the individual. and/or time periods. In case
the \code{newdata}ยด's pdata.frame has out-of-sample data (data contains individuals
and/or time periods not contained in the original model), it is not clear
how values are to be predicted and the result will contain \code{NA}
values for these out-of-sample data. Argument \code{na.fill} can be set to \code{TRUE}
to apply the original model's weighted mean of fixed effects for the
out-of-sample data to derive a prediction.

If a plain data.frame is given in \code{newdata} for a fixed effects model, the
weighted mean is used for all fixed effects as \code{newdata} for prediction as a
plain data.frame cannot describe any relation to individuals/time periods
(\code{na.fill} is automatically set to \code{TRUE} and the function warns).

See also \strong{Examples}.
}
\examples{
library(plm)
data("Grunfeld", package = "plm")

# fit a fixed effect model
fit.fe <- plm(inv ~ value + capital, data = Grunfeld, model = "within")

# generate 55 new observations of three firms used for prediction:
#  * firm 1 with years 1935:1964 (has out-of-sample years 1955:1964), 
#  * firm 2 with years 1935:1949 (all in sample),
#  * firm 11 with years 1935:1944 (firm 11 is out-of-sample)
set.seed(42L)

new.value2   <- runif(55, min = min(Grunfeld$value),   max = max(Grunfeld$value))
new.capital2 <- runif(55, min = min(Grunfeld$capital), max = max(Grunfeld$capital))

newdata <- data.frame(firm = c(rep(1, 30), rep(2, 15), rep(11, 10)),
                      year = c(1935:(1935+29), 1935:(1935+14), 1935:(1935+9)),
                      value = new.value2, capital = new.capital2)
# make pdata.frame
newdata.p <- pdata.frame(newdata, index = c("firm", "year"))

## predict from fixed effect model with new data as pdata.frame
predict(fit.fe, newdata = newdata.p)

## set na.fill = TRUE to have the weighted mean used to for fixed effects -> no NA values
predict(fit.fe, newdata = newdata.p, na.fill = TRUE)

## predict with plain data.frame from fixed effect model: uses mean fixed effects 
## for prediction and, thus, yields different result with a warning
predict(fit.fe, newdata = newdata)

}
\keyword{regression}