projects
/
morpheus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Error when K > d for computeMu and optimParams
[morpheus.git]
/
pkg
/
R
/
optimParams.R
diff --git
a/pkg/R/optimParams.R
b/pkg/R/optimParams.R
index
411e010
..
175150f
100644
(file)
--- a/
pkg/R/optimParams.R
+++ b/
pkg/R/optimParams.R
@@
-45,8
+45,8
@@
optimParams <- function(X, Y, K, link=c("logit","probit"), M=NULL, nc=0)
if (!is.numeric(Y) || any(is.na(Y)) || any(Y!=0 & Y!=1))
stop("Y: binary vector with 0 and 1 only")
link <- match.arg(link)
if (!is.numeric(Y) || any(is.na(Y)) || any(Y!=0 & Y!=1))
stop("Y: binary vector with 0 and 1 only")
link <- match.arg(link)
- if (!is.numeric(K) || K!=floor(K) || K < 2)
- stop("K: integer >= 2")
+ if (!is.numeric(K) || K!=floor(K) || K < 2
|| K > ncol(X)
)
+ stop("K: integer >= 2
, <= d
")
if (is.null(M))
{
if (is.null(M))
{
@@
-253,7
+253,8
@@
setRefClass(
res
},
res
},
- run = function(θ0)
+ # userW allows to bypass the W optimization by giving a W matrix
+ run = function(θ0, userW=NULL)
{
"Run optimization from θ0 with solver..."
{
"Run optimization from θ0 with solver..."
@@
-279,13
+280,14
@@
setRefClass(
stop("θ0$b: length K, no NA")
# (Re)Set W to identity, to allow several run from the same object
stop("θ0$b: length K, no NA")
# (Re)Set W to identity, to allow several run from the same object
- W <<-
diag(d+d^2+d^3)
+ W <<-
if (is.null(userW)) diag(d+d^2+d^3) else userW
- loopMax <- 2 #TODO: loopMax = 3 ? Seems not improving...
+ #NOTE: loopMax = 3 seems to not improve the final results.
+ loopMax <- ifelse(is.null(userW), 2, 1)
x_init <- linArgs(θ0)
for (loop in 1:loopMax)
{
x_init <- linArgs(θ0)
for (loop in 1:loopMax)
{
- op_res
=
constrOptim( x_init, .self$f, .self$grad_f,
+ op_res
<-
constrOptim( x_init, .self$f, .self$grad_f,
ui=cbind(
rbind( rep(-1,K-1), diag(K-1) ),
matrix(0, nrow=K, ncol=(d+1)*K) ),
ui=cbind(
rbind( rep(-1,K-1), diag(K-1) ),
matrix(0, nrow=K, ncol=(d+1)*K) ),