En el momento actual (versión 1.2-10) parece que el caso desequilibrado no es compatible. He mirado el código, y la línea final de preparación de datos (sin importar cuál sea su argumento inicial) es la siguiente:
object <- as.data.frame(split(object, id))
Si pasa el panel desequilibrado, esta línea lo equilibrará repitiendo los mismos valores. Si su panel no balanceado tiene series de tiempo con longitudes que se dividen entre sí, entonces ni siquiera se genera un mensaje de error. Aquí está el ejemplo de la página más purtest:
> data(Grunfeld)
> purtest(inv ~ 1, data = Grunfeld, index = "firm", pmax = 4, test = "madwu")
Maddala-Wu Unit-Root Test (ex. var. : Individual Intercepts )
data: inv ~ 1
chisq = 47.5818, df = 20, p-value = 0.0004868
alternative hypothesis: stationarity
Este panel está equilibrado:
> unique(table(Grunfeld$firm))
[1] 20
Desequilibrarlo:
> gr <- subset(Grunfeld, !(firm %in% c(3,4,5) & year <1945))
Dos series de tiempo diferentes en el panel:
> unique(table(gr$firm))
[1] 20 10
Sin mensaje de error:
> purtest(inv ~ 1, data = gr, index = "firm", pmax = 4, test = "madwu")
Maddala-Wu Unit-Root Test (ex. var. : Individual Intercepts )
data: inv ~ 1
chisq = 86.2132, df = 20, p-value = 3.379e-10
alternative hypothesis: stationarity
Otro panel desequilibrado:
> gr <- subset(Grunfeld, !(firm %in% c(3,4,5) & year <1940))
> unique(table(gr$firm))
[1] 20 15
Y el mensaje de error:
> purtest(inv ~ 1, data = gr, index = "firm", pmax = 4, test = "madwu")
Erreur dans data.frame(`1` = c(317.6, 391.8, 410.6, 257.7, 330.8, 461.2, :
arguments imply differing number of rows: 20, 15