我使用scipy pearsonr(x,y)方法,我无法弄清楚为什么会发生这种错误.它计算前两个(我在循环中运行数千个这样的测试)然后死掉.有没有人对问题可能是什么有任何想法?
r_num = n*(np.add.reduce(xm*ym))
Run Code Online (Sandbox Code Playgroud)
这是发生错误的pearsonr方法中的行,任何帮助都将非常感谢谢谢!
我正在使用Python库scipy来计算两个浮点数组的Pearson相关性.即使数组不同,系数的返回值也始终为1.0.例如:
[-0.65499887 2.34644428]
[-1.46049758 3.86537321]
Run Code Online (Sandbox Code Playgroud)
我用这种方式调用例程:
r_row, p_value = scipy.stats.pearsonr(array1, array2)
Run Code Online (Sandbox Code Playgroud)
值r_row始终为1.0.我究竟做错了什么?
快速提问:有没有办法在scipy中使用'dropna'和Pearson的r函数?我正在将它与熊猫一起使用,我的一些数据中有漏洞.我知道你曾经能够在较旧版本的scipy中使用Spearman的r来抑制'nan' ,但是现在缺少这个功能.
在我看来,这似乎是一种不妥协,所以我想知道我是否遗漏了一些明显的东西.
我的代码:
for i in range(len(frame3.columns)):
correlation.append(sp.pearsonr(frame3.iloc[ :,i], control['CONTROL']))
Run Code Online (Sandbox Code Playgroud) 我在我的数据上运行 scipy.stats.pearsonr,我得到
(0.9672434106763087, 0.0)
r 值高而 p 值非常低是合理的。但是,p显然不是0,所以我想知道p=0.0是什么意思。是 p<10^-10,p<10^-100 还是极限?
我想在Matlab中计算Pearson的相关系数(不使用Matlab的corr函数).
简单地说,我有两个向量A和B(每个向量都是1x100),我试图像这样计算Pearson系数:
P = cov(x, y)/std(x, 1)std(y,1)
Run Code Online (Sandbox Code Playgroud)
我正在使用Matlab cov和std函数.我没有得到的是,cov函数返回一个方形矩阵,如下所示:
corrAB =
0.8000 0.2000
0.2000 4.8000
Run Code Online (Sandbox Code Playgroud)
但我希望单个数字作为协方差,所以我可以得出一个P(皮尔逊系数)数.我错过了什么?
我正在使用协同过滤构建推荐引擎.对于相似性分数,我使用Pearson相关性.这在大多数情况下都很棒,但有时我的用户只共享1或2个字段.例如:
User 1{
a: 4
b: 2
}
User 2{
a: 4
b: 3
}
Run Code Online (Sandbox Code Playgroud)
由于这只是2个数据点,因此Pearson相关性总是1(直线或完美相关).这显然不是我想要的,那么我应该使用什么价值呢?我可以扔掉所有这样的实例(给出0的相关性),但我的数据现在非常稀疏,我不想丢失任何东西.我可以使用哪些相似度得分与其他相似度得分(所有Pearson)相符合?
recommendation-engine sparse-matrix collaborative-filtering pearson
我正在从用户评级数据(特别是MovieLens100K数据)生成用户 - 用户相似度矩阵.计算相关性导致一些NaN值.我在一个较小的数据集中测试过:
用户 - 项目评级矩阵
I1 I2 I3 I4
U1 4 0 5 5
U2 4 2 1 0
U3 3 0 2 4
U4 4 4 0 0
Run Code Online (Sandbox Code Playgroud)
用户 - 用户Pearson相关相似度矩阵
U1 U2 U3 U4 U5
U1 1 -1 0 -nan 0.755929
U2 -1 1 1 -nan -0.327327
U3 0 1 1 -nan 0.654654
U4 -nan -nan -nan -nan -nan
U5 0.755929 -0.327327 0.654654 -nan 1
Run Code Online (Sandbox Code Playgroud)
为了计算皮尔逊相关性,在两个用户之间仅考虑经过指定的项目.(参见下一代推荐系统:对最新技术和可能扩展的调查,Gediminas Adomavicius,Alexander Tuzhilin
我该如何处理NaN值?
编辑
这是一个代码,我在其中找到R中的皮尔森相关性.R矩阵是用户项目评级矩阵.包含1到5刻度等级0表示未评级.S是用户 - …
我试图获得数据框中所有行相对于彼此的Pearson相关系数.有些值是空的(NA),这似乎是一个问题,我在两个缺少值的向量上运行cor()时没有遇到这个问题.这是2个向量的正确结果:
x <- c(NA, 4.5, NA, 4, NA, 1)
y <- c(2.5, 3.5, 3, 3.5, 3, 2.5)
cor(x,y, use = "complete.obs")
[1] 0.9912407
Run Code Online (Sandbox Code Playgroud)
这是结果,当它们是数据框的一部分时:
cor(t(critics1), use = "complete.obs")
y a b c d e x
y 1 NA NA NA NA NA NA
a NA 1 1 1 -1 1 -1
b NA 1 1 1 -1 1 -1
c NA 1 1 1 -1 1 -1
d NA -1 -1 -1 1 -1 1
e NA 1 1 1 …Run Code Online (Sandbox Code Playgroud) 虽然它们非常相似,但我确信皮尔逊相关相似度和调整余弦相似度之间存在一些差异,因为所有论文和网页都将它们分为两种不同的类型。
然而,他们都没有提供明确的定义。这是其中一页。
谁能说出其中的区别吗?
谢谢
我正在尝试获取R中变量之间的Pearson相关系数。这是变量的散点图:
ggplot(results_summary, aes(x =D_in, y = D_ex)) + geom_point(col=ifelse(results_summary$FDR < 0.05, ifelse(results_summary$logF>0, "red", "green" ), "black"))
Run Code Online (Sandbox Code Playgroud)
如您所见,变量之间的相关性很好,因此我期望相关系数很高。但是,当我尝试获得Pearson相关系数时,我得到的是NaN!
> cor(results_summary$D_in, results_summary$D_ex, method="spearman")
[1] 0.868079
> cor(results_summary$D_in, results_summary$D_ex, method="kendall")
[1] 0.6973086
> cor(results_summary$D_in, results_summary$D_ex, method="pearson")
[1] NaN
Run Code Online (Sandbox Code Playgroud)
我检查了我的数据是否包含任何NaN:
> nrow(subset(results_summary, is.nan(results_summary$D_ex)==TRUE))
[1] 0
> nrow(subset(results_summary, is.nan(results_summary$D_in)==TRUE))
[1] 0
> cor(results_summary$D_in, results_summary$D_ex, method="pearson", use="complete.obs")
[1] NaN
Run Code Online (Sandbox Code Playgroud)
但是似乎这不是产生NaN的原因。有人可以提供任何有关这里可能发生的情况的线索吗?
谢谢你的时间!
pearson ×10
correlation ×4
r ×3
scipy ×3
nan ×2
python ×2
statistics ×2
dataframe ×1
matlab ×1
pandas ×1
similarity ×1