Pearson Correlation SQL Server

问题描述 投票:2回答:2

我有两张桌子:

ID,YRMO,计数

1,2013年12月4

1,2014年1月6

1,2014年2月7

2,扬,2014,6

2,二月,2014,8

ID,YRMO,计数

1,2013年12月10日

1,2014年1月8日

1,2014年3月12

2,2014年1月6日

2,2014年2月,10

我想找到每组ID的皮尔森相关系数。大约有200多种不同的IDS。

Pearson相关性是两个变量X和Y之间的线性相关(依赖性)的度量,给出+1和-1之间的值

更多信息可以在这里找到:http://oreilly.com/catalog/transqlcook/chapter/ch08.html计算相关部分

sql sql-server
2个回答
3
投票

计算Pearson相关系数;你需要首先计算qazxsw poi而不是qazxsw poi然后qazxsw poi如下所述

1.计算平均值

Mean

2.计算标准偏差

standard daviation

3.最后correlation coefficient

insert into tab2 (tab1_id, mean)
select ID, sum([counts]) / 
(select count(*) from tab1) as mean
from tab1
group by ID;

您发布的数据中的哪个结果

在这里看一个演示小提琴update tab2 set stddev = ( select sqrt( sum([counts] * [counts]) / (select count(*) from tab1) - mean * mean ) stddev from tab1 where tab1.ID = tab2.tab1_id group by tab1.ID);

编辑:

精致一点。您可以使用以下功能获得PCC,但我得到的结果与您的完全相同,而是获得Pearson Correlation Coefficientselect ID, ((sf.sum1 / (select count(*) from tab1) - stats1.mean * stats2.mean ) / (stats1.stddev * stats2.stddev)) as PCC from ( select r1.ID, sum(r1.[counts] * r2.[counts]) as sum1 from tab1 r1 join tab1 r2 on r1.ID = r2.ID group by r1.ID ) sf join tab2 stats1 on stats1.tab1_id = sf.ID join tab2 stats2 on stats2.tab1_id = sf.ID

这可能是一个很好的切入点。您可以从此处进一步细化计算。

http://sqlfiddle.com/#!3/0da20/5

像这样调用函数

0.999996000000000

2
投票

A Single-Pass Solution:

Pearson相关系数有两种,一种用于样本,一种用于整个种群。这些都很简单,单通,我相信,两者的正确公式:

ID = 1

正如我在评论中所指出的那样,您可以尝试使用TOP 100或更低的示例进行完全关联(对于所有情况,y = x); TOP 200产生的相关性非常接近0.5; TOP 300,约0.33;如果你愿意,有一个地方(“+ 0”)可以添加一个偏移;扰流警报,它没有任何影响。确保将值设置为DECIMAL - 整数数学可以显着影响这些计算。

© www.soinside.com 2019 - 2024. All rights reserved.