R中有没有办法做成对加权相关矩阵?
Is there a way in R for doing a pairwise-weighted correlation matrix?
我有一个包含大量数值变量(连续变量和虚拟二进制变量)和 800 多个观测值的调查。当然,大多数变量都缺少数据(以不同的比率)。我需要使用加权相关性 table,因为有些样本比其他样本代表更多的人口。另外,我想尽量减少 未使用的样本 ,并以这种方式保持最大值。每对变量的观察值。我知道如何做一个成对相关矩阵(例如,cor(data, use="pairwise.complete.obs")
)。我也知道如何做一个加权相关矩阵(例如,cov.wt(data %>% select(-weight), wt=data$weight, cor=TRUE)
)。但是,我找不到将两者结合使用的方法(还)。有没有办法在 R 中做成对加权相关矩阵?如果有任何帮助或建议,非常感谢。
好问题
我是怎么做的
速度不快但比循环快
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)
我有一个包含大量数值变量(连续变量和虚拟二进制变量)和 800 多个观测值的调查。当然,大多数变量都缺少数据(以不同的比率)。我需要使用加权相关性 table,因为有些样本比其他样本代表更多的人口。另外,我想尽量减少 未使用的样本 ,并以这种方式保持最大值。每对变量的观察值。我知道如何做一个成对相关矩阵(例如,cor(data, use="pairwise.complete.obs")
)。我也知道如何做一个加权相关矩阵(例如,cov.wt(data %>% select(-weight), wt=data$weight, cor=TRUE)
)。但是,我找不到将两者结合使用的方法(还)。有没有办法在 R 中做成对加权相关矩阵?如果有任何帮助或建议,非常感谢。
好问题 我是怎么做的 速度不快但比循环快
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)