【发布时间】:2017-11-24 18:34:02
【问题描述】:
我正在尝试根据协方差的某些部分是否属于某个因子,将协方差矩阵的某些部分转换为 0。一个简短的例子是一个 4x4 矩阵,它由 x 组成的两个因子组成:x1 和 x2,x3 和 x4。
以下代码生成协方差矩阵。
dataframe <- matrix(c(18, 29, 13, 56, 64, 23, 56, 92, 23, 65, 28, 54, 46, 82, 46, 92), 4, 4)
colnames(dataframe) <- (c("x1", "x2", "x3", "x4"))
rownames(dataframe) <- (c("x1", "x2", "x3", "x4"))
cov.d <- cov(dataframe)
round(cov.d, 2)
x1 x2 x3 x4
x1 368.67 294.67 252.33 414.00
x2 294.67 806.25 -161.50 80.83
x3 252.33 -161.50 409.67 446.33
x4 414.00 80.83 446.33 577.00
假设 x1 和 x2 是因子 1 的一部分,并且假设 x3 和 x4 是因子 2 的一部分,我希望输出如下所示:
x1 x2 x3 x4
x1 368.67 294.67 0 0
x2 294.67 806.25 0 0
x3 0 0 409.67 446.33
x4 0 0 446.33 577.00
我认为解决方案与循环和替换功能有关。
到目前为止,我已经尝试了以下参数设置:
num.factors <- 2; vars.per.factor <- 10; num.vars <- 20
for(k in 1:num.factors)
for(i in 1:vars.per.factor)
for(j in 1:num.vars) {
factor.cov <- replace(cov.d, cov.d[i + k * vars.per.factor - vars.per.factor, j + k * vars.per.factor - vars.per.factor], 0)
}
问题在于替换功能。具体来说,cov.d[i, i]。我知道 [i, i] 不是执行我需要它执行的操作所需的代码。但是,我在从这里去哪里画一个空白。我会玩弄它并更新我的进度。
感谢您的帮助!
【问题讨论】: