程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何通过 boot::boot() 同时为多对变量引导相关性?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_0@如何解决如何通过 boot::boot() 同时为多对变量引导相关性?? 开发过程中遇到如何通过 boot::boot() 同时为多对变量引导相关性?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何通过 boot::boot() 同时为多对变量引导相关性?的解决方法建议,希望对你解决如何通过 boot::boot() 同时为多对变量引导相关性?有所启发或帮助;

我必须计算很多自举相关性 (Pearson r)。我对 R 的了解(更不用说编写我自己的函数)是有限的。到目前为止,我仅设法通过 boot::boot() 单独计算每个自举相关性,由于相关性数量众多,这非常耗时。

如何同时计算多个自举相关性?

这是我一直在成功使用的代码,即单独计算每个相关性。这意味着我必须重复这段代码大约 300 次,每次都交换一小部分代码。

bootPearsonSZ <- function(data,i){
  cor(BdSZ$ndh[i],BdSZ$nkr_erst[i],use = "complete.obs",method = "pearson") # BdSZ = name of the data tibble I'm working with 
}
set.seed(1)
boot_PearsonSZ <- boot(BdSZ,bootPearsonSZ,10000)
boot_PearsonSZ

mean(boot_PearsonSZ$t) #Shows me the bootstrapped value for Pearson r
boot.ci(boot.out = boot_PearsonSZ,type = "all",conf = 0.99) #Shows me the 99% conf. intervall

这是我用来一次计算至少一些相关性失败的代码。代码工作不正常: boot() 的输出只显示我函数中最后一行的相关性,即 cor(BdSZ$ndh[i],BdSZ$azr[i],method = "pearson")

bootPearsonSZ <- function(data,method = "pearson") # BdSZ = name of the data tibble I'm working with
  cor(BdSZ$ndh[i],BdSZ$nkr_ge[i],method = "pearson")
  cor(BdSZ$ndh[i],BdSZ$nkr_an[i],BdSZ$azr[i],method = "pearson") #Apparently only the last line of code will be used by boot() 
}
set.seed(1)
boot_PearsonSZ <- boot(BdSZ,10000)
boot_PearsonSZ

mean(boot_PearsonSZ$t)
boot.ci(boot.out = boot_PearsonSZ,conf = 0.99)

可能与回答我的问题相关的其他信息: 我有横截面和纵向日期。我想计算 4x7 = 28 对变量的相关性。 对于我研究的横截面部分,我必须为 3 个城区 + 所有区一起计算它们,这导致我执行 28x4 = 112 相关性。 对于纵向数据,我有一个地区但 7 年(+ 所有年份加在一起),这导致我执行 28x(7+1) = 224 相关性。

在计算相关性之前,我目前每次创建我的 tibble 的一个子集,其中只包含我想要计算自举相关性的地区或年份。也许有可能通过使用我编写的函数中的子集来解决这个问题(从而使其更简单)?

我非常感谢任何形式的帮助!


编辑:添加了@stephan-kolassa 要求的可重现示例:

library(boot)
library(tIDyr)
library(fauX)

Independentvariables <- rnorm_multi(n = 30,mu = c(100,100,100),sd = c(10,10,10),r = 0.25,varnames = c("IV1","IV2","IV3","IV4","IV5","IV6","IV7"),empirical = falSE)

Dependentvariable <- rnorm_multi(n = 30,r = 0.6,varnames = c("DV1","DV2","DV3","DV4"),empirical = falSE)

ID <- c(1:30)

mydata <- cbind(ID,Independentvariables,DependentvariablE)

bootPearson <- function(data,i){
  cor(mydata$DV1[i],mydata$IV1[i],method = "pearson") 
  cor(mydata$DV1[i],mydata$IV2[i],mydata$IV3[i],mydata$IV4[i],mydata$IV5[i],mydata$IV6[i],mydata$IV7[i],method = "pearson") 
}
set.seed(1)
boot_Pearson <- boot(mydata,bootPearson,2000)
boot_Pearson

mean(boot_Pearson$t) #Shows me the bootstrapped value for Pearson r
boot.ci(boot.out = boot_Pearson,conf = 0.99) #Shows me the 99% conf. intervall
@H_944_0@解决方法

您的 bootPearson() 函数没有执行您可能希望它执行的操作。现在,它计算七个不同的相关性但只返回最后一个 - 其他所有内容都被计算并丢弃。在 R 中,函数只返回在函数体中创建的最后一个结果。您可能想了解 R 函数的工作原理。

解决方案很简单:只需更改 bootPearson() 以创建并返回单个对象 - 即长度为 7 的向量,其中包含您计算的七个相关性。使用 c() 命令将它们连接成一个向量:

bootPearson <- function(data,i){
    c(cor(mydata$DV1[i],mydata$IV1[i],use = "complete.obs",method = "pearson"),cor(mydata$DV1[i],mydata$IV2[i],mydata$IV3[i],mydata$IV4[i],mydata$IV5[i],mydata$IV6[i],mydata$IV7[i],method = "pearson")) 
}

当然,您现在还可以在此函数中循环遍历 DV 和 IV 并填充结果向量(使用计数器指向正确的条目)——无需复制 28 行几乎相同的行。

bootPearson <- function(data,i){
    result <- rep(NA,28)
    pointer <- 1
    for ( iv in 1:7 ) {
        for ( dv in 1:4 ) {
            result[pointer] <- cor(mydata[i,iv+1],mydata[i,dv+8],method = "pearson")
            pointer <- pointer+1
        }
    }
    result
}

注意最后的 result 如何使函数返回整个向量。

大佬总结

以上是大佬教程为你收集整理的如何通过 boot::boot() 同时为多对变量引导相关性?全部内容,希望文章能够帮你解决如何通过 boot::boot() 同时为多对变量引导相关性?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:如何通过