提问人:Anne 提问时间:2/13/2023 更新时间:2/13/2023 访问量:37
如何在 R 中对加权相关进行引导?
How to perform bootstrap on weighted correlation in R?
问:
我正在尝试在 R 中引导加权相关性,不同的数据流具有单独的权重。
一些示例数据:
DF = data.frame(
x = c(-0.3, 0.3, -0.18, 0.02, 0.07, 0.11, 0.20, 0.8, 0.3, -0.4),
x_weight = c(50, 40, 70, 5, 15, 30, 32, 13, 9, 19),
y = c(-0.6, 0.25, 0.1, 0.3, 0.3, -0.05, -0.5, 1, 0.05, -0.6),
y_weight = c(70, 8, 10, 39, 9, 49, 90, 77, 23, 75)
)
DF
因为 x 和 y 的权重不同,我不能使用 cov.wt,但我需要自行定义公式(感谢这篇文章中的答案:使用 R 中每个变量的不同向量权重计算加权相关性)
首先计算加权协方差
library(Hmisc)
cov =
sum(((DF$x - wtd.mean(x=DF$x, w=DF$x_weight)) * DF$x_weight) * ((DF$y - wtd.mean(x=DF$y, w=DF$y_weight)) * DF$y_weight)) /
sum(DF$x_weight * DF$y_weight)
然后计算加权相关性
cor = cov / (sqrt(sum((DF$x - wtd.mean(x=DF$x, w=DF$x_weight))^2 * DF$x_weight) / sum(DF$x_weight)) *
sqrt(sum((DF$y - wtd.mean(x=DF$y, w=DF$x_weight))^2 * DF$y_weight) / sum(DF$y_weight)))
这可行,但我想引导加权相关性,我没有成功。
这是我的尝试:
weightedcorrelation = function(DF){
cov = sum(((DF$x - wtd.mean(x=DF$x, w=DF$x_weight)) * DF$x_weight) * ((DF$y - wtd.mean(x=DF$y, w=DF$y_weight)) * DF$y_weight)) / sum(DF$x_weight * DF$y_weight)
cor = cov / (sqrt(sum((DF$x - wtd.mean(x=DF$x, w=DF$x_weight))^2 * DF$x_weight) / sum(DF$x_weight)) * sqrt(sum((DF$y - wtd.mean(x=DF$y, w=DF$x_weight))^2 * DF$y_weight) / sum(DF$y_weight)))
return(cor)
}
weightedcorrelation(DF)
library(boot)
boot(data = DF[, , drop=F],
statistic = weightedcorrelation,
R = 1000)
我在统计参数上遇到错误。 此外,boot 可以选择包含 weights 参数,我现在没有使用。
答:
0赞
langtang
2/13/2023
#1
你可以调整你的函数,使它接受两个参数(如果你正在做(这是你正在做的事情,给定你当前的调用),则需要;这两个参数是(数据)和(例如)(索引):weightedcorrelation
sim="ordinary"
boot()
d
i
weightedcorrelation = function(d,i){
DF = d[i,]
cov = sum(((DF$x - wtd.mean(x=DF$x, w=DF$x_weight)) * DF$x_weight) * ((DF$y - wtd.mean(x=DF$y, w=DF$y_weight)) * DF$y_weight)) / sum(DF$x_weight * DF$y_weight)
cor = cov / (sqrt(sum((DF$x - wtd.mean(x=DF$x, w=DF$x_weight))^2 * DF$x_weight) / sum(DF$x_weight)) * sqrt(sum((DF$y - wtd.mean(x=DF$y, w=DF$x_weight))^2 * DF$y_weight) / sum(DF$y_weight)))
return(cor)
}
评论
0赞
Anne
2/14/2023
谢谢!您的代码似乎可以正常工作,但我不明白如何?i 是否将原始的 x 和 x_weight(以及 y 和 y_weight)组合放在一起?例如,x = -0.3 在引导程序中是否仍然有 50 的权重?
评论