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
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
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
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur un problème similaire aujourd'hui ("non-conforme" arguments d'erreur, même si tout semblait OK), et la solution dans mon cas était en règles de base pour la matrice de la multiplication: par exemple, le nombre de colonnes de la gauche de la matrice doit être le même que le nombre de lignes de la droit matrice = j'ai dû changer l'ordre dans la multiplication de l'équation.
En d'autres termes, dans la matrice de multiplication (contrairement à la multiplication ordinaire),
A %*% B
n'est pas le même queB %*% A
.OriginalL'auteur Jan