【问题标题】:Is there a way in R for doing a pairwise-weighted correlation matrix?R中有没有办法做一个成对加权相关矩阵?
【发布时间】:2021-03-21 14:31:47
【问题描述】:

我进行了一项调查,其中包含大量数字变量(连续变量和虚拟二进制变量)以及 800 多个观察值。当然,大多数变量都缺少数据(以不同的速率)。我需要使用加权相关表,因为有些样本比其他样本代表更多的人口。另外,我想尽量减少未使用的样本,并以这种方式保持最大值。每对变量的观察值。我知道如何做一个成对相关矩阵(例如,cor(data, use="pairwise.complete.obs"))。我也知道如何做一个加权相关矩阵(例如,cov.wt(data %>% select(-weight), wt=data$weight, cor=TRUE))。但是,我找不到同时使用两者的方法()。有没有办法在 R 中做一个成对加权相关矩阵?如果有任何帮助或建议,非常感谢。

【问题讨论】:

    标签: r statistics correlation weighted pairwise


    【解决方案1】:

    好问题 这是我怎么做的 它不快,但比循环快。

    df_correlation 是一个数据框,其中只有我想计算相关性的变量 newdf 是我的原始数据框,带有权重和其他变量

       data_list <- combn(names(df_correlation),2,simplify = FALSE)
        data_list <- map(data_list,~c(.,"BalancingWeights"))
    
        dimension <- length(names(df_correlation))
        allcorr <- matrix(data =NA,nrow = dimension,ncol = dimension)
        row.names(allcorr)<-names(df_correlation)
        colnames(allcorr) <- names(df_correlation)
    
    myfunction<- function(data,x,y,weight){
      indice <-!(is.na(data[[x]])|is.na(data[[y]]))
     return(wCorr::weightedCorr(data[[x]][indice], 
                                 data[[y]][indice], method = c("Pearson"), 
                 weights = data[[weight]][indice], ML = FALSE, fast = TRUE))
    }
    
    b <- map_dbl(data_list,~myfunction(newdf,.[1],.[2],.[3]))
    
    
    allcorr[upper.tri(allcorr, diag = FALSE)]<- b
    
    allcorr[lower.tri(allcorr,diag=FALSE)] <- b
    view(allcorr)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多