module Numeric.Statistics.Covariance (cov) where
import Numeric.Statistics.Moment
cov :: (Fractional a) => [a] -> [a] -> a
cov :: forall a. Fractional a => [a] -> [a] -> a
cov [a]
x1 [a]
x2 = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
Prelude.sum (forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith forall a. Num a => a -> a -> a
(*) (forall a b. (a -> b) -> [a] -> [b]
map a -> a
f1 [a]
x1) (forall a b. (a -> b) -> [a] -> [b]
map a -> a
f2 [a]
x2)) forall a. Fractional a => a -> a -> a
/ (a
n forall a. Num a => a -> a -> a
- a
1)
where mu1 :: a
mu1 = forall a. Fractional a => [a] -> a
mean [a]
x1
mu2 :: a
mu2 = forall a. Fractional a => [a] -> a
mean [a]
x2
n :: a
n = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Int
length forall a b. (a -> b) -> a -> b
$ [a]
x1
f1 :: a -> a
f1 = \a
x -> (a
x forall a. Num a => a -> a -> a
- a
mu1)forall a b. (Num a, Integral b) => a -> b -> a
^(Int
2::Int)
f2 :: a -> a
f2 = \a
x -> (a
x forall a. Num a => a -> a -> a
- a
mu2)forall a b. (Num a, Integral b) => a -> b -> a
^(Int
2::Int)