## testfile for preserving row.names in plm_object$model and as.data.frame
library(plm)
data("Grunfeld", package = "plm")
row.names(Grunfeld) # row.names are a sequence 1:nrow(Grunfeld) originally
gr <- plm(inv ~ value + capital, data=Grunfeld, model="pooling")
# same row.names and names as before estimation [i. e. original row.names are preserved]
if(!isTRUE(all.equal(row.names(gr$model), row.names(Grunfeld)))) stop("original rownames not preserved in plm_obj$model")
if(!isTRUE(all.equal(row.names(model.frame(gr)), row.names(Grunfeld)))) stop("original rownames not preserved in model.frame(plm_obj)")
if(!isTRUE(all.equal(names(pmodel.response(gr)), row.names(Grunfeld)))) stop("original rownames not preserved in names(pmodel.response(plm_obj))")
if(!isTRUE(all.equal(names(residuals(gr)), row.names(Grunfeld)))) stop("original rownames not preserved in names(residuals(plm_obj))")
# make a pdata.frame with "fancy" row.names (default)
# [i.e., combination of individual index and time index]
pGrunfeld <- pdata.frame(Grunfeld, index = c("firm", "year"))
row.names(pGrunfeld) # fancy row.names
gr_fancy_rownames <- plm(inv ~ value + capital, data=pGrunfeld, model="pooling")
# original row.names of pGrunfeld (i.e., "fancy" row.names) are preserved
if(!isTRUE(all.equal(row.names(gr_fancy_rownames$model), row.names(pGrunfeld)))) stop("original rownames not preserved in plm_obj$model")
if(!isTRUE(all.equal(row.names(model.frame(gr_fancy_rownames)), row.names(pGrunfeld)))) stop("original rownames not preserved in model.frame(plm_obj)")
if(!isTRUE(all.equal(names(pmodel.response(gr_fancy_rownames)), row.names(pGrunfeld)))) stop("original rownames not preserved in names(pmodel.response(plm_obj))")
if(!isTRUE(all.equal(names(residuals(gr_fancy_rownames)), row.names(pGrunfeld)))) stop("original rownames not preserved in names(residuals(plm_obj))")
# test with one missing observation
# set some arbitrary value to NA, so it is left out of the estimation
# data.frame
Grunfeld_1NA <- Grunfeld
line_no <- 6L
Grunfeld_1NA[line_no, "inv"] <- NA
gr_1NA <- plm(inv ~ value + capital, data=Grunfeld_1NA, model="pooling")
nobs(gr_1NA) # 199
nrow(Grunfeld_1NA) # 200
if(!isTRUE(all.equal(row.names(gr_1NA$model), row.names(Grunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in plm_obj$model")
if(!isTRUE(all.equal(row.names(model.frame(gr_1NA)), row.names(Grunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in model.frame(plm_obj)")
if(!isTRUE(all.equal(names(pmodel.response(gr_1NA)), row.names(Grunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in names(pmodel.response(plm_obj))")
if(!isTRUE(all.equal(names(residuals(gr_1NA)), row.names(Grunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in names(residuals(plm_obj))")
# Should be TRUE
# [199 + 1 == 200]
# [199 == 199]
if(!isTRUE(length(residuals(gr_1NA)) + 1 == length(row.names(Grunfeld_1NA)))) stop("length not correct")
if(!isTRUE(length(residuals(gr_1NA)) == length(row.names(Grunfeld_1NA[-line_no, ])))) stop("length not correct")
# pdata.frame
pGrunfeld_1NA <- pGrunfeld
line_no <- 6L
pGrunfeld_1NA[line_no, "inv"] <- NA
gr_fancy_rownames_1NA <- plm(inv ~ value + capital, data=pGrunfeld_1NA, model="pooling")
nobs(gr_fancy_rownames_1NA) # 199
nrow(pGrunfeld_1NA) # 200
if(!isTRUE(all.equal(row.names(gr_fancy_rownames_1NA$model), row.names(pGrunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in plm_obj$model")
if(!isTRUE(all.equal(row.names(model.frame(gr_fancy_rownames_1NA)), row.names(pGrunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in model.frame(plm_obj)")
if(!isTRUE(all.equal(names(pmodel.response(gr_fancy_rownames_1NA)), row.names(pGrunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in names(pmodel.response(plm_obj))")
if(!isTRUE(all.equal(names(residuals(gr_fancy_rownames_1NA)), row.names(pGrunfeld_1NA[-line_no, ])))) stop("original rownames not preserved in names(residuals(plm_obj))")
# Should be TRUE
# [199 + 1 == 200]
# [199 == 199]
if(!isTRUE(length(residuals(gr_fancy_rownames_1NA)) + 1 == length(row.names(pGrunfeld_1NA)))) stop("length not correct")
if(!isTRUE(length(residuals(gr_fancy_rownames_1NA)) == length(row.names(pGrunfeld_1NA[-line_no, ])))) stop("length not correct")
# test as.data.frame.pdata.frame
row.names(as.data.frame(pGrunfeld))
row.names(as.data.frame(pGrunfeld, row.names = NULL)) # NULL is default, same as FALSE
row.names(as.data.frame(pGrunfeld, row.names = FALSE)) # same as NULL
row.names(as.data.frame(pGrunfeld, row.names = TRUE)) # fancy row names are added
# test data.frame - argument row.names has a different meaning here compared to as.data.frame.pdata.frame
row.names(data.frame(pGrunfeld))
row.names(data.frame(pGrunfeld, row.names = c(1:nrow(pGrunfeld))))
# row.names(data.frame(pGrunfeld, row.names = TRUE)) # error due to diff. meaning
# row.names(data.frame(pGrunfeld, row.names = FALSE)) # error due to diff. meaning
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.