gpt4 book ai didi

r - 加权 Pearson 相关系数?

转载 作者:行者123 更新时间:2023-12-03 23:14:50 30 4
gpt4 key购买 nike

我有一个 2396x34 double matrix命名 y其中每一行 (2396) 代表一个单独的情况,由 34 个连续的时间段组成。

我也有 numeric[34]命名 x这代表了 34 个连续时间段的单一情况。

目前我正在计算 y 中每一行之间的相关性和 x像这样:
crs[,2] <- cor(t(y),x)
我现在需要的是更换cor上述语句中的函数具有加权相关性。权重向量 xy.wt长度为 34 个元素,因此可以为 34 个连续时间段中的每一个分配不同的权重。

我找到了 Weighted Covariance Matrix功能 cov.wt 并认为如果我先scale它应该像 cor 一样工作的数据功能。事实上,您也可以指定函数返回相关矩阵。不幸的是,我似乎无法以相同的方式使用它,因为我无法分别提供我的两个变量( xy )。

有谁知道我可以以我描述的方式获得加权相关性而不牺牲太多速度的方法?

编辑:也许一些数学函数可以应用于 ycor 之前函数以获得与我正在寻找的相同结果。也许如果我将每个元素乘以 xy.wt/sum(xy.wt) ?

编辑 #2 我发现了另一个函数 corr boot包裹。

corr(d, w = rep(1, nrow(d))/nrow(d))

d
A matrix with two columns corresponding to the two variables whose correlation we wish to calculate.

w
A vector of weights to be applied to each pair of observations. The default is equal weights for each pair. Normalization takes place within the function so sum(w) need not equal 1.

这也不是我需要的,但它更接近。

编辑 #3
这是一些生成我正在使用的数据类型的代码:
x<-cumsum(rnorm(34))
y<- t(sapply(1:2396,function(u) cumsum(rnorm(34))))
xy.wt<-1/(34:1)

crs<-cor(t(y),x) #this works but I want to use xy.wt as weight

最佳答案

不幸的是,当 y 时,接受的答案是错误的是一个多于一行的矩阵。错误在行中

vy <- rowSums( w * y * y )

我们想乘以 y 的列来自 w ,但这会将行乘以 w 的元素,必要时回收。因此
> f(x, y[1, , drop = FALSE], xy.wt)
[1] 0.103021

是正确的,因为在这种情况下,乘法是按元素执行的,这相当于此处的按列乘法,但是
> f(x, y, xy.wt)[1]
[1] 0.05463575

由于逐行乘法,给出了错误的答案。

我们可以按如下方式修正函数
f2 <- function( x, y, w = rep(1,length(x))) {
stopifnot(length(x) == dim(y)[2] )
w <- w / sum(w)
# Center x and y, using the weighted means
x <- x - sum(x * w)
ty <- t(y - colSums(t(y) * w))
# Compute the variance
vx <- sum(w * x * x)
vy <- colSums(w * ty * ty)
# Compute the covariance
vxy <- colSums(ty * x * w)
# Compute the correlation
vxy / sqrt(vx * vy)
}

并根据 corr 产生的结果检查结果来自 boot包裹:
> res1 <- f2(x, y, xy.wt)
> res2 <- sapply(1:nrow(y),
+ function(i, x, y, w) corr(cbind(x, y[i,]), w = w),
+ x = x, y = y, w = xy.wt)
> all.equal(res1, res2)
[1] TRUE

这本身提供了可以解决此问题的另一种方法。

关于r - 加权 Pearson 相关系数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460664/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com