牛顿寻找系数和Hessian方法的问题

时间:2009-12-01 02:45:34

标签: r newtons-method

我正在尝试编写一个函数,该函数使用牛顿方法(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

鉴于该公式来自Bill Greene的问题集,我不认为这是一个公式问题。我认为我在传递函数方面做错了。

我该如何解决这个问题? 任何有关此功能的帮助都将非常感激。

1 个答案:

答案 0 :(得分:2)

正如乔纳森在评论中所说,你需要适当的尺寸:

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上。