> #transforming length of time
> transLOT<-log(LengthofTimemin)
>
> #checking for outliers
> fit<-lm(transLOT~DielEnd+TideEnd+TideStart+Moonphase+TideStart*Moonphase, data=resdata)
> outlierTest(fit)
rstudent unadjusted p-value Bonferonni p
295 4.445284 1.1025e-05 0.0052808
>
> #getting rid of the outlier data in row 295
> rdata<-resdata[-295, ]
> print(rdata[294:296,5:10])
# A tibble: 3 × 6
DepartureDate DepartureTime LengthofTime LengthofTimemin EventLengthCategories
<dttm> <dttm> <dttm> <dbl> <chr>
1 2016-09-19 1899-12-30 23:46:46 1899-12-30 00:05:49 5.816667 5-15
2 2016-09-20 1899-12-30 01:55:28 1899-12-30 00:01:20 1.333333 <5
3 2016-09-20 1899-12-30 04:07:28 1899-12-30 00:01:21 1.350000 <5
> newfit<-lm(transLOT~DielEnd+TideEnd+TideStart+Moonphase+TideStart*Moonphase, na.action=na.exclude, data=rdata)
Error in model.frame.default(formula = transLOT ~ DielEnd + TideEnd + :
variable lengths differ (found for 'DielEnd')
> #now all of a sudden the variable lengths differ
我理解删除数据行时会出现问题,但我认为na.exclude会解释它。彻底搜索后,我无法确定发生此错误的原因。
答案 0 :(得分:3)
这是因为您在第一步中在数据框之外创建了一个单独的变量transLOT<-log(LengthofTimemin)
。从数据中删除行时,transLOT
保持不变。甚至比不同长度更糟糕的是,您的数据不再排列 - 如果忽略不同的长度,则与您删除的行之后的响应相比,您的数据行将“减1”。
简单的解决方案是在数据框中创建transLOT
变量。然后,无论何时对数据执行操作(例如删除行),都会对transLOT
执行相同的操作。
resdata$transLOT <- log(resdata$LengthofTimemin)
请注意,我还使用您在工作区中看到的resdata$LengthofTimemin
而不是LengthofTimemin
。你有没有在某个时候使用attach()
?出于这个原因,您不应该使用attach
。将变量保存在数据框中!