Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 15
Default Runtime Error 1004 on Linest

I'm trying to create a VBA macro that calculates the coefficients/T-stats and R-square for each variable with in a regression. The trick is that I have 10 candidate independent variables and I'd like to be able to test each combination of these variables.

I created some code that used fixed ranges for the Linest calc and that worked.
I got some help creating code that selected each unique combination.
But when I put these together - I get a runtime error 1004 on the linest.
I know that it has something to do with how I'm assigning the unique combination to a range that will be used in the Linest calculation.

I would appreciate any thoughts on how to correct this.

Regards - Marston

Here is the code below:

Option Base 1
Option Explicit
Sub combinKofN()
Dim rngs
Dim nRngs As Long, maxCombin As Long, nCombin As Long
Dim nSelect As Long, i As Long, j As Long
Dim r As String
Dim xRng As Range
Dim yRng As Range
Dim v
Dim k As Integer

rngs = Array("A2:A112", "B2:B112", "C2:C112", "D2:D112", "E2:E112", "F2:F112", "G2:G112", "H2:H112", "I2:I112", "J2:J112")
Set yRng = Range("K2:K112")
yRng.Select
nRngs = UBound(rngs)
k = 0
For nSelect = nRngs To 1 Step -1
maxCombin = WorksheetFunction.Combin(nRngs, nSelect)
ReDim idx(1 To nSelect) As Long
For i = 1 To nSelect: idx(i) = i: Next

nCombin = 0
Do
' generate next combination
nCombin = nCombin + 1
r = rngs(idx(1))
For i = 2 To nSelect
r = r & "," & rngs(idx(i))
Next
Set xRng = Range(r)
'visually make sure the correct range is being selected
'xRng = Range("A2:J112") ' this works when I utilize this instead
xRng.Select
v = Application.WorksheetFunction.LinEst(yRng, xRng, 0, True)
' ...coefficient
Range("M2").Offset(4 * k + 2, 0) = v(1, 1)
' ...T-stat
Range("M2").Offset(4 * k + 3, 0) = Abs(v(1, 1) / v(2, 1))
' ...R-squared
Range("M2").Offset(4 * k + 4, 0) = v(3, 1)
k = k + 1

If nCombin = maxCombin Then Exit Do

' next combination index
i = nSelect: j = 0
While idx(i) = nRngs - j
i = i - 1: j = j + 1
Wend
idx(i) = idx(i) + 1
For j = i + 1 To nSelect
idx(j) = idx(j - 1) + 1
Next
Loop
Next
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 157
Default Runtime Error 1004 on Linest

Marston
Do you realize you have posted the same message 4 times.
Do you not see them?
They are all there, just wait for someone to answer.
Cimjet
wrote in message
...
I'm trying to create a VBA macro that calculates the coefficients/T-stats and
R-square for each variable with in a regression. The trick is that I have 10
candidate independent variables and I'd like to be able to test each
combination of these variables.

I created some code that used fixed ranges for the Linest calc and that
worked.
I got some help creating code that selected each unique combination.
But when I put these together - I get a runtime error 1004 on the linest.
I know that it has something to do with how I'm assigning the unique
combination to a range that will be used in the Linest calculation.

I would appreciate any thoughts on how to correct this.

Regards - Marston

Here is the code below:

Option Base 1
Option Explicit
Sub combinKofN()
Dim rngs
Dim nRngs As Long, maxCombin As Long, nCombin As Long
Dim nSelect As Long, i As Long, j As Long
Dim r As String
Dim xRng As Range
Dim yRng As Range
Dim v
Dim k As Integer

rngs = Array("A2:A112", "B2:B112", "C2:C112", "D2:D112", "E2:E112", "F2:F112",
"G2:G112", "H2:H112", "I2:I112", "J2:J112")
Set yRng = Range("K2:K112")
yRng.Select
nRngs = UBound(rngs)
k = 0
For nSelect = nRngs To 1 Step -1
maxCombin = WorksheetFunction.Combin(nRngs, nSelect)
ReDim idx(1 To nSelect) As Long
For i = 1 To nSelect: idx(i) = i: Next

nCombin = 0
Do
' generate next combination
nCombin = nCombin + 1
r = rngs(idx(1))
For i = 2 To nSelect
r = r & "," & rngs(idx(i))
Next
Set xRng = Range(r)
'visually make sure the correct range is being selected
'xRng = Range("A2:J112") ' this works when I utilize this instead
xRng.Select
v = Application.WorksheetFunction.LinEst(yRng, xRng, 0, True)
' ...coefficient
Range("M2").Offset(4 * k + 2, 0) = v(1, 1)
' ...T-stat
Range("M2").Offset(4 * k + 3, 0) = Abs(v(1, 1) / v(2, 1))
' ...R-squared
Range("M2").Offset(4 * k + 4, 0) = v(3, 1)
k = k + 1

If nCombin = maxCombin Then Exit Do

' next combination index
i = nSelect: j = 0
While idx(i) = nRngs - j
i = i - 1: j = j + 1
Wend
idx(i) = idx(i) + 1
For j = i + 1 To nSelect
idx(j) = idx(j - 1) + 1
Next
Loop
Next


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 829
Default Runtime Error 1004 on Linest

See the response in m.p.e.newusers.

And please do not multi-post, especially across newsgroups.

You appear to be using Google Groups. Sometimes it is slow in displaying
new posts.

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 829
Default Runtime Error 1004 on Linest

"Cimjet" wrote:
Marston
Do you realize you have posted the same message 4 times.
Do you not see them?


FYI, no, he doesn't.

It appears that Google Groups is having its problems again. None of
Marston's follow-up postings to this thread appear in GG, nor do any his
"duplicate" postings about the same problem in m.p.e.programming.

It is such problems that cause me recently to abandon GG. Instead, I use
the newserver news.eternal-september.org, which you can register to use for
free at http://eternal-september.org. Then I set up Outlook Express as a
newsreader on my computer.

news.eternal-september.org has been very reliable for the short time that I
have been using it, about one month.

(Of course, Marston will not see this until the GG problem is cleared up.)

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 157
Default Runtime Error 1004 on Linest

Hi Joe
I also use Eternal-September, never had problem with it.
I've been using it since Microsoft closed there NG server.
It looks like GG is following in MS footsteps.
Best regards
Cimjet

"joeu2004" wrote in message
...
"Cimjet" wrote:
Marston
Do you realize you have posted the same message 4 times.
Do you not see them?


FYI, no, he doesn't.

It appears that Google Groups is having its problems again. None of Marston's
follow-up postings to this thread appear in GG, nor do any his "duplicate"
postings about the same problem in m.p.e.programming.

It is such problems that cause me recently to abandon GG. Instead, I use the
newserver news.eternal-september.org, which you can register to use for free
at http://eternal-september.org. Then I set up Outlook Express as a
newsreader on my computer.

news.eternal-september.org has been very reliable for the short time that I
have been using it, about one month.

(Of course, Marston will not see this until the GG problem is cleared up.)




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 15
Default Runtime Error 1004 on Linest

Hi -

I tried the suggested changes -

Still having a few difficulties.
First off I notice when I use

Dim v As Long - I get a compile error. I think this is because v is an array not a long. When I leave blank or use Dim v as Variant it appears to compile.

In either of the situations above, when I run with the suggested changes - I still get the Runtime Error.

When I watch what is happening in debug - a couple of things I notice.
First off - the first pass through - I see the xRng(0,i-1) = Range(rngs(idx(i)) being loaded with each of the column ranges.

However - when I throw in a xRng.Select before the v = Application.....
it only selects the rows in column X. Additionally, it does not appear that the values from columns A-J get loaded into X-AH as I think is the intention.

I tried to add

Range("X2").Resize(nRows).Offset(0,i-1) = Range(rngs(idx(i))) in the For/Next loop that is For n = 1 to nSelect just before v calculation - but that doesn't seem to set the values either. I also tried a couple of other manipulations of loading the range into an array and then moving that array to a different set of columns - but that's not working.

I also think - should the xRng be set to something like

Range("X2").Resize(nRows, nSelect) ?

Thanks - advance -

And only posting once!









  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 829
Default Runtime Error 1004 on Linest

wrote:
I tried the suggested changes -

[....]
Dim v As Long - I get a compile error.


I presume that your referring to a suggested solution that I posting
m.p.e.newusers, which I also sent to you in email. For the benefit of
others, I will include a copy below.

Note that I did not suggest Dim v As Long. Yes, that should remain Dim v
(As Variant).

I did suggest Dim k As Long instead of As Integer.


Marston wrote:
In either of the situations above, when I run with
the suggested changes - I still get the Runtime Error.


Since it appears that you did not simply copy-and-paste my suggestion, there
might be other changes that you made and I am not aware of. Alternatively,
I might have made some mistakes; as I mentioned previously, I could not test
the suggest except superficially. Alternatively, your use of Linest might
be failing for other reasons.

In either case, if you need my help debugging the algorithm, I will need to
see the macro as you have it now, and I will need some sample data.

The best way to accomplish that is for you to send me an example Excel file
in email. Or you can upload the Excel file to a file-sharing website. The
following is a list of some free file-sharing websites. I use
box.net/files.

MediaFi http://www.mediafire.com
FileFactory: http://www.filefactory.com
FileSavr: http://www.filesavr.com
FileDropper: http://www.filedropper.com
RapidSha http://www.rapidshare.com
Box.Net: http://www.box.net/files


Marston wrote:
However - when I throw in a xRng.Select before the
v = Application.....
it only selects the rows in column X.


Yes, I would expect that. Why would you do xRng.Select? Just for debugging
purposes?

Since my Linest parameter is xRng.Resize(nRows, nSelect), I would write
xRng.Resize(nRows, nSelect).Select. Alternatively, perhaps it suit your
purposes to simply write:

MsgBox xRng.Resize(nRows, nSelect).Address


Marston wrote:
Range("X2").Resize(nRows).Offset(0,i-1) = Range(rngs(idx(i)))
in the For/Next loop that is For n = 1 to nSelect just
before v calculation


My for-loop already had xRng.Offset(0, i - 1).Resize(nRows, 1) =
Range(rngs(idx(i))), essentially the same thing.

Since you say you needed to "throw in" something, I suspect you are no long
working with exactly the code that I suggested.


Marston wrote:
I also think - should the xRng be set to something like
Range("X2").Resize(nRows, nSelect) ?


I don't know where you are talking about putting that. So I cannot comment.

-----

My original suggestions....

Newsgroups: microsoft.public.excel.newusers
Subject: Runtime Error on Linest
Date: Wed, 27 Jul 2011 13:23:48 -0700

Option Base 1
Option Explicit

Sub combinKofN()
Dim rngs
Dim nRngs As Long, maxCombin As Long, nCombin As Long
Dim nSelect As Long, i As Long, j As Long
'Dim r As String '***remove***
Dim xRng As Range
Dim yRng As Range
Dim v
Dim k As Long '***changed***
Dim nRows As Long '***new***


Set xRng = Range("X2") '***new***
Set yRng = Range("K2:K112")
yRng.Select
nRows = yRng.Count '***new***

rngs = Array("A2:A112", "B2:B112", "C2:C112", "D2:D112", _
"E2:E112", "F2:F112", "G2:G112", "H2:H112", _
"I2:I112", "J2:J112")
nRngs = UBound(rngs)

k = 0
For nSelect = nRngs To 1 Step -1
maxCombin = WorksheetFunction.Combin(nRngs, nSelect)
ReDim idx(1 To nSelect) As Long
For i = 1 To nSelect: idx(i) = i: Next

nCombin = 0
Do
' generate next combination
nCombin = nCombin + 1
For i = 1 To nSelect '***changed***
xRng.Offset(0, i - 1).Resize(nRows, 1) = _
Range(rngs(idx(i)))
Next
v = Application.WorksheetFunction.LinEst(yRng, _
xRng.Resize(nRows, nSelect), 0, True)
' ...coefficient
Range("M2").Offset(4 * k + 2, 0) = v(1, 1)
' ...T-stat
Range("M2").Offset(4 * k + 3, 0) = Abs(v(1, 1) / v(2, 1))
' ...R-squared
Range("M2").Offset(4 * k + 4, 0) = v(3, 1)
k = k + 1

If nCombin = maxCombin Then Exit Do

' next combination index
i = nSelect: j = 0
While idx(i) = nRngs - j
i = i - 1: j = j + 1
Wend
idx(i) = idx(i) + 1
For j = i + 1 To nSelect
idx(j) = idx(j - 1) + 1
Next
Loop
Next

xRng.Resize(nRows, nRngs).Clear '***new***

End Sub

-----

Newsgroups: microsoft.public.excel.newusers
Subject: Runtime Error on Linest
Date: Wed, 27 Jul 2011 13:48:22 -0700

Small improvements....

I wrote:
Set xRng = Range("X2") '***new***


Change to

Set xRng = Range("X2:X112")

Or more generally, after determining nRows:

Set xRng = Range("X2").resize(nRows)

I wrote:
xRng.Offset(0, i - 1).Resize(nRows, 1) = _
Range(rngs(idx(i)))


With the change above:

xRng.Offset(0, i - 1) = Range(rngs(idx(i)))



  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 829
Default Runtime Error 1004 on Linest

wrote:
In either of the situations above, when I run with
the suggested changes - I still get the Runtime Error.


Problem solved. Marston sent me an example Excel file in email. With that,
I discovered a problem in my original coding, to wit....

xRng.Offset(0, i - 1).Resize(nRows, 1) = _
Range(rngs(idx(i)))

should be

xRng.Offset(0, i - 1).Resize(nRows, 1) = _
Range(rngs(idx(i))).Value

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Runtime Error on Linest [email protected] New Users to Excel 3 September 7th 11 08:48 PM
Runtime Error 1004 on Linest in VBA [email protected] Excel Programming 1 July 27th 11 09:34 PM
runtime error '1004' application or object defined error Janis Excel Programming 4 November 18th 09 03:01 PM
runtime error '1004' application or object defined error. Please help deej Excel Programming 0 August 1st 07 09:26 AM
Excel 2003 Macro Error - Runtime error 1004 Cow Excel Discussion (Misc queries) 2 June 7th 05 01:40 PM


All times are GMT +1. The time now is 07:00 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"