删除异常值无法运行cor.test()



我正在从数据集的单列中提取异常值。然后我尝试在该列和另一列上运行cor.test()。我遇到了错误:Error in cor.test.default(dep_delay_noout, distance) : 'x' and 'y' must have the same length我认为这是因为从一列中删除异常值会导致它与另一列的长度向量不同,但不确定该怎么办。我曾尝试通过添加一个没有异常值的新列来更改数据集,但不幸地遇到了同样的问题。有人知道该怎么办吗?下面是我的代码。

dep_delay<-flights$dep_delay
dep_delay_upper<-quantile(dep_delay,0.997,na.rm=TRUE)
dep_delay_lower<-quantile(dep_delay,0.003,na.rm=TRUE)
dep_delay_out<-which(dep_delay>dep_delay_upper|dep_delay<dep_delay_lower)
dep_delay_noout<-dep_delay[-dep_delay_out]
distance<-flights$distance
cor.test(dep_delay_noout,distance)

你差不多到了。在cor.test中,您还需要对distance进行子集设置。此外,对于预处理,您可以使用长度为2的quantile矢量和mapply在一步中进行比较——只是为了写得更简洁,实际上您的代码很好。

data('flights', package='nycflights13')
nna <- !is.na(flights$dep_delay)
(q <- quantile(flights$dep_delay[nna], c(0.003, 0.997)))
# 0.3% 99.7% 
#  -14   270 
nout <- rowSums(mapply((f, q) f(flights$dep_delay[nna], q), c(`>`, `<`), q)) == 2
with(flights, cor.test(dep_delay[nout], distance[nout]))
# Pearson's product-moment correlation
# 
# data:  dep_delay[no_out] and distance[no_out]
# t = -12.409, df = 326171, p-value < 2.2e-16
# alternative hypothesis: true correlation is not equal to 0
# 95 percent confidence interval:
#  -0.02515247 -0.01829207
# sample estimates:
#         cor 
# -0.02172252 

最新更新