在R中使用协变量的循环线性回归

3

我有一些数据,显示动物什么时候到达了调查站。这里是一个示例csv文件 数据的前几行如下:

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纳入混合效应模型中。
我尝试使用程序circular的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)

也许这是对循环包的不恰当应用。如果是这样,我愿意接受其他模型和/或图形的建议,以使用数据和协变量研究峰值活动。
注意:我搜索了相关讨论并找到这个有点相关的线程,但它从未得到答复,没有要求在R中解决,并且范围不同。

特别是如果您想向此模型添加随机效应项,我认为您将不得不使用类似于 AD Model Builder 的工具,可能通过 R2admb 包实现... - Ben Bolker
1个回答

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对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接