我有一个宏,用于对用户选择的数据执行 OLS 回归。这是我正在写的一个更大的补充的一部分,但我被困在我认为一定是一个简单的问题上。我不断收到下标超出范围错误,我认为这是因为我得到的矩阵大小与我期望的不同。
sub 将两个变量作为其参数,并根据规范计算 OLS 估计量。y 变量始终是 anx 1 范围(一列和多行),X 变量是 anxm 范围(可以是多列和多行)。当 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