HI,
Im 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')"
Im assuming this had to do with the multiple IDs? 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: [email protected]
[[alternative HTML version deleted]]
_______________________________________________
R-sig-ecology mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-ecology