Взвешенная корреляция

У меня есть два массива с плавающей запятой, и я хочу рассчитать взвешенную корреляцию, а это означает, что я хочу, чтобы некоторые из моих данных имели меньший вес, чем другие.

      X          Y        w
   2.02382   6.00298   0.43873
   3.94601   6.41983   0.36818
   3.76877   4.55656   0.49836
   3.68307   6.46925   0.95965
   3.09073   4.57723   0.88889
   2.56690   2.70020   0.72812
   3.35469   6.76874   0.26863
   3.88722   5.23205   0.77492
   3.29389   3.50355   0.79567
   3.80725   3.18414   0.82439

Итак, мне нужна корреляция между X и Y относительно весов w. Моя проблема в основном теоретическая, но в конце концов я хочу реализовать ее на C.


person Vahid Mirjalili    schedule 16.05.2013    source источник
comment
Вы пытаетесь заново изобрести надежную регрессию?   -  person smocking    schedule 17.05.2013
comment
Я просто хочу более глубоко изучить его теорию. Жаль, что я не могу загрузить диаграмму рассеяния моих данных здесь, чтобы понять, почему мне нужно взвешивать некоторые данные!   -  person Vahid Mirjalili    schedule 17.05.2013


Ответы (1)


Основная идея состоит в том, что всякий раз, когда вы видите E(...), вы заменяете 1/n на w/sum(w).

Теория:

Corr(X,Y) = E((X - E(X))*(Y - E(Y)) / SD(X)SD(Y) ;

Итак, сначала вычислите E(X) и E(Y).

E(X) = (2.02382 * .43873 + ... + 3.80725*.82439) / (.43873+...+.82439) = 3.368

E(Y) = [та же средневзвешенная идея] = 4,705

sd(X) = sqrt( var(X) ) = sqrt( E( (X-E(X))^2 ) ) = sqrt( ( (.43873)(2.02382-3.368)^2 + ... + (0,82439)(3,80725-3,368)^2 ) / (0,43873+...+0,82439) ) = sqrt(0,3054023) = 0,5526321

sd(Y) = [та же средневзвешенная идея] = sqrt(1,860124) = 1,363863

corr(x,y) = ((.43873)(2.02382-3.368)(6.00298-4.705)+...+(.82439)(3.80725-3.368)(3.18414-4.705) ) / ( (.43873+...+.82439)(.5526)(1.3634) ) = 0,2085651

person DonkTheHacker    schedule 19.12.2013
comment
Спасибо за предложение, это больше похоже на взвешенное усреднение! Я думаю, какое-то нечеткое решение сработает - person Vahid Mirjalili; 20.12.2013