标签: autocorrelation

是否有任何具有标准化输出的numpy autocorrelation功能?

我遵循了另一篇文章中定义自相关函数的建议:

def autocorr(x):
    result = np.correlate(x, x, mode = 'full')
    maxcorr = np.argmax(result)
    #print 'maximum = ', result[maxcorr]
    result = result / result[maxcorr]     # <=== normalization

    return result[result.size/2:]
Run Code Online (Sandbox Code Playgroud)

但最大值不是"1.0".因此我引入了标有"<=== normalization"的行

我尝试了使用"时间序列分析"(Box - Jenkins)第2章数据集的函数.我希望得到像图的结果.那本书中的2.7.但是我得到了以下内容:

在此输入图像描述

任何人都有这种奇怪的不期望的自相关行为的解释?

增加(2012-09-07):

我进入Python - 编程并执行以下操作:

from ClimateUtilities import *
import phys

#
# the above imports are from R.T.Pierrehumbert's book "principles of planetary 
# climate" 
# and the homepage of that book at "cambridge University press" ... they mostly  
# define   the
# class "Curve()" used in …
Run Code Online (Sandbox Code Playgroud)

python statistics numpy correlation autocorrelation

9
推荐指数
2
解决办法
1万
查看次数

使用 Pandas 自相关图 - 如何限制 x 轴以使其更具可读性?

我正在使用 python 3.7。

我正在使用 ARIMA 模型进行时间序列预测。我正在使用自相关图评估 ARIMA 数据的属性 - 特别是使用 pandas.plotting 中的 autocorrelation_plot。

我的数据有 50,000 条左右的记录,这使得情节非常繁忙,很难找出任何特定的趋势。有没有办法限制 x 轴,使前几百个滞后更加集中?

我不能分享实际情节,但我的代码如下:

import pandas as pd
from pandas.plotting import autocorrelation_plot

#Import Data
time_series_2619 = pd.read_csv("Consumption/2619.csv", parse_dates=['Date/Time'], index_col = ['Date/Time'])['Recording']

#Auto Correlation Plot
autocorrelation_plot(time_series_2619)
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到任何内容。

python time-series pandas autocorrelation

8
推荐指数
2
解决办法
5464
查看次数

如何在不指定周期的情况下分解数据中存在的多个周期性?

我试图将信号中存在的周期性分解为其各个组成部分,以计算它们的时间周期。

假设以下是我的示例信号:

在此输入图像描述

您可以使用以下代码重现信号:

t_week = np.linspace(1,480, 480)
t_weekend=np.linspace(1,192,192)
T=96 #Time Period
x_weekday = 10*np.sin(2*np.pi*t_week/T)+10
x_weekend = 2*np.sin(2*np.pi*t_weekend/T)+10
x_daily_weekly_sinu = np.concatenate((x_weekday, x_weekend)) 

#Creating the Signal
x_daily_weekly_long_sinu = np.concatenate((x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu,x_daily_weekly_sinu))

#Visualization
plt.plot(x_daily_weekly_long_sinu)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我的目标是将这个信号分成 3 个独立的隔离分量信号,其中包括:

  1. 天数作为期间
  2. 工作日作为期间
  3. 周末作为期间

期间如下图:

在此输入图像描述

我尝试使用statsmodel中的STL分解方法:

sm.tsa.seasonal_decompose()
Run Code Online (Sandbox Code Playgroud)

但这仅适用于您事先知道周期的情况。并且仅适用于一次分解一个周期。同时,我需要分解任何具有多个周期性且其周期事先未知的信号。

谁能帮助如何实现这一目标?

python signal-processing numpy fft autocorrelation

7
推荐指数
1
解决办法
574
查看次数

空间 bam (gam) 中的时间自相关

我正在根据声学标签检测对河流中的鱼类深度进行建模(这意味着数据并不完全是完美间隔的连续时间序列)。我预测,深度会根据河流的空间位置而有所不同,因为不同的区域有不同的可用深度,一天中的不同时间,因为深度对光有反应,一年中的一天也有相同的原因,并且个体之间也有所不同。那么基本模型就是

深度 ~ s(lon, lat) + s(小时) + s(yday) + s(ID, bs="re")

有几百万次检测,所以模型很糟糕,所以

bam(深度 ~ s(经度、纬度) + s(小时) + s(yday) + s(ID, bs="re")

每个人的深度应该与之前的记录自相关(当然这取决于它最后一次注册的时间,但我不太知道如何解释时间上的离散间隔)。

我知道 rho 参数在 bam 中用作一种 corAR1 函数,我想这可以解释自相关。我还考虑将 lag(深度,by=ID) 作为预测变量,它的表现相当好,但我不确定这种方法的有效性。

我跟踪了几个面包屑发现 rho 可以从没有相关结构的模型中估计 rho<-acf(resid(m1),plot=FALSE)$acf 2 -

对于每个人,我添加了一个 ARSTART 变量来调用 AR.start = df$ARSTART 来考虑个体之间不同的时间序列 - 所以我的模型是

m2<-bam(depth~s(lon, lat)+s(yday)+s(hour, bs="cc")+s(fID, bs="re"), AR.start=df$ARSTART, discrete=T, rho=rho, data=df) 
Run Code Online (Sandbox Code Playgroud)

一切都进展顺利,根据 AIC,具有自相关结构的模型拟合得更好(更好),但效果的后验估计非常不准确(或缩放比例很差)。与没有结构的模型相比,根据 lon、lat 平滑器的空间效应变得极端(且均匀),其中空间平滑器似乎非常有效地捕获空间方差,表明它们被预测在较深的区域中更深且在较浅的区域较浅。

图 1. 深度的后验空间估计用于没有自相关结构的模型,但显然没有考虑深度和滞后深度将相关的现实(按 ID 嵌套)。注意 z 值在原始值范围内调整后验估计是有意义的(大多数探测深度为 0-4 m)

图 2. 当模型包含 rho 参数来解释时间自相关时,深度使用的后验空间估计。注意 z 的巨大尺度,它远远超出了我们测量的范围,并且根本无法解释

如果需要,我可以提供示例代码,但问题本质上是,与模型相比,自相关结构会如此显着地改变后验估计的值是否有意义,并且时间自相关结构是否吸收了所有方差是否与空间效应相关(在具有自相关结构的模型中似乎被否定)?

一些想法-我不知道什么是最好的:

  1. 盲目遵循 AIC,而没有真正理解为什么后验估计如此奇怪(巨大),或者为什么空间效应消失,尽管基于系统的生物学知识显然很重要
  2. 报告我们将自相关结构拟合到数据中,它拟合得很好,但没有改变关系的形状,因此我们呈现没有该结构的模型结果
  3. 没有自相关结构但使用 s(lagDepth) 变量作为固定效应的模型
  4. 模型的变化是深度而不是深度,这似乎消除了一些自相关。

非常感谢所有帮助-非常感谢

spatial smoothing gam mgcv autocorrelation

6
推荐指数
0
解决办法
723
查看次数

创建对称自相关矩阵

我正在为时间序列数据向量执行自相关过程.我期待为给定的时间序列创建一个由自相关组成的对称矩阵.

我正在使用该acf()函数来检查我的值,它返回:

系列'acfData'的自相关,滞后

     0      1      2      3      4      5      6      7      8      9     10     11     12     13 
 1.000 -0.038  0.253  0.266  0.250  0.267 -0.182  0.281 -0.013 -0.067 -0.122 -0.115 -0.023 -0.337 
Run Code Online (Sandbox Code Playgroud)

为了实现矩阵,我然后对数据执行data.frame更改,以允许我按指定的滞后值滑动值:

dataF <- data.frame("data" = acfData)
names(dataF)[1] <- "acfData"
dataLag <- slide(dataF, "acfData", slideBy = -1)
Run Code Online (Sandbox Code Playgroud)

给:

> head(dataLag)
  acfData acfData-1
1      -7        NA
2       5        -7
3       4         5
4     -17         4
5       6       -17
6     -10         6
Run Code Online (Sandbox Code Playgroud)

当我执行一个cor()函数时,这给出了正确的2x2矩阵:

> cor(na.omit(dataLag))
              acfData   acfData-1
acfData …
Run Code Online (Sandbox Code Playgroud)

r correlation dataframe autocorrelation

5
推荐指数
1
解决办法
95
查看次数

sin(x) 自相关函数 python

我有一个时间序列数据,我想显示自相关函数。(我们知道正弦函数的自相关是余弦函数)

我应用了几种方法来做到这一点如下

import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

x = np.arange(0,30,0.1)  #interval=0.1, 300 samples
y = np.sin(x)
y_cor = np.correlate(y,y,'full')  
lags = np.arange(-x[-1],x[-1]+0.1,0.1)

#sin(x)
plt.figure()
plt.plot(x,y)

#autocorrelation(numpy)
plt.figure()
plt.plot(lags,y_cor)
plt.xlabel('Lag')
plt.ylabel('autocorrelation')

#matplotlib
plt.figure()
plt.acorr(y,maxlags=y.size-1)

#statsmodels
plt.figure()
plot_acf(y,lags=y.size-1)

plt.show()
Run Code Online (Sandbox Code Playgroud)

然而,结果是衰减余弦函数,而不是纯 cos(x)。我看到一些答案说这是因为计算自相关时包在 x 区域之外填充了零,但是如何解决这个问题以获得纯 cos(x) ? 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

python autocorrelation

5
推荐指数
1
解决办法
1680
查看次数

有没有办法在 R 中模拟具有特定滚动平均值和自相关性的时间序列数据?

我有一个现有的时间序列(1000 个样本),并使用 R 中的函数计算滚动平均值filter(),每个样本取 30 个样本的平均值。这样做的目标是创建时间序列的“平滑”版本。现在我想创建“看起来像”原始时间序列的人工数据,即有些噪音,如果我将相同的filter()函数应用于人工数据,这将导致相同的滚动平均值。简而言之,我想模拟一个具有相同总体过程但不与现有时间序列完全相同的值的时间序列。总体目标是研究某些方法是否可以检测时间序列之间趋势的相似性,即使趋势周围的波动不相同。

为了提供一些数据,我的时间序列看起来有点像这样:

set.seed(576)
ts <- arima.sim(model = list(order = c(1,0,0), ar = .9), n = 1000) + 900

# save in dataframe
df <- data.frame("ts" = ts)

# plot the data
plot(ts, type = "l")
Run Code Online (Sandbox Code Playgroud)

过滤函数产生滚动平均值:

my_filter <- function(x, n = 30){filter(x, rep(1 / n, n), sides = 2, circular = T)}
df$rolling_mean <- my_filter(df$ts)
lines(df$rolling_mean, col = "red")
Run Code Online (Sandbox Code Playgroud)

为了模拟数据,我尝试了以下方法:

  1. 向滚动平均值添加随机噪声。
df$sim1 <- df$rolling_mean + rnorm(1000, sd = sd(df$ts))

lines(df$sim1, col …
Run Code Online (Sandbox Code Playgroud)

simulation r time-series arima autocorrelation

5
推荐指数
0
解决办法
498
查看次数

R中具有空间自相关的GAMM

据我了解,GAMM 具有随机误差或空间自相关误差结构。

我正在尝试运行具有空间自相关误差结构的 GAMM 模型,例如 corExp(参见https://stat.ethz.ch/R-manual/R-devel/library/nlme/html/corClasses.html)。

但是我对从 GAM 建模 GAMM 感到困惑。

下面是我的 GAM(广义加性模型)代码。

library(mgcv)
mod.gam <- gam(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) + s(BaCo_5_2) + 
  s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2),data = data)
summary(mod.gam)
fits = predict(mod.gam, newdata=data, type='response')
plot(data$Chave, fits, col='blue', ylab = "Predicted AGB KNN", xlab = "Estimated AGB")
plot(mod.gam)
Run Code Online (Sandbox Code Playgroud)

我如何将其更改为 GAMM?当我尝试使用 GAMM 时(如下所述),我没有看到太大的变化:

model <- gamm(Chave~s(Band_3) + s(Band_7) + s(Band_8) + s(BaCo_3_2) +
 s(BaCo_5_2) + s(BaCo_5_3) + s(BaCo_5_4) + s(BaCo_8_2) + s(BaCo_8A_2),
 data …
Run Code Online (Sandbox Code Playgroud)

r spatial gam autocorrelation

1
推荐指数
1
解决办法
1697
查看次数

Why manual autocorrelation does not match acf() results?

I'm trying to understand acf and pacf. But do not understand why acf() results do not match simple cor() with lag1

I have simulated a time series

set.seed(100)
ar_sim <- arima.sim(list(order = c(1,0,0), ar = 0.4), n = 100)

ar_sim_t <- ar_sim[1:99]
ar_sim_t1 <- ar_sim[2:100]

cor(ar_sim_t, ar_sim_t1)   ## 0.1438489
acf(ar_sim)[[1]][2]        ## 0.1432205
Run Code Online (Sandbox Code Playgroud)

Could you please explain why the first lag correlation in acf() does not exactly match the manual cor() between the series and lag1?

r autocorrelation

0
推荐指数
1
解决办法
51
查看次数