【问题标题】:Stata Mata Programming Conformability ErrorStata Mata 编程一致性错误
【发布时间】:2017-10-18 16:31:16
【问题描述】:

您好,我需要 Stata 的 Mata 编程语言方面的帮助,以完成以下最小工作示例。

我正在尝试在尺寸为 600x1(V 矩阵)的指针矩阵中插入尺寸为 (1x200) 的子矩阵(由随机法线绘制生成)。

mata:
T=600     //number of markets
K_S=1    //number of variables with stochastic coefficients
R=200   //number of random draws
st_matrix("T", T)
//pointers to the market specific random draws:
V=J(T,1,NULL)   //   T by 1  0 matrix

for(t=1;t<=T;t++){ 
V[t]=(rnormal(K_S,R,0,1)) //dimension K_S x R
}
end

问题是我收到“rnormal(): 3200 一致性错误”

你能建议我做错了什么吗?

谢谢

【问题讨论】:

  • 在您的情况下,我无法通过 st_matrix("T", 600),它在 Stata (NB) 中创建了一个 1 x 1 并保持常数 600 的矩阵。这有什么意义?这对我来说看起来像是 XY 问题。您是否需要一个任何时候都为 600 x 200 的矩阵?如果是这样,为什么不直接生产呢?为什么需要指针? xyproblem.info

标签: matrix stata


【解决方案1】:

您正在尝试将K_S x R 矩阵分配给列向量中的单个单元格。必须分配一个指针,好吧,一个指针:

mata:
T   = 600 // number of markets
K_S = 1   // number of variables with stochastic coefficients
R   = 200 // number of random draws
st_matrix("T", T)

// pointers to the market specific random draws:
V = J(T, 1, NULL)  // T by 1  0 matrix

for(t=1; t<=T; t++){ 
    V[t]= &(rnormal(K_S, R, 0, 1)) //dimension K_S x R
}
end

在 mata 中,&amp; 符号表示指针。

【讨论】:

  • 谢谢毛里西奥。所以我尝试了更正,我得到了这个结果.. mata: V 1 +-------------+ 1 | 0xfa7f240 | 2 | 0xfa81cc0 | 3 | 0xfa80890 | 4 | 0xfa82320 | 5 | 0xfa82980 | 6 | 0xfa82870 | 7 | 0xfa82760 | 8 | 0xfa82210 | 9 | 0xfa81880 | 10 | 0xfa81990 | 11 | 0xfa80670 |你能告诉我这是什么意思吗?我以为我会在 600x1 的列向量中得到一个维度为 K_SxR 的子矩阵。我做错了吗?
  • @Ska 没有。您已经创建了 600 + 1 个对象。一个 600 x 1 向量和 600 K_S x R 矩阵。从字面上看,指针只是一个地址。所以 V 是一个有 600 个地址的向量,而实际的对象在其他地方。他们在哪?例如,V[1] 为“0xfa7f240”,即 K_S x R 矩阵在内存中的地址。您可以通过 *V[1]、*V[2] 等方式引用它们。
猜你喜欢
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多