1
我有一个宏被写入来对用户选择的数据执行OLS回归。这是我正在写的一个更大的补充,但我坚持我认为必须是一个简单的问题。我不断收到一个下标超出范围的错误,我认为它是因为我得到了一个不同大小的矩阵来满足我的期望。回归输出中变量变量的错误
该子接受两个变量作为它的参数并计算给定规范的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
所以反正是有2维数组转换成一个维数组?目前我只是使用错误处理来解决它。 –
通过一个循环并分配给另一个是我意识到VBA会支持的唯一途径。 –