2014-03-29 74 views
3

我有数据显示动物何时来到一个测量站。 example csv file here数据的前几行是这样的:R中有协变量的循环线性回归

Site_ID DateTime   HourOfDay MinTemp LunarPhase  Habitat 
F1  6/12/2013 14:01:00 14    -1  0   river 
F1  6/12/2013 14:23:00 14    -1  0   river 
F2  6/13/2013 1:21:00 1    3  1   upland 
F2  6/14/2013 1:33:00 1    4  2   upland 
F3  6/14/2013 1:48:00 1    4  2   river 
F3  6/15/2013 11:08:00 11    0  0   river 

我想R中执行圆形线性回归以确定峰值活动倍。因变量可能是DateTime或HourOfDay,以较容易的为准。我想将协变量Site_ID(随机效应),加上MinTemp,LunarPhase和Habitat纳入混合效应模型。

我一直在使用程序循环的lm.circular功能尝试,并有下面的代码:

data<-read.csv("StackOverflowExampleData.csv") 
data$DateTime<-as.POSIXct(as.character(data$DateTime), format = "%m/%d/%Y %H:%M:%S") 
data$LunarPhase<-as.factor(data$LunarPhase) 
str(data) 

library(circular) 

y<-data$DateTime 
y<-circular(y, units ="hours",template = "clock24",rotation = "clock") 
x<-data[,c(1,4,5,6)] 
lm.circular(y=y, x=x, init=c(1,1,1,1), type='c-l', verbose=TRUE) 

我不断收到错误:

Error in Ops.POSIXt(x, 12) : '/' not defined for "POSIXt" objects 

显然,这是一个已知的bug,但我很困惑this threat about it,并不能确定一个适当的解决办法。建议?

此外,我的这个数据的最终目标是运行一个glm的循环线性版本,然后使用AIC或其他一些信息理论方法来测试多个模型。我正在寻找的模式将是什么圆形线性版本是这样的:

glmer(HourOfDay~MinTemp+LunarPhase+Habitat+(1|Site_ID),family=binomial,data=data) 

也许,这就是圆形包装的应用不当。如果是这样,我愿意接受使用数据和协变量调查高峰活动的模型和/或图形的其他建议。

注:我没有搜索相关讨论,发现this somewhat relevant thread,但它从来没有回答过,没有在R中请求解决方案,并且是不同的范围。

+0

特别是如果你想添加一个随机效应项到这个模型,我想你必须使用类似[AD模型生成器](http://admb-project.org),可能通过R2admb包。 .. –

回答

0

具体问题是由conversion.circular造成的。在那里,一个POSIXlt对象除以12这是一个具有非定义结果的操作:

> as.POSIXlt('2005-07-16')/2 
Error in Ops.POSIXt(as.POSIXlt("2005-07-16"), 2) : 
    '/' not defined for "POSIXt" objects 

所以,似乎你不能使用这个类的数据作为circular包输入。我在示例中找不到任何提及的POSIXlt数据。也许你需要指定时间戳只是一个数字,而不是一个POSIXlt对象。