R 按组划分的协方差矩阵,大量NA

R 按组划分的协方差矩阵,大量NA,r,covariance,R,Covariance,这是我先前关于大型数据集的帖子()的后续问题。我有6个变量(HML、RML、FML、TML、HFD和BIB),我正在尝试为它们创建特定于组的协方差矩阵(基于变量组)。然而,我在这6个变量中有很多缺失的数据(不在组中),我需要能够在分析中使用这些数据-按行删除或省略不是本研究的好选择 我将数据集缩小为实际感兴趣变量的矩阵,包括: >MMatrix = MMatrix2[1:2187,4:10] 这在计算总体协方差矩阵时非常有效: >cov(MMatrix, use="pairwise

这是我先前关于大型数据集的帖子()的后续问题。我有6个变量(HML、RML、FML、TML、HFD和BIB),我正在尝试为它们创建特定于组的协方差矩阵(基于变量组)。然而,我在这6个变量中有很多缺失的数据(不在组中),我需要能够在分析中使用这些数据-按行删除或省略不是本研究的好选择

我将数据集缩小为实际感兴趣变量的矩阵,包括:

>MMatrix = MMatrix2[1:2187,4:10]
这在计算总体协方差矩阵时非常有效:

>cov(MMatrix, use="pairwise.complete.obs",method="pearson")
为了按组列出协方差矩阵,我将原始数据矩阵转换为一个数据帧(因此我可以使用$indicator),其中包括:


>CovDataM cov.list这里有一个例子可以帮助您:

# Create some fake data
m <- matrix(runif(6000), ncol=6, 
            dimnames=list(NULL, c('HML', 'RML', 'FML', 'TML', 'HFD', 'BIB')))

# Insert random NAs
m[sample(6000, 500)] <- NA

# Create a factor indicating group levels
grp <- gl(4, 250, labels=paste('group', 1:4))

# Covariance matrices by group
covmats <- by(m, grp, cov, use='pairwise')
#创建一些虚假数据

你的问题是lapply对你的单子处理得很奇怪。如果您运行此代码(我希望与您的代码非常类似):


它似乎工作得很好。希望这能概括您的问题。

组在您的数据中是大写的,但在您的代码中不是。请告诉我:)“by”绝对是正确的选择。
>cov.list <- lapply(unique(CovDataM$group),function(x)cov(CovDataM[CovDataM$group==x,-1]))
# Create some fake data
m <- matrix(runif(6000), ncol=6, 
            dimnames=list(NULL, c('HML', 'RML', 'FML', 'TML', 'HFD', 'BIB')))

# Insert random NAs
m[sample(6000, 500)] <- NA

# Create a factor indicating group levels
grp <- gl(4, 250, labels=paste('group', 1:4))

# Covariance matrices by group
covmats <- by(m, grp, cov, use='pairwise')
CovData <- matrix(1:75, 15) 
CovData[3,4] <- NA
CovData[1,3] <- NA
CovData[4,2] <- NA
CovDataM <- data.frame(CovData, "group" = c(rep("a",5),rep("b",5),rep("c",5)))

colnames(CovDataM) <- c("a","b","c","d","e", "group")
lapply(unique(as.character(CovDataM$group)), function(x) print(x))
by(CovDataM[ ,1:5], CovDataM$group, cov, use = "pairwise.complete.obs", method = "pearson")