我已经对数据进行了分组,我想测试几个基本的推理统计数据。
library(tidyverse)
df <- data.frame(x=runif(50, min = 0, max = 25),y=runif(50, min = 10, max = 25), group=rep(0:1,25))
df %>%
group_by(group) %>%
summarize(cor(x,y))
Run Code Online (Sandbox Code Playgroud)
在这里我可以很容易地得到相关性,但我还需要检查它的统计显着性。不幸的是,像cor.test这样的选项在dyplr. 有简单的解决方法吗?
我有 2 个 numpy 数组,如下所示:
a = np.array([32.0, 25.97, 26.78, 35.85, 30.17, 29.87, 30.45, 31.93, 30.65, 35.49,
28.3, 35.24, 35.98, 38.84, 27.97, 26.98, 25.98, 34.53, 40.39, 36.3])
b = np.array([28.778585, 31.164268, 24.690865, 33.523693, 29.272448, 28.39742,
28.950092, 29.701189, 29.179174, 30.94298 , 26.05434 , 31.793175,
30.382706, 32.135723, 28.018875, 25.659306, 27.232124, 28.295502,
33.081223, 30.312504])
Run Code Online (Sandbox Code Playgroud)
当我使用 SciKit Learn 计算 R 平方时,我得到的值与计算 Pearson 相关性然后对结果求平方时完全不同的值:
sk_r2 = sklearn.metrics.r2_score(a, b)
print('SciKit R2: {:0.5f}\n'.format(sk_r2))
pearson_r = scipy.stats.pearsonr(a, b)
print('Pearson R: ', pearson_r)
print('Pearson R squared: ', pearson_r[0]**2) …Run Code Online (Sandbox Code Playgroud) python scikit-learn pearson-correlation scipy.stats coefficient-of-determination
我正在研究一个大型数据集(700 万行),试图了解各个自变量与因变量之间的相关性。当我运行 pcor(dataset) 时,如果与运行 cor(dataset) 相比,这会导致更高的相关性。
我的数据集有 6 个因变量和 84 个自变量。我正在分别找到每个因变量和 84 个自变量的偏相关。
我的自变量是文本类型的字数(75 个类别),以及其他一些社会变量(所有数字)等性别。
我的问题是:我不确定为什么在 R 中使用 pcor() 时会得到高相关性,而使用 cor() 会得到非常弱的相关性。这是偏相关的正常行为吗?
我正在尝试做一些非常简单的事情,计算作为 DataFrame 的列给出的几个变量的 Pearson 相关矩阵。我希望它忽略 nans 并提供 p 值。scipy.stats.pearsonr是不够的,因为它仅适用于两个变量并且无法解释 nan。应该有比这更好的东西......
例如,
df = pd.DataFrame([[1,2,3],[6,5,4],[1,None,9]])
0 1 2
0 1 2.0 3
1 6 5.0 4
2 1 NaN 9
Run Code Online (Sandbox Code Playgroud)
df 的列是变量,行是观测值。我想要一个返回 3x3 相关矩阵以及相应 p 值的 3x3 矩阵的命令。我希望它省略 None。也就是说,[1,6,1],[2,5,NaN]之间的相关性应该是[1,6]和[2,5]之间的相关性。
一定有一个很好的 Pythonic 方法来做到这一点,有人可以建议吗?
我试图将两个矩阵列相关。即将第一个矩阵的第一列与第二个矩阵的第一列相关联,依此类推。在 numpy 我做:
np.corrcoef(x, y, axis=0)
Run Code Online (Sandbox Code Playgroud)
而且效果很好。该命令的 Tensorflow 等效项是什么?
我尝试使用 streaming_pearson_correlation 1但这将所有列关联在一起而不是提供每列的结果。
作为最后的手段,我正在考虑将张量拆分为单独的列张量,但我猜这会产生性能成本。
我知道我可以将 numpy 包装在 py_func 中,但它不会在 GPU 上运行。
在此先感谢您的帮助。
我有一个这样的DataFrame
dict_ = {'Date':['2018-01-01','2018-01-02','2018-01-03','2018-01-04','2018-01-05'],'Col1':[1,2,3,4,5],'Col2':[1.1,1.2,1.3,1.4,1.5],'Col3':[0.33,0.98,1.54,0.01,0.99]}
df = pd.DataFrame(dict_, columns=dict_.keys())
Run Code Online (Sandbox Code Playgroud)
然后,我计算列之间的皮尔逊相关性,并过滤掉相关于我的阈值0.95以上的列
def trimm_correlated(df_in, threshold):
df_corr = df_in.corr(method='pearson', min_periods=1)
df_not_correlated = ~(df_corr.mask(np.eye(len(df_corr), dtype=bool)).abs() > threshold).any()
un_corr_idx = df_not_correlated.loc[df_not_correlated[df_not_correlated.index] == True].index
df_out = df_in[un_corr_idx]
return df_out
Run Code Online (Sandbox Code Playgroud)
产生
uncorrelated_factors = trimm_correlated(df, 0.95)
print uncorrelated_factors
Col3
0 0.33
1 0.98
2 1.54
3 0.01
4 0.99
Run Code Online (Sandbox Code Playgroud)
到目前为止,我对结果感到满意,但我想保留每个相关对中的一列,因此在上面的示例中,我想包含Col1或Col2。得到某物 像这样
Col1 Col3
0 1 0.33
1 2 0.98
2 3 1.54
3 4 0.01
4 5 0.99
Run Code Online (Sandbox Code Playgroud)
另外,我还可以做进一步的评估来确定保留哪些相关列?
谢谢
我正在尝试计算 2 个长度不同的数据集的相关系数。以下代码仅适用于等长数组。
import numpy as np
from scipy.stats.stats import pearsonr
a = [0, 0.4, 0.2, 0.4, 0.2, 0.4, 0.2, 0.5]
b = [25, 40, 62, 58, 53, 54]
print pearsonr(a, b)
Run Code Online (Sandbox Code Playgroud)
在我的情况下,b矢量长度可以在 50 - 100 个数据点之间变化。虽然我想要匹配的功能是标准的。附上的图片a。是否有其他首选模块可以匹配此类模式?
我需要两个矩阵 X,Y 之间的皮尔逊相关系数。如果我运行代码corr=numpy.corrcoef(X,Y)我的输出是一个具有相关系数的矩阵。但是我需要一个值来表示两个矩阵之间的相关性。
我刚刚在 kennytm 的答案中看到,要拥有一个值,我应该写numpy.corrcoef(X,Y)[1,0]。
这个解决方案有效,但我不明白方括号内的数字意味着什么,也不明白为什么将它们相加后我会得到一个值。
我将 1 和 0 解释为系数的限制,但是矩阵内的所有系数会发生什么情况?对它们进行什么类型的计算以获得单个值?例如,如果我更改方括号内的数字[1,-1](相关性、反相关性),则更改的值corr会导致我很困惑应该在括号内使用哪些数字。
我试图获得前一周输入的相关值到下周的输出.
为了这个例子,我已经设置了每周的输入将是下周的输出,并且df.corr()应该给出1.000000结果.
我的原始数据如下所示:
Date Input Output
1/1/2010 73 73
1/7/2010 2 73
1/13/2010 3 2
1/19/2010 4 3
Run Code Online (Sandbox Code Playgroud)
完整示例数据在此处上传:https: //drive.google.com/open?id = 0B4xdnV0LFZI1MzRUOUJkcUY4ajQ
到目前为止,这是我的代码:
import pandas as pd
df = pd.read_csv('pearson.csv')
df['Date'] = pd.to_datetime(df['Date'], errors = 'coerce')
df = df.set_index(pd.DatetimeIndex(df['Date']))
df = df[['Input', 'Output']]
x = df.corr(method = 'pearson', min_periods=1)
print(x)
Run Code Online (Sandbox Code Playgroud)
而作为一个新手在这里,我被卡住了.我没有看到shift函数中内置的选项,也不确定如何执行此操作.
任何和所有的帮助表示赞赏.
谢谢你,我
我正在尝试编写一个程序来确定pearson相关系数与python中的总体标准差.我认为这将是非常微不足道的,直到我到达我正在求和的部分(yi - μy)*(xi - μx).这是我的完整代码:
def r(x, y):
mx, my = sum(x) / len(x), sum(y) / len(y)
sdx, sdy = (sum([(xi-mx)**2 for xi in x]) / len(x))**0.5, (sum([(yi-
my)**2 for yi in y]) / (len(y)))**0.5
res = ((sum([(xi-mx)*(yi-my) for xi in x for yi in y]))/(len(x)*sdx*sdy))**0.5
return res
Run Code Online (Sandbox Code Playgroud)
我注意到结果非常小,所以我检查了(xi-mx)的总和:
sum([(xi-mx) for xi in x])
Run Code Online (Sandbox Code Playgroud)
结果是-9.769962616701378e-15.以下是列表中的值:
print([(xi-mx) for xi in x])
[3.2699999999999987, 3.0699999999999994, 1.2699999999999987, 1.0699999999999985, 0.9699999999999989, 0.2699999999999987, -0.7300000000000013, -1.7300000000000013, -2.7300000000000013, -4.730000000000001]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么python表现得如此奇怪吗?
我必须用C#编写代码
你能在下面给出的例子中逐步解释吗?
vector 1 : [0.3, 0, 1.7, 2.2]
vector 2 : [0, 3.3, 1.2, 0]
Run Code Online (Sandbox Code Playgroud)
非常
这将用于文档聚类
python ×7
correlation ×4
numpy ×3
python-3.x ×2
r ×2
c# ×1
coefficient-of-determination ×1
dataframe ×1
dplyr ×1
math ×1
pandas ×1
pearson ×1
scikit-learn ×1
scipy ×1
scipy.stats ×1
significance ×1
tensorflow ×1