예를 들어 데이터의 이동 평균을 사용하여 일종의 Monte Carlo 접근 방식을 사용할 수 있습니다.
합리적인 크기의 창을 사용하여 데이터의 이동 평균을 가져옵니다 (얼마나 넓은지를 결정 하는가에 달려 있습니다).
데이터의 스루는 (물론) 평균이 낮으므로 이제 "낮음"을 정의하기 위해 "임계 값"을 찾아야합니다.
이를 위해 데이터 값을 무작위로 교환하고 (예 :을 사용하여 sample()
) 교환 된 데이터의 이동 평균을 다시 계산하십시오.
이 마지막 구절을 합리적으로 많은 횟수 (> 5000)로 반복하고이 시험의 모든 평균을 저장하십시오. 따라서 기본적으로 시행 당 한 줄씩 5000 줄의 행렬이 있으며 각 줄에는 해당 시행의 이동 평균이 포함됩니다.
이 시점에서 각 열에 대해 5 % (또는 1 % 또는 원하는) Quantile을 선택합니다. 즉, 무작위 데이터 평균의 5 %에 불과한 값입니다.
이제 원본 데이터와 비교할 수있는 "신뢰 제한"(정확한 통계 용어인지 확실하지 않습니다)이 있습니다. 이 한계보다 낮은 데이터 부분을 찾으면 통과를 호출 할 수 있습니다.
물론, 이것이나 다른 수학적 방법으로는 생물학적 중요성을 알 수는 없지만, 잘 알고 있다고 확신합니다.
편집-예
require(ares) # for the ma (moving average) function
# Some data with peaks and throughs
values <- cos(0.12 * 1:100) + 0.3 * rnorm(100)
plot(values, t="l")
# Calculate the moving average with a window of 10 points
mov.avg <- ma(values, 1, 10, FALSE)
numSwaps <- 1000
mov.avg.swp <- matrix(0, nrow=numSwaps, ncol=length(mov.avg))
# The swapping may take a while, so we display a progress bar
prog <- txtProgressBar(0, numSwaps, style=3)
for (i in 1:numSwaps)
{
# Swap the data
val.swp <- sample(values)
# Calculate the moving average
mov.avg.swp[i,] <- ma(val.swp, 1, 10, FALSE)
setTxtProgressBar(prog, i)
}
# Now find the 1% and 5% quantiles for each column
limits.1 <- apply(mov.avg.swp, 2, quantile, 0.01, na.rm=T)
limits.5 <- apply(mov.avg.swp, 2, quantile, 0.05, na.rm=T)
# Plot the limits
points(limits.5, t="l", col="orange", lwd=2)
points(limits.1, t="l", col="red", lwd=2)
이렇게하면 영역을 그래픽으로 찾을 수 있지만의 라인에서 무언가를 사용하여 쉽게 찾을 수 있습니다 which(values>limits.5)
.