This function reports unbalancedness measures for panel data as defined in Ahrens and Pincus (1981) and Baltagi et al. (2001) .

punbalancedness(x, ...)

# S3 method for class 'pdata.frame'
punbalancedness(x, ...)

# S3 method for class 'data.frame'
punbalancedness(x, index = NULL, ...)

# S3 method for class 'panelmodel'
punbalancedness(x, ...)

Arguments

x

a panelmodel, a data.frame, or a pdata.frame object,

...

further arguments.

index

only relevant for data.frame interface, for details see pdata.frame(),

Value

A named numeric containing either two or three entries, depending on the panel structure inputted:

  • For the two-dimensional panel structure, the entries are called gamma and nu,

  • For a nested panel structure, the entries are called c1, c2, c3.

Details

punbalancedness returns measures for the unbalancedness of a panel data set.

  • For two-dimensional data:
    The two measures of Ahrens and Pincus (1981) are calculated, called "gamma" (\(\gamma\)) and "nu" (\(\nu\)).

If the panel data are balanced, both measures equal 1. The more "unbalanced" the panel data, the lower the measures (but > 0). The upper and lower bounds as given in Ahrens and Pincus (1981) are:
\(0 < \gamma, \nu \le 1\), and for \(\nu\) more precisely \(\frac{1}{n} < \nu \le 1\), with \(n\) being the number of individuals (as in pdim(x)$nT$n).

  • For nested panel data (meaning including a grouping variable):
    The extension of the above measures by Baltagi et al. (2001) , p. 368, are calculated:

    • c1: measure of subgroup (individual) unbalancedness,

    • c2: measure of time unbalancedness,

    • c3: measure of group unbalancedness due to each group size.

Values are 1 if the data are balanced and become smaller as the data become more unbalanced.

An application of the measure "gamma" is found in e. g. Baltagi et al. (2001) , pp. 488-491, and Baltagi and Chang (1994) , pp. 78–87, where it is used to measure the unbalancedness of various unbalanced data sets used for Monte Carlo simulation studies. Measures c1, c2, c3 are used for similar purposes in Baltagi et al. (2001) .

In the two-dimensional case, punbalancedness uses output of pdim() to calculate the two unbalancedness measures, so inputs to punbalancedness can be whatever pdim works on. pdim returns detailed information about the number of individuals and time observations (see pdim()).

Note

Calling punbalancedness on an estimated panelmodel object and on the corresponding (p)data.frame used for this estimation does not necessarily yield the same result (true also for pdim). When called on an estimated panelmodel, the number of observations (individual, time) actually used for model estimation are taken into account. When called on a (p)data.frame, the rows in the (p)data.frame are considered, disregarding any NA values in the dependent or independent variable(s) which would be dropped during model estimation.

References

Ahrens H, Pincus R (1981). “On Two Measures of Unbalancedness in a One-Way Model and Their Relation to Efficiency.” Biometrical Journal, 23(3), 227-235. doi:10.1002/bimj.4710230302 .

Baltagi BH, Chang YJ (1994). “Incomplete panels: a comparative study of alternative estimators for the unbalanced one-way error component regression model.” Journal of Econometrics, 62, 67-89.

Baltagi BH, Song SH, Jung BC (2001). “The unbalanced nested error component regression model.” Journal of Econometrics, 101, 357-381.

Baltagi BH, Song SH, Jung BC (2002). “A comparative study of alternative estimators for the unbalanced two-way error component regression model.” The Econometrics Journal, 5(2), 480–493. ISSN 13684221, 1368423X.

Author

Kevin Tappe

Examples


# Grunfeld is a balanced panel, Hedonic is an unbalanced panel
data(list=c("Grunfeld", "Hedonic"), package="plm")

# Grunfeld has individual and time index in first two columns
punbalancedness(Grunfeld) # c(1,1) indicates balanced panel
#> gamma    nu 
#>     1     1 
pdim(Grunfeld)$balanced   # TRUE
#> [1] TRUE

# Hedonic has individual index in column "townid" (in last column)
punbalancedness(Hedonic, index="townid") # c(0.472, 0.519)
#>     gamma        nu 
#> 0.4715336 0.5188292 
pdim(Hedonic, index="townid")$balanced   # FALSE
#> [1] FALSE

# punbalancedness on estimated models
plm_mod_pool <- plm(inv ~ value + capital, data = Grunfeld)
punbalancedness(plm_mod_pool)
#> gamma    nu 
#>     1     1 

plm_mod_fe <- plm(inv ~ value + capital, data = Grunfeld[1:99, ], model = "within")
punbalancedness(plm_mod_fe)
#>     gamma        nu 
#> 0.9995791 0.9995920 

# replicate results for panel data design no. 1 in Ahrens/Pincus (1981), p. 234
ind_d1  <- c(1,1,1,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5)
time_d1 <- c(1,2,3,1,2,3,1,2,3,4,5,1,2,3,4,5,6,7,1,2,3,4,5,6,7)
df_d1 <- data.frame(individual = ind_d1, time = time_d1)
punbalancedness(df_d1) # c(0.868, 0.887)
#>     gamma        nu 
#> 0.8677686 0.8865248 

# example for a nested panel structure with a third index variable
# specifying a group (states are grouped by region) and without grouping
data("Produc", package = "plm")
punbalancedness(Produc, index = c("state", "year", "region"))
#>        c1        c2        c3 
#> 0.8760816 1.0000000 0.8760816 
punbalancedness(Produc, index = c("state", "year")) 
#> gamma    nu 
#>     1     1