2013-12-09 30 views
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 

回答

1

當你指的是一個範圍或從片材陣列始終是一個2維陣列帶來的數據。第一個維度是行,第二個維度是列。

這是VBA中excel混淆的常見問題,因爲它是在沒有您的干預的情況下完成的。


您的代碼是正確的。

對於更深入的信息,請查看本post

+0

所以反正是有2維數組轉換成一個維數組?目前我只是使用錯誤處理來解決它。 –

+0

通過一個循環並分配給另一個是我意識到VBA會支持的唯一途徑。 –