Fix typo in multistart.R
[morpheus.git] / reports / multistart.R
index 7cc0a5e..73df538 100644 (file)
@@ -9,8 +9,9 @@ testMultistart <- function(N, n, p, beta, b, link, nstart, ncores)
         # 1 start
         library(morpheus)
         K <- ncol(fargs$beta)
+        mu <- computeMu(fargs$X, fargs$Y, list(K=K, M=fargs$M))
         op <- optimParams(fargs$X, fargs$Y, K, fargs$link, fargs$M)
-        x_init <- list(p=rep(1/K,K-1), beta=fargs$mu, b=rep(0,K))
+        x_init <- list(p=rep(1/K,K-1), beta=mu, b=rep(0,K))
                                res2 <- NULL
                                tryCatch({
           res2 <- do.call(rbind, op$run(x_init))
@@ -45,22 +46,26 @@ testMultistart <- function(N, n, p, beta, b, link, nstart, ncores)
             }
           }
         }
-        # Bet that at least one run succeded:
-        do.call(rbind,best_par)
+        do.call(rbind,best_par) #return NULL on empty list
       }
     ),
     prepareArgs = function(fargs, index) {
       library(morpheus)
       io = generateSampleIO(fargs$n, fargs$p, fargs$beta, fargs$b, fargs$link)
       fargs$M <- computeMoments(io$X, io$Y)
-      mu <- computeMu(io$X, io$Y, list(M=fargs$M))
-      fargs$mu <- mu
       fargs$X <- io$X
       fargs$Y <- io$Y
                        fargs
     }, N=N, ncores=ncores, verbose=TRUE)
-  for (i in 1:2)
+  p <- c(p, 1-sum(p))
+  for (i in 1:length(res)) {
+    for (j in N:1) {
+      if (is.null(res[[i]][[j]]) || is.na(res[[i]][[j]]))
+        res[[i]][[j]] <- NULL
+    }
+    print(paste("Count valid runs for ",i," = ",length(res[[i]]),sep=""))
     res[[i]] <- alignMatrices(res[[i]], ref=rbind(p,beta,b), ls_mode="exact")
+  }
   res
 }