No momento atual (versão 1.2-10), parece que o caso não balanceado não é suportado. Analisei o código e a linha final de preparação de dados (não importa qual seja seu argumento inicial) é a seguinte:
object <- as.data.frame(split(object, id))
Se você passar no painel desequilibrado, essa linha o equilibrará repetindo os mesmos valores. Se o seu painel desequilibrado tiver séries temporais com comprimentos que se dividem, mesmo nenhuma mensagem de erro será produzida. Aqui está o exemplo da página mais pura:
> 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 painel é equilibrado:
> unique(table(Grunfeld$firm))
[1] 20
Desequilibrar:
> gr <- subset(Grunfeld, !(firm %in% c(3,4,5) & year <1945))
Comprimento de duas séries temporais diferentes no painel:
> unique(table(gr$firm))
[1] 20 10
Nenhuma mensagem de erro:
> 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
Outro painel desequilibrado:
> gr <- subset(Grunfeld, !(firm %in% c(3,4,5) & year <1940))
> unique(table(gr$firm))
[1] 20 15
E a mensagem de erro:
> 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