在参考Chelton(1983)后,我一直在努力计算两对向量(x和y)的自由度,这是:
并且我找不到使用np.correlate计算归一化互相关函数的正确方法,我总是得到一个不在-1,1之间的输出.
为了计算两个向量的自由度,有没有简单的方法来对互相关函数进行归一化?
获得了异步事件流,其中每个事件都包含以下信息:
我需要做的是 -
根据服务实体,日期+时间和类数据关联事件,并创建合并的新事件.例:
事件#0021:{Agency ='XYZ',Agent ='ABC',Served-Entity ='MMN',Date + Time = '12 -03-2011/11:03:37',Class-Date ='miss-交付,不重复,无法解决,孤儿'}
事件#0193:{Agency ='KLM',Agent ='DAY',Served-Entity ='MMN',Date + Time = '12 -03-2011/12:32:21',Class-Date ='miss-送货,孤儿,丢失'}
事件#1217:{Agency ='KLM',Agent ='CARE',Served-Entity ='MMN',Date + Time = '12 -03-2011/18:50:45',Class-Date ='escalated' }
在这里,我发现3个事件间隔时间(超过7小时分离),这些事件是针对相同的服务实体(MMN),在特定时间窗口(例如24小时)内发生,具有匹配或相关的类数据.
最后创建一个统一(新)事件,它可以代表一个推理.
能够基于特定类别数据标签(例如,错过交付)等特定时间段内的每个服务实体来创建每个代理商,每个代理商的报告.这可以使用原始/输入事件或合成(推理)事件来完成.
虽然这不是今天的要求,但很可能在将来出现,但是类数据中出现的"标签"可能会增长,而无需任何人为干预.所以不确定是否应该将其视为非结构化数据.
也不是一个直接的要求,但将来可能需要确定事件发生的趋势/模式(即Event1导致Event2导致Event3).
事件到达率可能非常高......可能每分钟有数千个事件.也许更多.并且,我需要将原始/合成事件存档一段时间(一个月左右).
我的解决方案需要基于FOSS组件(最好).到目前为止进行的一些研究指出了CEP(复杂事件处理),贝叶斯网络/分类,预测分析的方向.
寻找有关采取措施的一些建议.我更倾向于采用符合我目标的路径,最小的难度/时间,或换句话说,"学习AI"或"正式的统计方法"不是我的短期目标:-)
我试图模仿这个图: 
如果我有一个相关矩阵,我该如何创建这样的输出?
我有两个同样长的数据数组的数据集,或者我可以创建一个两项条目数组,我想计算数据所代表的相关性和统计显着性(可能紧密相关,或者可能有无统计学意义的相关性).
我用Python编程并安装了scipy和numpy.我在Python中查看并发现了计算Pearson相关性和重要性,但这似乎希望对数据进行操作,使其落入指定范围.
我假设,有什么方法可以让scipy或numpy给出两个数组的相关性和统计显着性?
我遵循了另一篇文章中定义自相关函数的建议:
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) 有没有办法用熊猫计算加权相关系数?我看到R有这样的方法.另外,我想获得相关性的p值.我没有在R.链接到维基百科中找到有关加权相关性的解释:https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Weighted_correlation_coefficient
这是我的代码:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv('death_regression2.csv')
data3 = data.replace(r'\s+', np.nan, regex = True)
plt.figure(figsize=(90,90))
corr = data3.corr()
print(np.shape(list(corr)))
print(np.shape(data3))
Run Code Online (Sandbox Code Playgroud)
(135,) (4909, 204)
所以在我使用相关函数之前,参数的总数是 204(列数),但是在使用 data3.corr() 之后,一些参数丢失了,减少到 135。
如何检查数据中所有列之间的相关性?
为什么使用 np.corrcoef(x) 和 df.corr() 时 numpy 相关系数矩阵和 pandas 相关系数矩阵不同?
x = np.array([[0, 2, 7], [1, 1, 9], [2, 0, 13]]).T
x_df = pd.DataFrame(x)
print("matrix:")
print(x)
print()
print("df:")
print(x_df)
print()
print("np correlation matrix: ")
print(np.corrcoef(x))
print()
print("pd correlation matrix: ")
print(x_df.corr())
print()
Run Code Online (Sandbox Code Playgroud)
给我输出
matrix:
[[ 0 1 2]
[ 2 1 0]
[ 7 9 13]]
df:
0 1 2
0 0 1 2
1 2 1 0
2 7 9 13
np correlation matrix:
[[ 1. -1. 0.98198051]
[-1. 1. …Run Code Online (Sandbox Code Playgroud) 我想将一个变量(比如酪氨酸)与R上的所有其他变量(大约200种其他代谢物,如尿素,葡萄糖,肌苷等)联系起来,我不知道该怎么做.我是R.的新手
我已经学会了配对功能,但它将指定范围内的每种代谢物配对到另一种.
谢谢!
当数据中存在NaN时,我找不到计算包含多于两个变量的观测值的数组的相关系数矩阵的函数.有一些函数可以为变量对执行此操作(或者只使用~is.nan()来掩盖数组).但是通过循环遍历大量变量来使用这些函数,计算每对变量的相关性可能非常耗时.
所以我自己尝试并很快意识到这样做的复杂性是协方差正确归一化的问题.我对你如何做的意见非常感兴趣.
这是代码:
def nancorr(X,nanfact=False):
X = X - np.nanmean(X,axis=1,keepdims = True)*np.ones((1,X.shape[1]))
if nanfact:
mask = np.isnan(X).astype(int)
fact = X.shape[1] - np.dot(mask,mask.T) - 1
X[np.isnan(X)] = 0
if nanfact:
cov = np.dot(X,X.T)/fact
else:
cov = np.dot(X,X.T)
d = np.diag(cov)
return cov/np.sqrt(np.multiply.outer(d,d))
Run Code Online (Sandbox Code Playgroud)
该函数假定每行都是变量.它基本上是来自numpy的corrcoeff()的调整代码.我相信有三种方法可以做到这一点:
(1)对于每对变量,只采用那些一个和另一个变量都不是NaN的观察结果.如果你想同时对多个对进行计算并且上面的代码中没有涉及,那么这可以说是最准确但也是最难编程的.然而,为什么抛弃每个变量的均值和方差的信息,只是因为另一个变量的相应条目是NaN?因此,另外两个选择.
(2)我们用nanmean贬低每个变量,每个变量的方差是它的纳方差.对于协方差,每个观察,其中一个或另一个变量是NaN,但不是两者,是对无协变的观察,因此设置为零.协方差的因子是1 /(观察的数量,其中两个变量都不是NaN - 1),用n表示.相关系数的分母中的两个方差都由它们相应的非NaN观测数减去1来计算,分别由n1和n2表示.这是通过在上面的函数中设置nanfact = True来实现的.
(3)人们可能希望协方差和方差具有与没有NaN的相关系数的情况相同的因子.在这里执行此操作的唯一有意义的方法(如果选项(1)不可行),则简单地忽略(1/n)/ sqrt(1/n1*n2).由于该数字小于1,估计的相关系数将比(2)中的(绝对值)更大,但将保持在-1,1之间.这是通过设置nanfact = False来实现的.
我对你对方法(2)和(3)的看法非常感兴趣,特别是,我非常希望在不使用循环的情况下看到(1)的解决方案.