Skip to Content

faremalm2 {nonparaeff}

Linear Programming for the Malmquist Productivity Growth Index


Calculate productivity growth index under the DEA framework.


faremalm2(dat = NULL, noutput = 1, id = "id", year = "year")


A data frame to be evaluated. The format of this data frame is data.frame(id, year, outputs, inputs). This data frame should have a balanced panel data form.
The number of outputs.
A column name for the producer index.
A column name for the time index.


The Malmquist productivity growth index is calculated. For model specification, take a look at Fare et al. (1994).


A data frame with ( id: the id index of the original data. time: the time index of the original data. y's: original outputs x's: original inputs Dt2t2: D^{t+1} (x^{t+1}, y^{t+1}) Dtt2: D^{t} (x^{t+1}, y^{t+1}) Dt2t: D^{t+1} (x^t, y^t) ec: efficiency change tc: technical change pc: productivity change


Cooper, W., Seiford, L. and Tone, K. (2007). Data envelopment analysis: a comprehensive text with models, applications, references and DEA-solver software (2nd ed.). Springer Verlag, New York.

Fare, R., Grosskopf, S., Norris, M. and Zhang, Z. (1994). Productivity growth, technical progress and efficiency change in industrialized countries. American Economic Review, 84(1):66-83.

Lee, J. and Oh, D. (forthcoming). Efficiency Analysis: Data Envelopment Analysis. Press (in Korean).

See Also



malm.dat <- data.frame(id = rep(LETTERS[1:3], 3),
       time = rep(1:3, each = 3),
                       y = c(1, 2, 2, 3, 2, 8, 3, 2, 5),
                       x = c(2, 3, 7, 3, 5, 6, 8, 9, 6))
malm.re1 <- faremalm2(malm.dat, noutput = 1, id = "id", year = "time")
## Malmquist productivity growth index of OECD countries
library(pwt)       ## Use Penn World Table
my.dat <- pwt5.6    
my.oecd.ctry <- c("AUS", "AUT", "BEL", "CAN", "CHE", "DNK", "ESP",
                    "FIN", "FRA", "GBR", "GER", "GRC", "IRL", "ISL",
                    "ITA", "JPN", "KOR", "LUX", "MEX", "NLD", "NOR",
                    "NZL", "PRT", "SWE", "TUR", "USA", "DEU")
my.dat <- my.dat[my.dat$wbcode %in% my.oecd.ctry,]
my.dat <- my.dat[my.dat$year %in% 1980:1990,]
my.dat$rgdpl <- as.numeric(my.dat$rgdpl) ## GDP per capita
my.dat$pop <- as.numeric(my.dat$pop) ## total population (1000)
my.dat$rgdpwok <- as.numeric(my.dat$rgdpwok) ## GDP per labor
my.dat$kapw <- as.numeric(my.dat$kapw)  ## Capital stock per labor
my.dat$gdp <- my.dat$rgdpl * my.dat$pop ## Total GDP of a country
my.dat$labor <- with(my.dat, gdp/rgdpwok) ## Total labor force
my.dat$capital <- with(my.dat, kapw * labor) ## Toal capital stock
oecd <- my.dat[, c("wbcode", "year", "gdp", "labor", "capital")] 
re.oecd <- faremalm2(dat = oecd, noutput = 1, id = "wbcode", year =
## productivity growth for each country
pc.c <- tapply(re.oecd$pc, re.oecd$wbcode, geometric.mean)
## a trend of productivity growth of OECD countries
pc.y <- tapply(re.oecd$pc, re.oecd$year, geometric.mean)
## efficiency change for each country
ec.c <- tapply(re.oecd$ec, re.oecd$wbcode, geometric.mean)
## a trend of efficiency change of OECD countries
ec.y <- tapply(re.oecd$ec, re.oecd$year, geometric.mean)


Dong-hyun Oh,

Documentation reproduced from package nonparaeff, version 0.5-8. License: GPL (>= 2)