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會支持的唯一途徑。 –