Erreur dans R: nonconformable arguments. Pas vrai?

c'est mon code:

    #define likelihood function (including an intercept/constant in the function.)
lltobit <- function(b,x,y) {
  sigma <-  b[3]
  y  <- as.matrix(y)
  x <- as.matrix(x)
  vecones <- rep(1,nrow(x)) 
  x <- cbind(vecones,x)
  bx <- x %*% b[1:2] 
  d <- y != 0 
  llik <- sum(d * ((-1/2)*(log(2*pi) + log(sigma^2) + ((y - bx)/sigma)^2)) 
              + (1-d) * (log(1 - pnorm(bx/sigma))))
  return(-llik)
}

n <- nrow(censored) #define number of variables 
y <- censored$y #define y and x for easier use
x1 <- as.matrix(censored$x)
x <-  cbind(rep(1,n),x1) #include constant/intercept 
bols <- (solve(t(x) %*% x)) %*% (t(x) %*% y) #compute ols estimator (XX) -1 XY
init <- rbind(as.matrix(bols[1:nrow(bols)]),1) #initial values 

init

tobit1 <- optim(init, lltobit, x=x, y=y, hessian=TRUE, method="BFGS")

où censuré est mon tableau de données, y compris 200 (censuré) les valeurs de y et de 200 les valeurs de x pour.

Tout fonctionne, mais lors de l'exécution de la optim commande, j'obtiens l'erreur suivante:

tobit1 <- optim(init, lltobit, x=x, y=y, hessian=TRUE, method="BFGS")
Error in x %*% b[1:2] : non-conformable arguments

Je sais ce que cela signifie, mais puisque x est un 200 par 2 de la matrice, et b[1:2] un vecteur de 2 par 1, ce qui ne va pas? J'ai essayé de transposer à la fois, et aussi les valeurs initiales du vecteur, mais rien ne fonctionne. Quelqu'un peut-il m'aider?

Dans votre fonction, la ligne x <- cbind(vecones,x) ajoute une colonne à x. Puisque vous êtes de passage des deux colonnes de la matrice, la nouvelle x va avoir 3 colonnes et ne peut pas être multiplié à b[1:2].
Si R dit vous avez non conforme arguments, vous ne pouvez le croire.
La façon de résoudre ce type de problèmes est pas pour poster des questions, mais pour utiliser un débogueur ou ligne par ligne de l'exécution du script et de vérifier que les dimensions réelles (ou longueur) de vos variables sont au point où l'erreur s'est produite.
Non, à l'origine x a seulement 1 colonne/c'est un vecteur. L'ajout de cette colonne supplémentaire de ceux, implique que nous avons maintenant 2.
vous êtes dans l'erreur. L'exécution de votre code. Voir que, avant l'appel de optim, x est un matrix (pouvez-vous voir la x <- cbind(rep(1,n),x1) ligne?). Que, lorsque x est passé à lltobit, une autre colonne est ajoutée, puis l'erreur.

OriginalL'auteur pk_22 | 2015-10-20