On 29/04/2015 9:49 AM, Hanze Zhang wrote:
How should I do? The issue happened on log likelihood function?
I imagine it's the log(x[delta==1]) term that is turning the result into
a vector.
Duncan Murdoch
On Tue, Apr 28, 2015 at 11:06 PM, William Dunlap <wdun...@tibco.com
<mailto:wdun...@tibco.com>> wrote:
Your function ln() does not return a scalar.
> ln(theta=c(1,2))
[1] 48.5342640972 48.5342640972 48.5342640972 48.5342640972
48.5342640972 <tel:5342640972>
Bill Dunlap
TIBCO Software
wdunlap tibco.com <http://tibco.com>
On Tue, Apr 28, 2015 at 6:40 PM, Hanze Zhang
<kevin511...@gmail.com <mailto:kevin511...@gmail.com>> wrote:
I still cannot solve the problem: 'invalid function value in 'nlm'
optimizer'
I want to get the MLE for theta[1] and theta[2], my code is below:
x <- c(2,5,3,7,3,2,4)
delta <- c(1, 0, 1, 1, 1, 0, 1)
# -log likelihood
#alpha<-theta[1]
#lamda<-theta[2]
ln<-function(theta,x1,x2 )
{
-sum(delta)*log(theta[1]*theta[2])-sum(delta)*(theta[1]-1)*log(x[delta==1])+theta[2]*sum(x^theta[1])
}
#MLE
nlm(ln,theta<-c(1,1),x1=x, x2=delta, hessian=TRUE)
On Tue, Apr 28, 2015 at 6:40 AM, Duncan Murdoch
<murdoch.dun...@gmail.com <mailto:murdoch.dun...@gmail.com>>
wrote:
> On 28/04/2015 2:43 AM, Hanze Zhang wrote:
> > Hi, R users,
> >
> >
> > I am using nlm function to get the MLE of parameter alpha
and lambda
> from a
> > parametric survival model (Weibull distribution).
However, this message
> > always came out: ' invalid function value in 'nlm'
optimizer'. Could
> anyone
> > help me? Code is
> >
> > project<-read.table(file="C://data.txt", header=T, as.is
<http://as.is>=T)
> > names(project)
> > attach(project)
> >
> > x<-time
> > delta<-ind
> >
> >
> > # -log likelihood
> > #alpha<-theta[1]
> > #lambda<-theta[2]
> > ln<-function(theta)
> > {
> >
> >
>
-sum(delta)*log(theta[1]*theta[2])-sum(delta)*(theta[1]-1)*log(x[delta==1])+theta[2]*sum(x^theta[1])
> > }
> >
> > #MLE
> > nlm(ln,theta<-c(1,1),hessian=TRUE)
>
> You are taking logs of parameters. Probably the optimizer
is setting
> the parameters to negative values, and so the log returns NaN.
>
> You can avoid this by testing your parameters on input, and
always
> returning a valid number. There are lots of ways to do
this: One
> strategy is to return +Inf for invalid values; another is to
move the
> parameter to the nearest boundary, and apply a penalty
according to how
> far you moved it. Or just take the absolute value of the
parameter. Or
> reparametrize so that illegal values aren't possible.
>
> Duncan Murdoch
>
>
[[alternative HTML version deleted]]
______________________________________________
R-help@r-project.org <mailto:R-help@r-project.org> mailing
list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.