回归输出中的变量变量出错

时间:2013-12-09 06:02:14

标签: excel-vba economics vba excel

我有一个宏,用于对用户选择的数据执行OLS回归。这是我写作的一个更大的补充的一部分,但我坚持我认为必须是一个简单的问题。我不断得到一个超出范围错误的下标,我认为这是因为我得到了一个与我期望的不同的矩阵。

sub将两个变量作为参数,并根据规范计算OLS估算器。 y变量始终是n x 1范围(一列和多行),X变量是n x m范围(可以是多列和多行)。当X是单列范围时使用此函数时,For... Next块适用于以下代码:

For bcnt = 1 To k
    Cells(bcnt, 1).Value = b(bcnt)
Next bcnt

但是如果X变量是多列范围,那么这将不起作用,它必须是以下内容:

For bcnt = 1 To k
    Cells(bcnt, 1).Value = b(bcnt,1)
Next bcnt

我无法理解为什么我的理解b应始终是一维数组。

感谢任何帮助。

实际的子资料

Sub OLSregress(y As Variant, X As Variant)
Dim Xtrans, XtransX, XtransXinv, Xtransy As Variant
Dim outputsheet As Worksheet
Dim b As Variant

' The equation for this estimator is b=[X'X]^(-1)X'Y


Xtrans = Application.WorksheetFunction.Transpose(X)
XtransX = Application.WorksheetFunction.MMult(Xtrans, X)
XtransXinv = Application.WorksheetFunction.MInverse(XtransX)
Xtransy = Application.WorksheetFunction.MMult(Xtrans, y)
b = Application.WorksheetFunction.MMult(XtransXinv, Xtransy)
k = Application.WorksheetFunction.Count(b)

Set ouputsheet = Sheets.Add(, ActiveSheet)
ActiveSheet.Name = "Regression Output"
For bcnt = 1 To k
    Cells(bcnt, 1).Value = b(bcnt, 1)
Next bcnt

End Sub

1 个答案:

答案 0 :(得分:1)

当您引用范围或从工作表中引入数据时,数组始终是二维数组。第一个维度是行,第二个维度是列。

这是VBA for excel的常见混淆点,因为它是在没有您干预的情况下完成的。


您的代码是正确的。

有关更深入的信息,请查看此post