【发布时间】:2020-12-30 02:03:43
【问题描述】:
我想为数据的每一行 (N = 500) 填充一个 2x2 矩阵。
N = 500 # Number of observations
S = 2 # Number of rows and columns of the data
假设这是我的示例数据。它包含 5 个协变量的 500 个观测值。
X <- data.frame(matrix(rexp(2500, rate=.1), ncol=5))
X
从我的模型中,我为每个协变量检索了 2 个系数。
beta <- data.frame(matrix(rexp(10, rate=.1), ncol=5))
beta
因为我想为每行数据填充一个 2x2 矩阵,所以我创建了一个大小为 22n 的输出数组。
output_array = array(NA, dim = c(S,S,N))
现在我想用以下方式填充这个数组:
- 如果 2x2 矩阵中的位置是 [1,1] 或 [2,2],我希望它是 1。
- 如果矩阵中的位置是[1,2],我希望它是beta第一行和X第一行系数的乘积
- 如果矩阵中的位置是 [2,1],我希望它是 beta 的第二行和 X 的第一行中的系数的乘积
我想对所有 500 行数据执行此过程(...所以它遍历行),得到 500 个 2x2 矩阵(每行数据一个)。
我的想法是以下函数,但似乎尺寸不匹配,我做错了什么。
for(t in 1:N){
betarow = 1
for (k in 1:S){
for (j in 1:S){
if(k == j){
output_array[t,k,j] = 1;
} else {
output_array = X1[t,]*beta[betarow]
betarow = betarow + 1;
}
}
}
}
【问题讨论】:
-
但在 R 中,5 元素向量和 5 元素向量的乘积是另一个 5 元素向量,其值按元素相乘。您是否希望将所有十个数字相乘并将其放入非对角单元格中?
-
谢谢,艾伦。我没有正确指定它:我正在寻找的是该行中每个 X 值与相应 beta 值(同一列位置的 beta 值)的乘积之和。使用上面的函数来实现它会很棒。期待您的回答!
-
OK Scijens - 我已经更新了我的答案,现在应该可以解决问题了。
标签: r arrays function matrix pipe