Задачи с методом Ньютона для нахождения коэффициента и гессиана - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь написать функцию, которая использует метод Ньютона (coefficients+(inverse hessian)*gradient), чтобы итеративно находить коэффициенты для логлинейной модели.

Я использую следующий код:

 ##reading in the data
    dat<-read.csv('hw8.csv')
    summary(dat)
    # data file containing yi and xi
    attach(dat)
    ##Creating column of x's
    x<-cbind(1,xi)

    mle<-function(c){
     gi<- 1-yi*exp(c[1]+c[2]*xi)
     hi<- gi-1
     H<- -1*(t(x)%*%hi%*%x)
     g<-t(x)%*%gi
     c<-c+solve(H)%*%g
      return(c)
    }

    optim(c(0,1),mle,hessian=TRUE)

Когда я запускаю код, я получаю следующую ошибку:

Error in t(x) %*% hi %*% x : non-conformable arguments
RMate stopped at line 29

Учитывая, что формула взята из множества задач Билла Грина, я не думаю, что это проблема формулы. Я думаю, что делаю что-то не так, передавая свою функцию.

Как я могу это исправить?
Любая помощь с этой функцией будет принята с благодарностью.

1 Ответ

2 голосов
/ 01 декабря 2009

Как сказал Джонатан в комментариях, вам нужны правильные размеры:

R> X <- matrix(1:4, ncol=2)
R> t(X) %*% X 
     [,1] [,2]
[1,]    5   11
[2,]   11   25
R> 

Но вы также должны использовать соответствующие инструменты, поэтому, возможно, посмотрите на функцию loglin в пакете stats и / или на функцию loglm в пакете MASS. Оба будут установлены по умолчанию с вашей установкой R.

...