HI,

I’m having several problems trying to fit distributions to data that I have
sorted into a data frame, so the each ID has its own step length and turn
angle.

 

I can fit a Weibull distribution to step lengths with following code:

 

###create data frame###

ID1 <- na.omit(ID)

weib.test = data.frame(ID1, step1) 

set.seed(144) 

 

weib.dist<-rweibull(10000,shape=3,scale=8) 

names(weib.test)<-c('ID','steplength') 

 

g <- function(step1) { 

     require(MASS) 

     est <- fitdistr(step1, 'weibull')$estimate

                AIC(est) 

     list(shape = est[1], scale = est[2]) 

 

  } 

library(data.table) 

weib.test.dt <- data.table(weib.test, key = 'ID') 

weib.test.dt[, g(steplength), by = ID1]

 

This gives me the following output:

 

  ID1     shape    scale

[1,]   1 0.8089580 131.1514

[2,]   2 0.8393755 106.2641

[3,]   3 0.8421661 196.7409

[4,]   4 0.9096443 192.8869

[5,]   5 0.8170656 172.3526

[6,]   6 0.9815219 136.5133

[7,]   7 0.9485611 133.9226

[8,]   8 0.9279664 158.5760

[9,]   9 0.7980447 250.8815

[10,]  10 0.7882116 132.3324

[11,]  11 0.6684602 176.5392

[12,]  12 0.7636310 105.1567

[13,]  13 0.7179191 126.0132

[14,]  14 0.6833156 183.6390

[15,]  15 0.9356103 171.3479

[16,]  16 0.7865950 129.0388

[17,]  17 0.8408600 157.9560

[18,]  18 0.8023891 127.5567

 

Which is exactly what I need – separate shape and scale parameters for each
ID. However I also want to get AIC values for each ID, and I have tried
several things such as

AIC(weib.test.dt, by = ID1)

or

extractAIC(fit, scale, k = 2, ...)AIC(weib.test.dt)

stopifnot(all.equal(AIC(weib.test.dt),

                    AIC(logLik(weib.test.dt))))

 

 

But I keep getting an eror:  Error in UseMethod("logLik") : 

  no applicable method for 'logLik' applied to an object of class
"c('data.table', 'data.frame')"

 

I’m assuming this had to do with the multiple ID’s? Should I just fit the
distributions separately for each ID instead and then run AIC?

 

Furthermore, I would like to do the same thing as above with turn angles –
but by fitting a wrapped Cauchy distribution to the several IDs. I have
tried following code:

 

###wrapped cauchy fitting, simple mean and rho###

mu0<- circ.mean(turn1)

rho0 <- est.rho(turn1)

 

wcauchy.test = data.frame(ID2, turn1) 

set.seed(144) 

 

wcauchy.dist<-rweibull(10000,mu0,rho0) 

names(wcauchy.test)<-c('ID','turnangle') 

 

z <- function(turn1) { 

     require(MASS) 

     est <-wrpcauchy.ml(turn1, mu0, rho0, acc=1e-015)$estimate 

     list(mu0 = est[1], rho0 = est[2]) 

  } 

 

library(data.table) 

wcauchy.test.dt <- data.table(wcauchy.test, key = 'ID') 

 

wcauchy.test.dt[, z(turnangle), by = ID2]

 

But I keep getting the error: Error in `[.data.table`(wcauchy.test.dt, ,
z(turnangle), by = ID2) : 

  Type 0 in j column

 

And of course I would like to calculate the AIC as well for distribution
fit.

 

Can anyone help me out with this?

 

Thanks,

Lene Jung Kjaer

 

___________________________

Lene Jung Kjær

Studsdalvej 20, Taulov

7000 Fredericia, Danmark

Tlf: 29 86 96 14

email: ljkjar@hotmail.com 




	[[alternative HTML version deleted]]

