[Gmm-commits] r17 - in pkg/gmm: . R inst/doc man

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Fri Jan 8 18:53:12 CET 2010


Author: chaussep
Date: 2010-01-08 18:53:12 +0100 (Fri, 08 Jan 2010)
New Revision: 17

Modified:
   pkg/gmm/DESCRIPTION
   pkg/gmm/NEWS
   pkg/gmm/R/gel.R
   pkg/gmm/R/getModel.R
   pkg/gmm/R/momentEstim.R
   pkg/gmm/R/specTest.R
   pkg/gmm/inst/doc/gmm_with_R.pdf
   pkg/gmm/inst/doc/gmm_with_R.rnw
   pkg/gmm/man/gel.Rd
   pkg/gmm/man/getLamb.Rd
   pkg/gmm/man/rho.Rd
Log:
GEL now uses the new structure 


Modified: pkg/gmm/DESCRIPTION
===================================================================
--- pkg/gmm/DESCRIPTION	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/DESCRIPTION	2010-01-08 17:53:12 UTC (rev 17)
@@ -1,6 +1,6 @@
 Package: gmm
-Version: 1.1-3
-Date: 2009-12-15
+Version: 1.3-0
+Date: 2010-01-08
 Title: Generalized Method of Moments and Generalized Empirical Likelihood
 Author: Pierre Chausse <pierre.chausse at uqam.ca>
 Maintainer: Pierre Chausse <pierre.chausse at uqam.ca>

Modified: pkg/gmm/NEWS
===================================================================
--- pkg/gmm/NEWS	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/NEWS	2010-01-08 17:53:12 UTC (rev 17)
@@ -1,3 +1,26 @@
+Changes in version 1.3-0
+
+  o The method "getModel", "momentEstim" is now used also for the gel procedure.
+  o The GEL procedure as been modified. For the case in which the option smooth=TRUE is used, 
+    the appropriate scaling parameters have been added following Smith(2004) in the estimation, the covariance matrix of the Lagrange 
+    multiplier and the tests of over-identifying restrictions. In this case, only the kernels Truncated and Bartlett are available. 
+    For the former, the optimal bandwidth of Andrews(91) for Bartlett is used and for the latter, it is the bandwidth proposed
+    for the Parzen. See Smith(2004) for more details. Also, the option vcov as been removed since it is irrelevant for GEL. By setting smooth to
+    FALSE, it is implied that the data are iid.     
+
+Changes in version 1.2-0
+
+The following modifications were suggested by the reviewers of JSS. These changes will not be noticed by users. They are intended to make it easier for 
+developpers to contribute. 
+
+  o The new method specTest computes the specification tests from objects created by "gmm" or "gel" 
+  o The structure of the package has been modified in order to make it more flexible. The changes include:
+         o The new method "getModel" prepares the estimation. It creates what is required by the method "momentEstim".
+         o The method "momentEstim" estimates the model defined by "getModel"
+         o The method "FinRes" finalizes the estimation when it is needed. For now, the method is used only by "gmm" to compute the final resutls.
+  o Some bugs are fixed  
+  o The Vignette has been modified a little and the errors in the manual corrected.
+
 Changes in version 1.1-0
 
 

Modified: pkg/gmm/R/gel.R
===================================================================
--- pkg/gmm/R/gel.R	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/R/gel.R	2010-01-08 17:53:12 UTC (rev 17)
@@ -11,12 +11,12 @@
 #  A copy of the GNU General Public License is available at
 #  http://www.r-project.org/Licenses/
 
-rho <- function(x, lamb, derive = 0, type = c("EL", "ET", "CUE"), drop = TRUE)
+rho <- function(x, lamb, derive = 0, type = c("EL", "ET", "CUE"), drop = TRUE, k = 1)
 	{
 
 	type <- match.arg(type)
 	lamb <- matrix(lamb, ncol = 1)
-	gml <- x%*%lamb
+	gml <- x%*%lamb*k
 	ch <- 0
 	if (derive == 0)
 		{
@@ -68,17 +68,18 @@
 	return(rhom)
 	}
 
-getLamb <- function(g, tet, x, type = c('EL', 'ET', 'CUE'), tol_lam = 1e-12, maxiterlam = 1000, tol_obj = 1e-7)
+getLamb <- function(g, tet, x, type = c('EL', 'ET', 'CUE'), tol_lam = 1e-12, maxiterlam = 1000, tol_obj = 1e-7, k = 1)
 	{
 	type <- match.arg(type)	
 	gt <- g(tet, x)
+
 	n <- nrow(gt)
 	tol_cond=1e-12
 	gb <- colMeans(gt)
 	khat <- crossprod(gt)/n
 	lamb0 <- -solve(khat,gb)
+
 	conv_mes <- "Normal convergence" 
-
 	singular <-0
 	crit <-1e30
 	crit0 <- crit
@@ -89,17 +90,18 @@
 	j <- 1
 	while ((crit > tol_lam*( 1 + sqrt( crossprod(lamb0) ) ) ) & (j <= maxiterlam))
 		{ 
-		rho2 <- as.numeric(rho(gt, lamb0, derive = 2, type = type)$rhomat)
-		rho1 <- as.numeric(rho(gt, lamb0, derive = 1, type = type)$rhomat)
+		rho2 <- as.numeric(rho(gt, lamb0, derive = 2, type = type, k = k)$rhomat)
+		rho1 <- as.numeric(rho(gt, lamb0, derive = 1, type = type, k = k)$rhomat)
 		gblam <- colMeans(rho1*gt)
 		klam <- crossprod(rho2*gt, gt)/n
 		chklam <- sum(abs(klam))
 		if (!is.null(gblam0))
 			dgblam <- crossprod(gblam) - crossprod(gblam0)
 		
-		if (is.na(chklam) | chklam == 0 | chklam == Inf |  dgblam > 0 | dgblam == Inf | is.na(dgblam) | dcrit < 0)
+		#if (is.na(chklam) | chklam == 0 | chklam == Inf |  dgblam > 0 | dgblam == Inf | is.na(dgblam) | dcrit < 0)
+		if (is.na(chklam) | chklam == 0 | chklam == Inf | dgblam == Inf | is.na(dgblam))
 			{
-			lamb1 <- rep(sqrt(1/n), length(lamb0))
+			lamb1 <- rep(0, length(lamb0))
 			crit <- 0
 			singular=2
 			conv_mes <- "The algorithm produced singular system,  NaN or Inf" 
@@ -109,12 +111,12 @@
 			if (rcond(klam) > tol_cond)
 				{
 				lamb1 <- lamb0 - solve(klam, gblam)
-				crit <- sqrt(crossprod(lamb0 - lamb1))
+                                crit <- sqrt(crossprod(lamb0 - lamb1))
 				lamb0 <- lamb1
 				}
 			else
 				{
-				lamb1 <- rep(sqrt(1/n) , length(lamb0))
+				lamb1 <- rep(0 , length(lamb0))
 				crit <- 0
 				singular <- 2
 				conv_mes <- "The algorithm produced singular system" 
@@ -126,11 +128,12 @@
 		crit0 <- crit
 		}
 	z <- list("lambda" = lamb1, singular = singular, conv_mes = conv_mes)
-	if (j > maxiterlam | max(abs(gblam)) > tol_obj)
+	if (j > maxiterlam)
 		{
 		singular <- 1
 		conv_mes <- "No convergence after 'maxiterlam' iterations"
-		z$singular <- singular		
+		z$singular <- singular
+                stop("Maxiterlam reached.\n Increase it, try other starting values \n or use the option optlam=\"numeric\".")		
 		}
 		z$obj <- crossprod(gblam)
 	return(z)
@@ -171,14 +174,13 @@
 	}
 
 
-gel <- function(g, x, tet0, gradv = NULL, smooth = FALSE, type = c("EL", "ET", "CUE", "ETEL"), vcov = c("HAC", "iid"), 
-                kernel = c("Bartlett", "Parzen", "Truncated", "Tukey-Hanning"), bw = bwAndrews2, approx = c("AR(1)", 
+gel <- function(g, x, tet0, gradv = NULL, smooth = FALSE, type = c("EL", "ET", "CUE", "ETEL"), 
+                kernel = c("Truncated", "Bartlett"), bw = bwAndrews2, approx = c("AR(1)", 
     		"ARMA(1,1)"), prewhite = 1, ar.method = "ols", tol_weights = 1e-7, tol_lam = 1e-9, tol_obj = 1e-9, 
-		tol_mom = 1e-9, maxiterlam = 1000, constraint = FALSE, optfct = c("optim", "optimize", "nlminb"), 
+		tol_mom = 1e-9, maxiterlam = 100, constraint = FALSE, optfct = c("optim", "optimize", "nlminb"), 
                 optlam = c("iter", "numeric"), model = TRUE, X = FALSE, Y = FALSE, TypeGel = "baseGel", ...)
 	{
 
-	vcov <- match.arg(vcov)
 	type <- match.arg(type)
 	optfct <- match.arg(optfct)
 	optlam <- match.arg(optlam)
@@ -186,10 +188,10 @@
 	approx <- match.arg(approx)
 	kernel <- match.arg(kernel)
 
-	all_args <- list(g = g, x = x, tet0 = tet0, gradv = gradv, smooth = smooth, type = type, vcov = vcov, 
+	all_args <- list(g = g, x = x, tet0 = tet0, gradv = gradv, smooth = smooth, type = type,
                 kernel = kernel, bw = bw, approx = approx, prewhite = prewhite, ar.method = ar.method, 
 		tol_weights = tol_weights, tol_lam = tol_lam, tol_obj = tol_obj, tol_mom = tol_mom, 
-		maxiterlam = maxiterlam, constraint = constraint, optfct = optfct, 
+		maxiterlam = maxiterlam, constraint = constraint, optfct = optfct, weights = weightsAndrews2,
                 optlam = optlam, model = model, X = X, Y = Y, TypeGel = TypeGel, call = match.call())
 
 	class(all_args)<-TypeGel
@@ -210,17 +212,18 @@
       }
     else
       x <- P$x
+
     if (P$optlam == "iter")
       {
-      lamblist <- getLamb(P$g, tet, x, type = P$typel, tol_lam = P$tol_lam, maxiterlam = P$maxiterlam, tol_obj = P$tol_obj)
+      lamblist <- getLamb(P$g, tet, x, type = P$typel, tol_lam = P$tol_lam, maxiterlam = P$maxiterlam, tol_obj = P$tol_obj, k = P$k1/P$k2)
       lamb <- lamblist$lambda
       gt <- P$g(tet, x)
-      pt <- -rho(gt, lamb, type = P$typet, derive = 1)$rhomat/nrow(gt)
+      pt <- -rho(gt, lamb, type = P$typet, derive = 1, k = P$k1/P$k2)$rhomat/nrow(gt)
       checkmom <- sum(as.numeric(pt)*gt)
       if (lamblist$singular == 0)		
-        p <- sum(rho(gt, lamb, type = P$typet)$rhomat) + abs(checkmom)/P$tol_mom
+        p <- sum(rho(gt, lamb, type = P$typet, k = P$k1/P$k2)$rhomat) + abs(checkmom)/P$tol_mom
       if (lamblist$singular == 1)		
-        p <- sum(rho(gt, lamb, type = P$typet)$rhomat) + abs(checkmom)/P$tol_mom + lamblist$obj/P$tol_mom
+        p <- sum(rho(gt, lamb, type = P$typet, k = P$k1/P$k2)$rhomat) + abs(checkmom)/P$tol_mom + lamblist$obj/P$tol_mom
       if (lamblist$singular == 2)		
         p <- 1e50*proc.time()[3]
       }
@@ -229,7 +232,7 @@
       gt <- P$g(tet, x)
       rhofct <- function(lamb)
         {
-        rhof <- -sum(rho(gt, lamb, type = P$typel)$rhomat)
+        rhof <- -sum(rho(gt, lamb, type = P$typel, k = P$k1/P$k2)$rhomat)
         return(rhof)
         }
       if (ncol(gt) > 1)
@@ -241,7 +244,7 @@
         rlamb$value <- rlamb$objective
         }
       lamb <- rlamb$par
-      pt <- -rho(gt, lamb, type = P$typet, derive = 1)$rhomat/nrow(gt)
+      pt <- -rho(gt, lamb, type = P$typet, derive = 1, k = P$k1/P$k2)$rhomat/nrow(gt)
       checkmom <- sum(as.numeric(pt)*gt)
       p <- -rlamb$value + (checkmom)^2/P$tol_mom + (sum(as.numeric(pt)) - 1)^2/P$tol_mom
       }

Modified: pkg/gmm/R/getModel.R
===================================================================
--- pkg/gmm/R/getModel.R	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/R/getModel.R	2010-01-08 17:53:12 UTC (rev 17)
@@ -127,26 +127,55 @@
     {
     clname <- paste(class(P), ".mod", sep = "")
     P$gform <- NULL
+    if (!is.function(object$gradv))
+      { 
+      P$gradv <- .Gf
+      P$gradvf <- FALSE
+      }
+    else
+      {
+      P$gradvf <- TRUE
+      }
+
     }
 
   if (P$smooth)
     {
+    if(P$kernel == "Truncated")
+        {
+        P$wkernel <- "Bartlett"
+        P$k1 <- 2
+        P$k2 <- 2
+        }
+    if(P$kernel == "Bartlett")
+        {
+        P$wkernel <- "Parzen"
+        P$k1 <- 1
+        P$k2 <- 2/3
+        }
     P$g1 <- P$g
     rgmm <- gmm(P$g, x, P$tet0, wmatrix = "ident")
 
-    if (is.function(P$weights))
-      P$w <- P$weights(P$g(rgmm$coefficients, x), kernel = P$kernel, bw = P$bw, prewhite = P$prewhite, 
+
+    P$bwVal <- P$bw(P$g(rgmm$coefficients, x), kernel = P$wkernel, prewhite = P$prewhite, 
+               ar.method = P$ar.method, approx = P$approx)
+    P$w <- P$weights(P$g(rgmm$coefficients, x), kernel = P$kernel, bw = P$bwVal, prewhite = P$prewhite, 
                ar.method = P$ar.method, approx = P$approx, tol = P$tol_weights)
-    else
-      P$w <- P$weights
 
-    P$sg <- function(thet, x, g1 = P$g1, w = P$w)
+    P$g <- function(thet, x, g1 = P$g1, w = P$w)
       {
       gf <- g1(thet, x)
-      gt <- smoothG(gf, weights = w)$smoothx 
+      gt <- smoothG(gf, weights = w)$smoothx
       return(gt)
       }
-    }	
+    }
+  else
+   {
+   P$k1 <- 1
+   P$k2 <- 1
+   P$w <- 1
+   P$bwVal <- 1
+   }	
   class(P) <- clname
   return(P)
   }

Modified: pkg/gmm/R/momentEstim.R
===================================================================
--- pkg/gmm/R/momentEstim.R	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/R/momentEstim.R	2010-01-08 17:53:12 UTC (rev 17)
@@ -454,8 +454,8 @@
 
   names(z$coefficients) <- paste("Theta[" ,1:k, "]", sep = "")
   z$x <- P$x
+  z$gradv <- P$gradv
   z$gt <- P$g(z$coefficients, P$x)
-  z$gradv <- P$gradv
   z$iid <- P$iid
   z$g <- P$g
  
@@ -463,7 +463,6 @@
   return(z)
   }
 
-
 momentEstim.baseGel.modFormula <- function(object, ...)
   {
   P <- object
@@ -493,7 +492,7 @@
 
   if (P$optlam == "iter")
     {
-    rlamb <- getLamb(P$g, res$par, x, type = P$typel, tol_lam = P$tol_lam, maxiterlam = P$maxiterlam, tol_obj = P$tol_obj)
+    rlamb <- getLamb(P$g, res$par, x, type = P$typel, tol_lam = P$tol_lam, maxiterlam = P$maxiterlam, tol_obj = P$tol_obj, k = P$k1/P$k2)
     z <- list(coefficients = res$par, lambda = rlamb$lam, conv_lambda = rlamb$conv_mes, conv_par = res$convergence)
     z$foc_lambda <- rlamb$obj
     }
@@ -503,19 +502,19 @@
     gt <- P$g(res$par, x)
     rhofct <- function(lamb)
       {
-      rhof <- -sum(rho(gt, lamb, type = P$typel)$rhomat)
+      rhof <- -sum(rho(gt, lamb, type = P$typel, k = P$k1/P$k2)$rhomat)
       return(rhof)
       }
     rlamb <- optim(rep(0, ncol(gt)), rhofct, control = list(maxit = 1000))
     z <- list(coefficients = res$par, conv_par = res$convergence, lambda = rlamb$par)
     z$conv_lambda = paste("Lambda by optim. Conv. code = ", rlamb$convergence, sep = "")
-    rho1 <- as.numeric(rho(gt, z$lambda, derive = 1, type = P$typel)$rhomat)
+    rho1 <- as.numeric(rho(gt, z$lambda, derive = 1, type = P$typel, k = P$k1/P$k2)$rhomat)
     z$foc_lambda <- crossprod(colMeans(rho1*gt))
     }
   z$type <- P$type
   z$gt <- P$g(z$coefficients, x)
-  rhom <- rho(z$gt, z$lambda, type = P$typet)
-  z$pt <- -rho(z$gt, z$lambda, type = P$typet, derive = 1)$rhomat/n
+  rhom <- rho(z$gt, z$lambda, type = P$typet, k = P$k1/P$k2)
+  z$pt <- -rho(z$gt, z$lambda, type = P$typet, derive = 1, k = P$k1/P$k2)$rhomat/n
   z$conv_moment <- colSums(as.numeric(z$pt)*z$gt)
   z$conv_pt <- sum(as.numeric(z$pt))
   z$objective <- sum(as.numeric(rhom$rhomat) - rho(1, 0, type = P$typet)$rhomat)/n
@@ -543,23 +542,20 @@
     names(z$badrho) <- "Number_of_bad_rho"
     }
 
-  if (!is.function(P$gradv)) 
-    G <- .Gf(z$coefficients, x, P$g)
-  else
-    G <- P$gradv(z$coefficients, x)
+  G <- P$gradv(z$coefficients, x)
 
-  if (P$vcov == "iid")
-    khat <- crossprod(z$gt)
-  else
-    khat <- HAC(P$g(z$coefficients, x), kernel = P$kernel, bw = P$bw, prewhite = P$prewhite, 
-               ar.method = P$ar.method, approx = P$approx, tol = P$tol_weights)
+  khat <- crossprod(z$gt)/(n*P$k2)*P$bwVal
+  G <- G/P$k1 
 
   kg <- solve(khat, G)
   z$vcov_par <- solve(crossprod(G, kg))/n
-  z$vcov_lambda <- ((solve(khat) - kg%*%z$vcov_par%*%t(kg)))/n
-	
-  if (P$smooth) z$weights <- P$w
+  p_temp <- solve(khat,G)
+  z$vcov_lambda <- solve(khat, ( diag(ncol(khat)) - G %*% (z$vcov_par*n) %*% t(p_temp) ))/n*P$bwVal^2
 
+  z$weights <- P$w
+  z$bwVal <- P$bwVal
+  names(z$bwVal) <- "Bandwidth"
+
   dimnames(z$vcov_par) <- list(names(z$coefficients), names(z$coefficients))
   dimnames(z$vcov_lambda) <- list(names(z$lambda), names(z$lambda))
   b <- z$coefficients
@@ -575,6 +571,9 @@
   if(P$X) z$x <- x
   if(P$Y) z$y <- y
   z$call <- P$call
+  z$k1 <- P$k1
+  z$k2 <- P$k2
+  z$khat <- khat
 
   class(z) <- paste(P$TypeGel, ".res", sep = "")
   return(z)
@@ -606,7 +605,7 @@
 
   if (P$optlam == "iter")
     {
-    rlamb <- getLamb(P$g, res$par, x, type = P$typel, tol_lam = P$tol_lam, maxiterlam = P$maxiterlam, tol_obj = P$tol_obj)
+    rlamb <- getLamb(P$g, res$par, x, type = P$typel, tol_lam = P$tol_lam, maxiterlam = P$maxiterlam, tol_obj = P$tol_obj, k = P$k1/P$k2)
     z <- list(coefficients = res$par, lambda = rlamb$lam, conv_lambda = rlamb$conv_mes, conv_par = res$convergence)
     z$foc_lambda <- rlamb$obj
     }
@@ -616,22 +615,22 @@
     gt <- P$g(res$par, x)
     rhofct <- function(lamb)
       {
-      rhof <- -sum(rho(gt, lamb, type = P$typel)$rhomat)
+      rhof <- -sum(rho(gt, lamb, type = P$typel, k = P$k1/P$k2)$rhomat)
       return(rhof)
       }
     rlamb <- optim(rep(0, ncol(gt)), rhofct, control = list(maxit = 1000))
     z <- list(coefficients = res$par, conv_par = res$convergence, lambda = rlamb$par)
     z$conv_lambda = paste("Lambda by optim. Conv. code = ", rlamb$convergence, sep = "")
-    rho1 <- as.numeric(rho(gt, z$lambda, derive = 1, type = P$typel)$rhomat)
+    rho1 <- as.numeric(rho(gt, z$lambda, derive = 1, type = P$typel, k = P$k1/P$k2)$rhomat)
     z$foc_lambda <- crossprod(colMeans(rho1*gt))
     }
   z$type <- P$type
   z$gt <- P$g(z$coefficients, x)
-  rhom <- rho(z$gt, z$lambda, type = P$typet)
-  z$pt <- -rho(z$gt, z$lambda, type = P$typet, derive = 1)$rhomat/n
+  rhom <- rho(z$gt, z$lambda, type = P$typet, k = P$k1/P$k2)
+  z$pt <- -rho(z$gt, z$lambda, type = P$typet, derive = 1, k = P$k1/P$k2)$rhomat/n
   z$conv_moment <- colSums(as.numeric(z$pt)*z$gt)
   z$conv_pt <- sum(as.numeric(z$pt))
-  z$objective <- sum(as.numeric(rhom$rhomat) - rho(1, 0, type = P$typet)$rhomat)/n
+  z$objective <- sum(as.numeric(rhom$rhomat) - rho(1, 0, type = P$typet, k = P$k1/P$k2)$rhomat)/n
 
   if (P$type == "EL")	 
     {
@@ -639,22 +638,23 @@
     names(z$badrho) <- "Number_of_bad_rho"
     }
 
-  if (!is.function(P$gradv)) 
-    G <- .Gf(z$coefficients, x, P$g)
-  else
+  if(P$gradvf)
     G <- P$gradv(z$coefficients, x)
-  if (P$vcov == "iid")
-    khat <- crossprod(z$gt)
   else
-    khat <- HAC(P$g(z$coefficients, x), kernel = P$kernel, bw = P$bw, prewhite = P$prewhite, 
-            ar.method = P$ar.method, approx = P$approx, tol = P$tol_weights)
+    G <- P$gradv(z$coefficients, x, g = P$g)
+  
+  khat <- crossprod(z$gt)/(n*P$k2)*P$bwVal
+  G <- G/P$k1 
 
   kg <- solve(khat, G)
   z$vcov_par <- solve(crossprod(G, kg))/n
-  z$vcov_lambda <- ((solve(khat) - kg%*%z$vcov_par%*%t(kg)))/n
+  p_temp <- solve(khat,G)
+  z$vcov_lambda <- solve(khat, ( diag(ncol(khat)) - G %*% (z$vcov_par*n) %*% t(p_temp) ))/n*P$bwVal^2
 	
-  if (P$smooth) z$weights <- P$w
-
+  z$weights <- P$w
+  z$bwVal <- P$bwVal
+  names(z$bwVal) <- "Bandwidth"
+ 
   names(z$coefficients) <- paste("Theta[",1:P$k,"]", sep = "")
   colnames(z$gt) <- paste("gt[",1:ncol(z$gt),"]", sep = "")
   names(z$lambda) <- paste("Lambda[",1:ncol(z$gt),"]", sep = "")
@@ -662,6 +662,9 @@
   dimnames(z$vcov_lambda) <- list(names(z$lambda), names(z$lambda))
   if(P$X) z$x <- x
   z$call <- P$call
+  z$k1 <- P$k1
+  z$k2 <- P$k2
+  z$khat <- khat
 
   class(z) <- paste(P$TypeGel, ".res", sep = "")
   return(z)

Modified: pkg/gmm/R/specTest.R
===================================================================
--- pkg/gmm/R/specTest.R	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/R/specTest.R	2010-01-08 17:53:12 UTC (rev 17)
@@ -26,11 +26,11 @@
 specTest.gel <- function(x, ...)
 	{
 	n <- nrow(x$gt)
-	khat <- crossprod(x$gt)/n
+	khat <- x$khat
 	gbar <- colMeans(x$gt)
-	LR_test <- 2*x$objective*n
-	LM_test <- n*crossprod(x$lambda, crossprod(khat, x$lambda))
-	J_test <- n*crossprod(gbar, solve(khat, gbar))
+	LR_test <- 2*x$objective*n*x$k2/(x$bwVal*x$k1^2)
+	LM_test <- n*crossprod(x$lambda, crossprod(khat, x$lambda))/(x$bwVal^2)
+	J_test <- n*crossprod(gbar, solve(khat, gbar))/(x$k1^2)
 	test <- c(LR_test, LM_test, J_test)
 	df <- (ncol(x$gt) - length(x$par))
 	ntest <- noquote(paste("Over-identifying restrictions tests: degrees of freedom is ", df, sep = ""))

Modified: pkg/gmm/inst/doc/gmm_with_R.pdf
===================================================================
--- pkg/gmm/inst/doc/gmm_with_R.pdf	2009-12-22 15:18:34 UTC (rev 16)
+++ pkg/gmm/inst/doc/gmm_with_R.pdf	2010-01-08 17:53:12 UTC (rev 17)
@@ -112,34 +112,37 @@
 << /S /GoTo /D [78 0 R  /Fit ] >>
 endobj
 91 0 obj <<
-/Length 3267      
+/Length 3260      
 /Filter /FlateDecode
 >>
 stream
-xڍË’Û¸ñ>_Á#UeÑ>°7¯Ëžxc×&ëIªRö8g¤ZIÔ’”ÇÎ!ßž~ %jvÊ5&4~wSiô¥ÑíM*ÏŸïn^¿/ÒH•‰V¹‰î"«“UQ©U¢ŒîÖÑ—øíBÅíþ;ž†-<‹eVæñmƒƒ¦«á±ƒ¿íqbÍ‹Ÿš›F~®…™YÆ÷=!X ÀÐã´‰Õa½øýî—(+“gÑ(±ªdJž=ñ‘¸íp~Å4ÿ'àïE¦ã†¶Yi<!î	ˆf<ø’ù’eY¢2
-l#B~à—ça–:Õ‰-‹hitR˜‚Aÿx¤ªkø’o7HÝ©‡ÿú….⯩ÎyVÆ
-b½ywwó獂“ yT©¨ÈÒä­ö7_~O£5Ìÿ¥If«è‰ ö‘1¿‹>ßüÓw"äRG6±….N]Ú$·eT¤UbRò›{"D¤Ö«h9Göú}5B´Ty‘€¶, J	ÑÝFø
-"5À×#¢;.–pQàL™¸Gv¡Ëø©ç™
-x0Ð*mnˆ"A¸¯ñ­á•=Á®u#Ú Þ/tÿ¨6
-¿?²ò  Ꝡtúƒë{ÖØ€—§ÛYnE]ai ÓPK—Ê$Öx’0êƒhe¡<øþ¸Þ°㺬®ê/í¼Ãå7Ú0¥žÞ¬HY¯¶Hši¡cw«†u¶´cU ëÊ‹êL­Ç2Vi’êҐ0WÈ‚?y׏‚´JG[²2ÉÀjdËã~‰B$Y,smã7|UTÄnK³»€¹5)ÔÊ›
-Û¯mƒ0´M“\W"
-1Àökª²†íY­2Þ¬tOxÌ9Ld ëu/jŒtÇ‚ITDxOK-3›fP˜ç*%›êÃúòø‡jÇjtr{ðj2ˆRí—›(•*H… gÒ©‚7ú‰J7HU4¦k‘¤G¼O–‘sh¾‘þ‰póu‚4‰mzž¦@Á|Õ(ŠC„¹ /  ƒËd7«&}Q¨|6µŠ+8ããAž”VœÖßEK~ÀßSÛ-r,mm6K”S·Ÿ ú
-F~yd‹$–òª!ÂÁþḰÛNä+R~ :}ÞÜU5« ¼Â.g|ŽŠ	9_{rÜΓȾ¢Œsĉ%[‰pc©²$w1~ö@ÉŠ
-MÎg¡ÂÝO¤¤ÍyŒ¯lkñÐrÅœ^û©ÿn;¹`'Ýá­íarÓ-Ë Œï	 •/EÁ×ÿ!¨¶2öê“W¥m®°rémêy:;ÒDˆåºPþvQ&iVÏ8—« ¿°/Í|šg’Ì”ªhÖŽ,KâÜ ]qšÆ|bFn€²¥õi5ˆß½¤z©Š‚0.µI”-F¹@ì|ÞÌUk0ÞÅ^ZMMóô†ŸäÆŠ7"¦ºç÷ûàº
-í¬¼¶e["BjRò¡B‚$’o9|dìH™ØkD¨Î[§"Â_ç•S [üàQM;˜R+×…Ùãqd»¬¬n0ö¤Âp6>ç€wô§b&5”†ç}f°j$»ƒIu‘{ýíö&úBý0öÍa’Ê"òüY*V¶Òg[½h¬ó$,Èn$qàßjtÝã,ÇÀ§[ÝÇy›ãœA’N|”»bzU¬?÷E!•ÏJtŁˆæDix@±²90	&k~ÌF“:Äq†"ÉÂæ=ë×™õ	ZÇËs
-7²wÉÉ&ðL¨™f‰sLÙ‰¦!†¥®Š¸ÿYŽçt½qVøõñ³°éNç,5G]w
-%œÝ&nÿFiˆó¦õýNä4ÂŽæ߬8vGOºñw2HŠ3{žž÷Ã.wB<Šøc1®¼j~p
-tr!/i
-þ²ýUör²à$ $æ?p6‡–W½ာ¶wy$Zâ–8¬yB ÓhãÝ&î8’qøú)$‡œŽJ…ϐæð¼yÏv„é‰JÔÈ)âIì0ƒ¼à ÛŠÒÒÓfÑAùIÙ;ÏIO*æ…:ϽñãäJ®ÒQ°s
-+‡“+Å-ÏGUy˜z’)]BîH5ë.Àû8ÔËãÍãOy<ǯ\øuy<UL„oËÞ×áœaØhk–Ù—~Y9[? BAMÂ#@V®:Ç×=Rv¢PB$òdÛ9ÐuªGß©3­õ.[5óÀ¯¦\êcBéœÍ¶oÙû°œ‘o³ÜGÎïÌ]­-…×	­Öê³$¦8b®]' Cî@bóá [ëUˆDœ)¨ïµ¥8‹	'¤F䪬/|\nd}+§úÔÓ7:´Í\oýÌŒ…6Tó£w±‘ä3¸ÔϨÍ>ƒ“W<À»ö³XÌ„$ó˜‚x¶ W
-áJfsŸLHqÆFcT
-'öcY‚šá{á ­ž P‰ƒg®Ôª4ݹ¼É袸Ï)!¼{ª]wJ¢í(‹œaŠke†w75âù&ã’B–«(ã0â}ð¥g“{r!gÍxÖ®½5Œ
-†û“3» YB~&-ª©gÑðvg!pÀZ4M®‹”Ù
-Ð%¥}ãhs²3׍©XMRÀÁÏÂ9ÒÑm|D§« (&ˆ°SúÀωsJ¥Þ«_ñÈ'\Úrh=z+o$¡ƒO)o‚òâñ¥l8^À¯¿Òz ß]$mfN¦e “,Dg‘(£)@"–ù鳁kÁ,3.êˆØ¸ü,1H³ïÆ‘	õ¯2Tð,az'Ñ ŸÞyW°r¥/bž¶uä¼³lh¦ÌÔP…Ö—‘Ÿ°á<PмŸ)Þ2¨Ê¥³uk‘”¥‡¸%¥¦Lf”¸ÊwÊÁ[Π¦“;˜ÏTs¹D¦«Diß(­<fDð(­0L¢2æ»ëFÀ¤~â¶uB²,OL–OÊXÅÁ·Ýº¸	ïÇI­B¾p}r­4t›0ûA|¢‹±ðzðAÀ¡!Š}#ÓGTë{ßä›)’{"oÅޏàftÈ•òY(9Ìö"²jÜk˜kF(• ”ƒxrz¿ÑH¢âþÉ7„ÇÚS&Ö3áqÁ¨2Éʳ¾ÔeÃ9ñ†Y&Fkùz±ó5‘oY¦yðH©‰7ä`òÂ礹k 
-\á¡«ò
-¨4÷lC‚¡rŠ#&a‘ÊÄo.ht#43}*añä`a#ÁJ¼‚†ï&‡)eõ0Ï:zîT\©#ŒtYŒšÕ¨\Jfá£Á.L-1È(§[ôÚSª$»ˆ5½\'|„ Ç‘ 0›B´[‡†’!öÔ~²,_B¢U¥'ŒK’/’P`¢’Á6ç
-Ç”™ÏKmGµt{‰Ô0¯dÄNjDº·äعõW_óä—^ô¾r:1Ô.„öQy°rN€¹]ž§´¼c³KE†IJ›çÌ„ã˜æÚ£ìù7û™gÊ§"ÖyTT®÷Žt¡F½#.±pªqÁ®=È”kYá1ÿYT÷víE·	_Ôm²Å|·	xÇ=r½œ<é*ic¦ý„ EÑ.RMHäaÃJ>Ž»´…g}ÍõSØ°y¦3è3Ÿˆ¡¥Cð.ýwb–ã–§|Y2£Æ™¡HÒ¯-·ï‘øÓ_·ï½ÿ§¾ý×;wàu‰¼~¯Ó|~™J~žÝFYbsëzÍca®IðCÏ:aÞ£’œœ¹¯uÝÞ²“o5çѹLç‚=¤9©ªûy—m(UuÁ®Ÿ×:¿ºÈ¤/sž¸¾LaB¯ÌY +Œ«JþŠLü+…S	$—†Q˜—†NS5kÒü¨¤ù1j f<¸hvÈÇ%¾Œé9uX3NæjEN5t·–kš^mŸ\=ºf¸±ÕÚøó~òK	Oí[Û¶¼ÂSj)dôýdäSño] ¢éÑçJ¨õiA:ú¾ç
-3_Àê˺Bþ:ÁßMº¡32ù,™gnÙ(Ügº"¤.Ý„ ÃMèi®™—’dÁº¯da’L³öA®Xï¡à}\A÷ö¸‚Ïå«( {¯ïìïòPWç¥øëB*ÿípµs)—S¿H¯®=?ñù78ð$‰.Êç¾Á©²€q9ý§U”ƒc,égÊ .*yÆ×ïó4ª[†"¬‚C¬Ü¯uø[4ôS§ÞÅóg>êÌb±»‹¯:F¿ÈÀÞTþò3>ª‡ÖUišêkÃæNJíÊn¹¨ñÏ€óüѧöyÈÅ(ÿû1ƒm>÷s%Óö•xëf×¾y3i|Ü>œ$%b×<ʱÝzü£FíÓ¹ßD4äÿËNf
+xڍÙrÛFò]_G°*„1ƒÁ1yKR¶ÖY»v7ÖnÕ–ˆ„DVx -{¿~ûš$¤¨\2æìéé»{˜'IžÜÞäòýùîæÍ»*OTiUšäî!±:3E“ÔZeÊØän|NY¨ô¸‡ÿNçqŸÃãbYÔezÛa§ë[øìàoû?XóäÇn„Îæ=?v„‘™Æöž ,`Á8à°IÔa½øýîפ¨2SÉ0±ªfL^<ñ-¡¸íq|Å+hüÀß‹B§m#´òt‚ÜNÎx<Ð¥ŒéRE¦
+
+d#D~“5@;@¯,5®Yê\g¶®’¥ÑYe*^úO„Û!V}Ç—üeƒØøoXè*ý’ëbQuÚ!Ô›·w7Þ(8	€'Jª"Ï€Éjóù÷<YÃø¯Iž¶IžhÕ>1×ï’O7ÿò̝0¹Ö‰Íl¥+ÄS×6+mTy“™\˜üÓ=¡¬@TÛÕH¸\{ó®‰ -UYe -K€ St·zK
+Ðõ„àN‹%\¨ C&pÉq¡ëôià‘
+÷¸3Ò,mî#¸o±ÕñÌžÁ®u'Ò Þ/t“~ 6·YxíN@:ùÁù=Kl€ËÃÇ™>Š¸ÂÔH§¡”.•É¬1ð%9`´‘ÊJy°ý8ß±ã¼Ì®ÚOí¼Ãå:×Û0¦ߢÊY®¶ˆªi¥Sw«Že¶¶±(€v•Us!Ö1Užåºvˆ™+$Á‹²JÛGÚäÑ–¢Î
+ÐÙò¸ß_CÅcY’-–¥¶éO|UÄ~K³¹€±5	ÔÊ«
+vžÛfh›g¥n„¢€Ç/¹*:Ö?&µ*x³Ò=¡
+iå8áÌ·ƒˆ1âAQ<à=M™Ø4‚̼)ÙÔÖ×Ç?œQ:VÑÉǃ“Q„šp¸Þ|B®4+´0P&Ÿ
+èÉQc˜ˆt‡XAbú#¢ôˆ÷)
+2ÝW’?‘`ZÜ}C™ ÉEd»‡ÉQðF\¾:È‹Ae	SÀ ƒÓ¤7«.yQ(|6·Š+ãýA™ÕVŒÖßEJ¾ÃßÓ±_”I,Òm6èK”·ñÔæem„ùn’Qv)ˆàŽ§"m¬Sg~¶ÏN!Uúl0y|¡³<Åö„cÐh&Nã4¹ßî€Ä'Ûƒ`{i0þEø[²ªI–ªÈJçè¯.€Ç¨&]±¶‰”0g“3‰‰t™b“Õc-fZt­¤æ05âÇ^hÐI€xëñ0‘Ç­»2¾¿(€h¾_ÿ»€ÚJßË<>g{ajž”K¯X/SÐÝHÁ¡ëJ]ÝhEåEÌã\X`¬‚ þ6,ð±žÉ
+SQ¼¢
+¨„9B-U‰iPp´Çyž¾÷ÑÙ
+™ÖçÕ(Æ÷륪*‚¸Ô&S¶Š‚ŽIù¢ÎÁüœÍägg¯Ý0
+ÉËüºåúŠ7"¤vàö}°ß†v¶ž#áB[Q7ZD‘dxË>¤`kÊÈ®X¢ÀMõÎã:ú:»¨,¨Ýâ;÷ZÚÁ˜Z¹.ŒžN‘î²°‚ÞOÌ©PAç!ð€6UQ“–¼JÇã><XuâÁ¿¬LúÇÄ5»½I>ÓA#ˆCw˜Dƒ2‰4„J•môÅVÏë,	3²8ô[E×
+ŽÎ²#|Z°†Ñ}œµ9Í)$ÉÄGŒ»ÆW¥úüw;ù¢¶éû‘—®Øј
+wÈav^EÌ‚Á–?«ëÉ!ánƒ3çUÄYؼgùú.£>JëyzNà"(׃… ¦¦¡âQv"ia©›*þD’ã9½¸pz}ø$dú‡KæšÃ®?‡<N‰f·¥XÄYÓö~'|Š £…ùˁÞÑ—nü’üÌž‡_ëucä‘ŏqæ'A åÇAgçð’Ö`&è/;<KÃA®SrÓèü;Ž–éxäY/CØ!­\0‰š¸%
++C–Ð4Úx³‰;N¤>‰
+b'§£Pá7ÄúЭŸõ¼»€ÃôE!êä±$´ì0¼b§{¡bÔbÑAåtIØ{OI
+‡º,½òãàÊd”	ìœÀÊádJqËKÇQê@¦ÝIÆ‹,¯!€¤ÄuÖ{?4È Ã-ӏ¸?G¯Rèu}<¥MoËÖ×Áœ!X´ã¼WfE=›D @AbÜ#ˆ’¢Sx‰˜É•Šsö4ªÄÞ7*ÊLsƒ‹ÆV]€<J {ˆB/èHgl¶}°xËÁ»å‚l«¨åþ¿mt	·d_gÔZ«/‚b¹vEž ©ÍûƒlmWÁq¤p è›¢k
+¼!4z Se}öãœt'ó[9Õ‡ž¾Ú¡má
+hgf4´ãE-ç‰?£- ðŒØìƒ3è0xżi1‹ÅHH"éO J%T)léƒ	ÉÐXiŒÊáÄad(kÐòú]8Hë†ÈUâÄè‰+	+
+÷.îC4úƒÈîsBm¯@­+Q‰·¢È¢¸zPaxw×"œ¯’6.Ée¹Œ€"#Ö«Ü“s9k†³v5®1JîÏNí‚dù™¤¨¥ÂEÇ۝†Àk‘4¹2LRd7†….(:‡›ãq6-Æb5	 +gHg(D·ñ®‚¬˜ Âré'Æ)—|¯ý{>àÒ–]ëÉky”¿òZH/¯ìXΊã|ðò+õZãK¥­ƒÌÁ´td™è4¹c4Eˆ„¬ezúhà9gVçu„mœ~Öè¤Yˆw±gBùk0…ÿE‚|xçMOåò´¶#ç]DC3i¦†,¬²>üˆUç‘œæýLòVèL5>)Í[«¬®ýŠ[jŠdæ AŠ«|¹¬å8 ª1¥[ó‰r.0 ×Àt“)í«…¡žÇ„å(o€„ùæJRaa\?sí‹*!EQf¦('%q°m·ÎoBû4ÉUȮϮž†fFß‹Mt>šïÂØW3½Gµ¾ N¶™ü ™'²ÖEêíˆ,ÜD‡<“>&‡ÙZDÑĵ†¹b„R¬r+žœÜo"J”Ü?ùªp,=ufm5SŽ+FÕYQ_Ô¥®«Î™WÌ:3ZËÆÎçD¾n™—Á"å&ݐ-€Á+›“—®€4†R›/@åe¸çÑ´1(*‡8¢âà)MüêœF™Ièsq‹g 8g qVbõpix<9L1kǨ?kè¹RñLa¤ÊbÔ„©F•’2
+VaZñAF9Ù¢æÀ…JÞE¤ä28à³ \zŠ€Ñ‚Ý:0±¥öeùõ¬i(<aXx–„ä •n´¹,È8¢Ì¼1{Ê¥ópOìÜ‹§†Ž<•9©ébÜš}çÖ_}̓œzQ{ådblèQz°rFs¹ ¿iyúfŠŒ“¶,™:¸Ž}š+²å#Ølg^H?НjðX—^Q±x¾v¤+ÕŽ8Å¡Î9»ãA†\É
+ù¸·?^U›pòUÕ&[ÍW›€7Ü‘éíääIUI3­Çà
+šià$Õ„@6¬ä…Ü…-<ês®ÆÍ•Añøˆ@Œ•(½‚¶Ô7Þ߉ZÆ%Oy^2QáÌP$á×–Ë÷ˆüù¯Ë÷Þ~†Sù÷[wàóyóNç	Øü:—ø-»MŠÌ–ÖÕšcf]¾ÙdøÚ­Î…w($g§AîÉ®ßûw;yh9ŽÞÈezçì!ÌÉíTÜȺlCªª+6…ø}®ò««Bê2—€«ËT&ÔÊüËI\e\VòZdҐ;Gr­•ybè<W³Š!ŏFŠQ	 !s…äȝ«b‡\1Nñ¥Oß©Áš12Ïfä”CWxk)±æù³¥â³ËG×¼îUdµ6ý´ŸüÜcBSûÊÒ¶­Ÿ¡)•
+z?ú”ü[çˆhøÅgA˜ï8ý“¢×$/€Ù×U…üuÀƒ¿TCgxòI"ÏÒ²R¸gº*„.Ü,Ý«å4Ö,k	²`Þg²0HªÙz'×ÉZo¡ gP—µ=ÎàKy…ÅÞ*A›í]òê²{}…HãßW;r9ññ“Ôtåù˜Å—op`I2]Õ/½Á©º‚~=}‡Ó*)Á0Öô[i.–Î*UF–ñÍ»2OšÌV•aƒ³`÷“~‹à„†~ï48þ£ŽAÇ,»»zÕ1úUæöæòW^Àð~@=]–¦)¿6¬î”¡´.­á’‹Š“ ”çGŸÖÇ5£üÈ–ùÜo–¸OÛWbu¬]‹øêÕä¸àãöá$IûîQŽí×ñÏhŒŠÊ§s?ŒŠ$äÿ
+!O
 endstream
 endobj
 78 0 obj <<
@@ -247,44 +250,34 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 132 0 obj <<
-/Length 3999      
+/Length 3997      
 /Filter /FlateDecode
 >>
 stream
-xÚÍË’ã¶ñ¾_¡£¦jD“ øŠ+;e¯Š“*ï¦|°}àH”F±DŽEÍŽwùöô )jfl_R[âÙh ß
-lºØ-ÒÅÛ7_¾óÙ×Õ"K“:­³Åûí¢Êe^&µÍï7‹—ææç÷‡16”uRØ@И·7Ùò»ïnVÖšeÓAeƒeKí_Áï\}ÚCù¿{® ß¤‚ʏ•®±²yR¯4àôÿ ¬Akl=0Ô,¯oL¹üå&/–Í®eÄ»S-uÆA¶•Ž¶•IZè®vÇ£ŠÇ˜21…Ñ1O¸N3ð
-› À––VÈ–ýÃÍJªr$[l=1ܲ|•du­€¿ŸYŠEáG<ÝûÍÃ÷rú‡൰³[*øÓ
-¦Ð'"Û©'tqJ‹ÃOXJ•ÅÊ8"]’²,‡/†0â¿<Ø>ÐcåªtùpÒ3(–íIˆ¿<p@¿å¯2+kÏ@ؾk±BSÜÄþ£FxªÇx¢e‘ýéM”ØÏѹÀöø¯ ù)ÍSè!NýT2A‚vÎCºø‰+Ož¼ÄA@ŒUf“ÜÕ| í »lîʤ÷Š³ã†‹FW*Â\÷¸Ýþˆåó):KèWpg XzÄ­ãðDd	þ%ùâ„"ÅÅïß¾Yü¸*ËtùÏÖ#ÿ‘±i:Aë’pÏÅ2	3±›é9øÙÒ¤©›L]ÊqÒBDÓgQÄM~ÑéÆú¡)ø~øCX!Rù,R3”CR4¸žðÊVHb0æ†
-·‰hÄsÜ0Òуž±68qC3Ðn„_ϱœ`7ÉÞX]œ¼¨ %7«¼Î–ßv¼âCÓúQD¼9ÝBm™µ„ÎW¿W.Æå=8jÞOˆŽE´ÿxo.¯Ç{Æ;ÄU õnùÛÁįêgìRFþ%V”û9ñ„Á"ž¤§„ºJÙþèù÷îêôR-â’C()ª>lD+!f{F­ý1´ã}xv;Ç3
-6-–Ñԁ¥šr>Ô¦ãþXÚ¡
-*´ØtŸ·pGÙeXqKsŒ¦¶c0Ä´Òæ,àulÏ#}¸H¬ŠÂ-¿¾©+‚9ÒÂ-±qˆ÷ÌaôHqfà~Py)˜N=‹lyºdÃX½#Z ‰:mz/wwý™»¼]#ÍG4Ãþ‘{q	Ìÿã¹âŽi/ò	}Hü{d¨V<jÂuúniß=‰É${'=„P;w01Ys»lJ³ùsÏKA	Õqn˜Î^Dºˆis‰¹ÛŽ‡OàúýU´¿réeÔ
-;/É¢ì÷´· ~7:slAVx@²WFöï1•
->¯EŽFs§‚À]óÚ
-ÐüˆÌ–ÌÙ7¢¬¼ú÷ÛaÞqEÐqD~g½É¶Îñ¦¢ ±oÊ×û)kî;±?ˆ¤{àŽ§{Q#q€Ý+C±c04|”5á2ޏW'Q;l¸" Ò^‡ƒÔ°B(ÂFÆ¢¦Jù^ùã	!‡ÊÇçí+Ž{‹ôÜí˜Áï‚_¶kOS‹Ã_ea«YKŹ”mÀêOэXS¥`rö
-šƒÈO¸qÐ1é<V©¾ŽGÏZ^´š·¼À“t˜[ùJ#dˆ—9‡’g@‡±ÜH8Ñrã߈˶º$Ò¸Ùèf,tpBeZf„-asôˆ¾{i±ã]k“z\Ù™d€
-+‹.NÄyÊßØÐHéiúQ•ã•éa°ËÇ–ZÚŠEU?(5„v“eÖöÑÚYMDŠQË®?Eöþ(R˜Ú™0'¨¬§¤ÛÄ+î¸óž•8÷›
-Ç0+AΗäÎ4ª6Ç-Œ\"Ö1@²/ƒºWçY³·¥¸	Ì°-õˆ–̵g¾”<Øáw e6l%˜ÔST:÷Üuâƒõ¡ÙFH½ÆåEµ|/†Ÿ#§ù1r
-‰ ØCƒ܆[ÔREW{R"–¹î¨€ÎÁM›.©Áѻ㲚&ªœUR=3Dñ–Ÿ±ˆ2â18~2-~upð 
-Yo°i_’Ø„×jæ´8p1R2²ÎÐ?
-bëöv. ·už¤éó}–de®#zð,©1Y´áȸ$«ÜÈDAõ–˜úÌ‘ýƒ×3[õ£Ì•G’
-#ºf‘QŽ‚ý÷÷êáLó&ÆÂFËó&U‘é˜Ù$MU-½Í:qàVUÐU5çÓÔ|7–
-)d.É:]°sï>L;Ç®26¼ÍG0§®²˜—ŽÝKDŒ² >â‘lÑ/OaëÕXP^Y<žN
-êæc¹ýMXˆŽùfèÑP6Lf;¢:ò¿ÍÔÃɽg|Pµãf%€…mCyuureðë3Ky9o/ì
-ùšýân½Çål6Þµhlo'ù"
-KmöÚ”Œdçí&¶h+qÒ«Z™$ZéùŒ{t§D]#KMS  í¯KÌ”W<4dä<_~¡9C„ÈÚoÎ÷)'Ã:$òWˆáÐÏ{ÙŸaâï¹klìH¢`à:è|”¢ñËZÆód·ßdýí,°#'Ö|dgì\d'({çõßC+7M€ÕgN†˜o ¸ ´ÆáèÄÅ=>®i;V”Y:Ê®×5¨Së­1~@pV¹V	X3²•s˜¼åÕ;ÁŽcøÔÖÓ8к*
-¥dʯâWìOAž°“l®‹”‚+…ld,'‘®ø±ƒÌÝ^Î=MÛŠëïTû*ÍÀŒäU>2…Á•fžã®fÒHß8ÎáEiŽ9Rd&MŠÜ›-
-+‘2½›¡‡­’,dêû+°aµÍÇÆ ÕkÄÓþ×+È_€•HzCŸ‹ûÖÅðš}§ÎœAVÝÒ§æBò´VãO@ç"f¾"°5ìÛLÄC™©.8d“ =RáÊQ0BÃc(ŽhhøC‘RÃ/5D®ûŒ–6©óü7Œ–Žàè@徆 
-!meKñ¨Fú{Î~q.}†ìe’ytWHšå@Ò €ÇZÿiUbÉ	É0ž9ašè ÏŒw®HAËEŽma27¦…éÎñ¶Ö¹r¤G¡hŽRºXRÖâ¤é‹ ¾õ¤øbDú·WD䔃G)"7«ú¨¨#ÃEÃ%L ²±1È6º¼ Y]?{Ɲí|ˆÊÖ*VÎ…ĹH¿¹(qíµ“è^–ŸÒ$©+Ç”¹~17¼à©‡”ˇƇ
-T×Ô):Ø5‰½^ReâÉÀwÛO½qÎ×åò];±4Áà§ò‰™v,å5N[fU¨rŠyz£ËøDÉz©â¬æ¢wàg,õ%Ë®\!iKuw]QÆõ´ÁuO„´‘Cå놥|… Ûw½jÖµñœPFùí‚_§[9Ëô;Q|¹»ç~©Ò
-’ðºLN.¶¢."â5án‘Ùo	./%®\˜×Á†]‰üªèRý2ðx½½|<kÇtüÝ(§x­2Ðý…%÷Ù³‰gM؆åÏ4Ì^Ò„çì{8ˆçÁ̾ÄR˜9ÝE@}9©ZRNÕHµBsKN옢<ðÑߧ@E-$B½Ø*Â1”ìÊ'gÑËǾ	XkÂhãW‹00ìRα5灻=çæ+¤×ó˜cXÓ<h~ª1 ? ÓU+ÐqÁ÷ÁšÉˆ.üìëXÔ%ց#‚ÎtžÔ˜;±ø¦¥Ò7-âפ˷Äí©QCþÉ'—r!.YÿTÛ›ÒaºA’«ÝÕäàô
-‹.nlâê"RÎÑ…äp©J¡õš‰hTRÙ'¢…$Ÿ¤{Ëߘ¯‹t”Þ…êQO=Ês "‚¨éÛ3‰ÐeöSÁì”w6a¥ž‹÷šJ˜E"ö²fx‡ÔÔƧëÎ7þÁÊÔµç,÷1LšŽ®¸i†¿â¾Pb¹K‚«uE‡žKŸÏ^Áš#Ç)FŒ¨éJýqE¯ÙÆT®«{.‡¬vêï—p’¤Y4-ѬXÇŒwGYe‰³/ë*S›è\
-ëFŠö4“Õr‡Ü cÅÎéß[F{àDÚ³i÷MÓ
-> Ž³ØùŠ¬FVWfþ¹I´£ß‡P<Åpi™TÎ{–tvÿmÑ[›Ùwk‚w?éU;©‹ë;ÑXËêH9.HÉ®½>µõå+…³š¼Ã–\ûço
-Á·¢ÇB VЉ͜d ¡ðÃMe5ÈžÞB÷ë6|奐.ôrnùibȧáü•hd×Ñð1t–ÌX–Gž½æ¢21Yäígù	,à_¯œ4•9É\Ã|ìÜ}"г#F‡aퟢɕ ãÔiâ%qòSkúð¥çΙ€G¦5üaã¥^J;ŸþñUÙxÉ?’´3ŽîêÄ™HðŒ<\5é,™Ò¨<É*Ť°bS•p ÂÐF	,ë&YƒZÆyˆ0Ãr @ÊzéË]š–:É*Øh”¿RÄ£s:†H³=pÏ?~߸ï¢WG-—§ÙîÝÜñAxeÀeš„ž¿ÎN™UÎ95ó/U£ <cŸí’ÔتÞÝ£¾¡‰R²Þ¦«ƒx쏑;DMWßçüenŸ˜ª9de-»üjflÒçSœƒd“4J&\BÈ“¼Î§v`
-Ä%Æ™?̳P¥µ1Ï~~"[‚V¹äKàÜ´²#˜û¹,fbÑ$†A¨~F>¬–åÏ,*øDºô‡óù”Y’›ññ€òo3W`¤•Ð©Šî–ÛSˆE'1fúÃœÛv‘›ó®Ëë».A»Ö‹Ñ ¹L¤ÇNø™áäJ8¹Ž¤Ä=Z‘{1α/WìD‘Bln9]çÕd+¯6ÛSüh€ß•ÒTÎx÷j˜èu¨“ס¯O£›_è·›&\«ZIf­äðó¤Ê‹‘¡	.ôÞ­„Ã^“Õ±TBà5›†¸+¼[,ì8(€ó•ÅïpqŽ¼[»¼§¹å¿ÂA¹x…\™9¹šhç¸hн>Ü,lˆvlx׀螣-i¾e¯w(Ò>ÿX#@UÒeTÙ$¿þ¥¾V ¤xŠyÅS$9ŠõŸU<%Ð
-–ªBìR…WTÁ¿zµÞŽ‡©øªšFòG²
-K55
-¾ÞÉcO4AÑz½T›ÓG†Üì?úÿ‡¦8±Ü4°»gaeáÃÀmòX`ü,•CqGùÏ¢Yb³ò%Úº×ÐÖþnÚ–¯¢­™Ò–÷ãÿÓ…“‡ z/íª¹Àt꯬ª—Þ‹ºÒß‹8WNž#t¶±WÞÉõ=·5\7aeþ-ué7„âÞ£ÖïWïßü6X—¬
+xÚÍË’Û6ò£¦ÊbH$ÁMíÁÙJœlÅ»U±·rHràHÔc#‘Qã‰ýõÛO ¤¨™IrÙriˆg£~7àôf{“Þ¼}õÕ‡W_|ãn²4©Ó:»ù°¹qÙMUTImŠ›뛟ùí/þ	cL<(+ë¤4€ 1oo³Å»w·KcòEÓAeeCí_Ãï{®>î¡|†ßŽë? èW© 2Ác©k,M‘¸²ä•œÞà„5ha…­†zåÕm^-~½-ÊE³m±‡î6wqm¥£mee’–º«íñ(ƒâ1y•äe®cqfàÖ- þˆ--­-úûÛ¥TåH6Øzb¸U=:x—du­€˜YŠeéG<îüæa‰œþaÀx-ììV‚ÊÃþ´‚i#ô‰ˆƒÇvê	]œÒâð‡–Dåf™ÛDº$UU1o†O0â¿{<Ø>Ðci]º¸?锋ö$Äß8 ßðWÈVµg l߶X¡©
+nbÿ™Q£N<Õã½@<ѲȃÆþŠô&Jì‰çè\`{üW€üœ)ô§~•L ó®Ç~äÊ£'/qc™™¤°5H;È.›»ƒ2éNq¶ÜÐa1AàU Š0W=n·?bù|ŠÎúÜÙ–pë8<Y‚IqsB‘ââo_Ýü´¬ªtñ¯Ö#ÿ‰±i:Aë=’pÏÅ2	3±›é)øÙ"OS;™ºã¤…ˆ¦O¢ˆ›|ÓéÆú¡)ø~üSX!RÅ,R3”CR4¸žðÒ8$1sÚÛÎD4â9néhHŽž±68qC3Ðn„_ϱœ`7ÉÞX]œ¼¨ %·Ë¢Îßu¼â}ÓêAD¼9½†þÚ0k	>®¾S.Æå=8jÞOˆŽE´ÿxo¶¨Ç{Æ;ÄU õnøÛÁįêgìRFþ5V”û9ñ„Á"ž¤§„ºJÙþèù÷nëôR-â’C(–)ª>lD+!f{F́þÚñ>¼{=Ç3
+6-Ñԁ¥š
+>Ô¦ãþXÚ¡
+*´ØtŸ·pGÙeXqCsŒ¦¶c0Ä´Òæ,àulÏ#}¸H,ËÒ.¾¹u–•ŠGÁiá8·ˆ÷ÌaôHqfà~Py)™N=‹lñ:tɆ±zG´@tZ÷^îîú3wy»Fšh†ý#÷â:™ÿ‡#rÅÓ^äúø=öÈP­x
+Ô„ëôÝ:Ò¾{’Iö^z¡vî`b²fÑþœf%òçž—‚ªã"g:{]é"¦9Ì%æn;>ë÷çhÕÂ˨vν$‹²ßÓÞøíè̱YáÉîrÙ¿ÇTF4üùH¾9͝
+wÍk7@ó2[2wdߊ²òêßo‡yÇ–AÇù­ñ&ÛXË›:ˆľ!(_溺¸ïÄþ ~î;w¢Fq€]+C±c04|”á2ޏW'Q;¬¹" Ò^‡ƒÔ°B(ÂFÆ¢¦Jy§üñˆr‡Ê§§í+Ž{‹ôÜn™Áï‚_¶mOS‹Ã_daݬ…%bmÊ6`õ§µèF¬©RÈö
+šƒÈϸqÐ1é<V©¾ŽGÏZžµš¯yG5è0'¶òN#dˆ—9‡’—ƒc¹‘p¢åÆ–ÍÙê’Hãzd£›±ÐÁ	U©Ì1ZÂæè½{n±í]ë<õ¸²3É V]œˆó”¿±¡‘ÒÓô£*Ç+ÓÃ`—Ž-5´‹ª~PšØM:”YÛGkg5)F-ÛþiØÝQ¤053aNPYOI·‰WÜq玕8÷›5Ç0KAÎWäÎ4ª6Ç
+Œ\"Ö1@²/ƒºWçY³·¡¸	Ì°©,õˆV̵g¾”<Øáw e6l˜ÔST:÷Üuâƒõ¡ÙZH½Â¥[|ÃO‹‘Óü¹†D ì!A
+nÍ-j©¢«=)«BHwT@çà¦ÍÆ?—Ô‚`ŠèÝqYMUÎ*©ž¢øËOXDñœ¿™¿€º 8xP‡†¬7Ø´¯ÈlÂÆk5sZ¸)Ygè±Uûz. 7u‘¤éÓ}–dU¡#zð©1Y´áȸ$svd¢ zCL}æÈþÞ뙍ú‹ÇQæÊ#Édž]³È(GÁþ‡z8Ó¼In`£Õ³yWf:f6IãÜÂ;ѬnUíÜœSLS+ðÝXB4¤¹$ëltÁÎ	¼]˜vŽ]elx+š`N]e1+6»—ˆeA|Ä#Ù¢_‘ÂÖÝXP^<žN
+êæc¹ý]XˆŽùfèÑP6Lf;¢:ò¿ó©‡SxÏø 6jËÍJ )*
+›†òêêÊà×g–ŠjÞ	^Øò5'úÙÝzËšl¼kÑØÞNòE–šì¥)#É:ÎÛMlÑ, Vâ¤W?´2I´ÒÓ÷>èN‰ºF–š¦@@Ú_–˜©®xhÈÈE±x£9C„ÈÚoÎ÷)§œuHä¯áŸw?²?ÃÄß³×$87#‰‚« óQˆbÄ/+Ï“UÜ~—õ7³ÀŽœXó‘]næ";AÙ;¯ÿZ‰¸i¬>s2Ä|ÅU 0G'^°(îñqMÛ±¢ÌÒQv½®Aoˆñ‚³ÊÕ%`ÍtÊVÁaò†Wï;ŽuâS[Mã@c]JÉ”ßį؟‚<a'Ù\)[	ÙÈXN"]ñc™»¹œ{š¶×ߪö!Uš)\12…Á•fžã®µfÒHßXÎáEiŽ9Rdyš”…7[V#ez7Cã’,dêû+°aµÍÇÆ ÕkÄÓþ÷È_‚•HzC_ˆûÖÅðš}§ÎœAVÝÒçæBŠ´VãO@ç"f¾"05ì;Ÿˆ‡2S]rÈ&A{¤Â•£`„†ÇP;)ÐÐð‡"¥†#^jˆ\÷7,+MRÅ3n-ÁсÊ}
+$.B ÚʆâQô÷œ%üâ\úÙ«$ó讐4+€¤A µþ۪Ē’a<³Â4Ñžï.\‚–‹Ú"Ïì˜J¦[ËÛZid«‘…þ¡9JéJ`IY‹“¦/‚úÖ“â‹éß\<uP¥ˆÜ¬ê£¢Ž
+—0È¹‰A¶Ñ=àHwýìw¶ó!*[©XYbk#ýf£Äµ×N¢{Y~ª<Im5¦Ìõ‹¹áO8¤ZÜ7>T º¦î HÑÁ¶éHìõ’*O¾›~êsž¸®ïÛ‰í 	9~œOÌ´c)¨qÚ2s¡Ê)æé.ã%ë=$ÇYÍ)DïÀÏXêK–]ÚRÒ–êîÚ²Š%êhƒêž)h#‡4Ê×
+K/øJA·ïzÕ¬+â/8¡ŒòÛ¿N×YÃô;Q|¹Ýñ@¿G‰TiIx]&'›Qñšp·Èl‹·——W.Ìë`îD~.ºT¿ü^o/ß{ÏÚÁc ÆÄ1×Ê)^«taÈ}ölâY¶aøsÅ 
+³—4áùûây0³Ï±fŽFwPBNª–”“©VhnɉS”>øû¨¨…D¨[E89%»ŠÉYô2Çò‡oVš0ZûÕ¢»”sl-xàvϹy‡ôzúâs+:ƒ{ÍO5#äcºÊc:.øž#X3ùÑ…_|S‹ÚÄXpDЙ.’s'ß´8}Ó"~MºxK|О5äŸ}r©â’õOµ°©,¦$¹ÚÝMNß°èâ¹Il]FÊ9º.U)´>¡C"êC*ûD´$ã£toøóu™ŽÒ»P=ê©GyTD5}wæ!ºÌ~*˜òÎ:¬Ôsq§©ôûY$b/k†wHM­}ºî|ë,óºö¼€åþþ"†IÓÑ7ÍðWÜJ¬°Ipµ®è0ÐséÓÙ+X“bä8ň5]©¢?î±è5Û˜ÊuuÏåÕNýýN’4‹¦%ë˜ñá(]–Xó]UDò^°n¤hO3Y-wÈ
+0VÊ9ý‹Þb&ÌÜ>sà¾mºÁÀ£k'è|AV#«]>ÿÜ$ÚÑÃ(žb¸´Nrã
+W+~5=²ŠÜÌ>^ÃGb•wJ_´Ÿº¼¾Ñé«%ÊAÙÁ7eRdÅå[…³¾Ã†ü§<,z2Ê]ÙÌJ
+?Þ:£¡ö”€Ðý²
+_y/¤=ƒœ]¼!ý@lù8\¢ñB>ª³ëhøsÏŠ‘1ËŠ(ϳ׌T&Æ!‹|þ¬x&ü–“¦±2+9ƒk˜]¼oCzöÑÄè0ŒùK4¹füˆšM|%NjzMŸ¿ôÜ9öÈ´†?lÂÔWéOcÔ?Áj8/YH’Ù<ÇxubóHðry¾š§7`ÿ«”FI–£jLJ#69•QÅ(
+—¤54„QËØIî „–qvâÌ°\•8И„ðÝ¥©“ÌÕ ºa”¿XÄ£s:†x³=pÏ?¹ï¢·G-—§aYðíÜñA•ƒã4	@›;œ*)]Î9Íçß«F¡yÆžÛ%©±U}¼}I%f½eW7ñØ#§ˆš®¾ÒùÛÜ>1%ärr˪ZvùõÌlÒgUšƒd’4J)\B(’¢.¦v`
+Ä&¹Íÿ4ÏN at UÆÄ<ûå-ˆlZå’/sSgF0÷s¹ÌÄ aƒP%ü‚|èçÏ,*dýá|9ÇU–ùøx@ùšK0R'trÑ
+s{
[TRUNCATED]

To get the complete diff run:
    svnlook diff /svnroot/gmm -r 17


More information about the Gmm-commits mailing list