[R] Seeking help for using optim for MLE in R

Naznin Sultana zeny@@t@t @ending from gm@il@com
Thu Jan 10 11:34:30 CET 2019


Hi, I am writing a program for MLE of parameters of multinomial distribution
using optim.But when I run the program outside of a function it gives me the
likelihood value, but when using it for optim function it gives the error
message "Error in X %*% beta : non-conformable arguments".
If X, and beta are non-conformable how it gives values.
My data has first three columns of three dependent variables and rest of the
colums indicating X (indep vars).
Please help me out. Here goes my program for k1 categories of multinomial
distribution:

#data is the data which consists of three dependent varaible in first three
columns and rest of the columns represent covariates.


k1<- length(unique(data[,1]))
p<- ncol(data)-3
beta0 <-matrix(-.00001,nrow=k1-1,ncol=(p+1)) # starting value
beta <-as.matrix(beta0)
beta <-as.matrix(t(beta))




## likelihood for y1

multin.lik<- function(beta,data) ##beta is a matrix of beta's of order
((p+1)*(k-1))
                {
                        nr<- nrow(data)
                        nc<- ncol(data)

                        y1<- data[,1]
                        y1<- as.matrix(y1,ncol=1)

                        X<-as.matrix(cbind(1,data[,4:nc])) #matrix of order
((n*(p+1)))
covariates; 1 is added for intercept

                        LL<- exp(X%*%beta) #LL is of order (n*(k-1))
                        L<- as.matrix(cbind(1,LL))  #L is of order (n*k); 1
is added for ref
category, L0, L1, L2
                        pi<- t(apply(L,1, function(i) i/sum(i)))


                        lgl<- 0
                        for (i in 1:nr)
                                {
                                        if (y1[i]==0) {lgl[i]<-
log(pi[i,1])}
                                        else if (y1[i]==1) {lgl[i]<-
log(pi[i,2])}
                                        else lgl[i]<- log(pi[i,3])
                                lgl
                                }
                        lgL<- sum(lgl)
                        return(-lgL)
                }


## parameter estimates
abc <-optim(beta, multin.lik,data=data,method="SANN",hessian=T)

	[[alternative HTML version deleted]]



More information about the R-help mailing list