【问题标题】:Error with variant variable in regression output回归输出中的变量变量错误
【发布时间】:2013-12-09 06:02:13
【问题描述】:

我有一个宏,用于对用户选择的数据执行 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

【问题讨论】:

    标签: excel economics vba


    【解决方案1】:

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

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


    你的代码是正确的。

    如需更深入的信息,请查看post

    【讨论】:

    • 那么有没有办法将二维数组转换为一维数组?目前我只是使用错误处理来解决它。
    • 循环遍历一个并分配给另一个是我知道 VBA 支持的唯一方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多