[R] Formula in lm inside lapply

2007-08-15 Thread Li, Yan \(IED\)
I am trying to run separate regressions for different groups of
observations using the lapply function. It works fine when I write the
formula inside the lm() function. But I would like to pass formulae into
lm(), so I can do multiple models more easily. I got an error message
when I tried to do that. Here is my sample code:

#generating data
x1 - rnorm(100,1)
x2 - rnorm(100,1)
y  - rnorm(100,1)
group - rep(c(A,B),c(40,60))
group - factor(group)
df - data.frame(y,x1,x2,group)

#write formula inside lm--works fine
res1 - lapply(levels(df$group), function(x) lm(y~x1,df, subset = group
==x))
res1
res2 - lapply(levels(df$group),function(x) lm(y~x1+x2,df, subset =
group ==x))
res2

#try to pass formula into lm()--does not work
formula1 - as.formula(y~x1)
formula2 - as.formula(y~x1+x2)
resf1 - lapply(levels(df$group),function(x) lm(formula1,df, subset =
group ==x))
resf1
resf2 - lapply(levels(df$group),function(x) lm(formula2,df, subset =
group ==x))
Resf2

The error message is 
'Error in eval(expr, envir, enclos): object x not found'

Any help is greatly appreciated!

Yan


This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Formula in lm inside lapply

2007-08-15 Thread Henrique Dallazuanna
try this:

lapply(levels(df$group), function(x)lm(formula1, data=df[group==x,]))

-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40 S 49° 16' 22 O

On 15/08/07, Li, Yan (IED) [EMAIL PROTECTED] wrote:

 I am trying to run separate regressions for different groups of
 observations using the lapply function. It works fine when I write the
 formula inside the lm() function. But I would like to pass formulae into
 lm(), so I can do multiple models more easily. I got an error message
 when I tried to do that. Here is my sample code:

 #generating data
 x1 - rnorm(100,1)
 x2 - rnorm(100,1)
 y  - rnorm(100,1)
 group - rep(c(A,B),c(40,60))
 group - factor(group)
 df - data.frame(y,x1,x2,group)

 #write formula inside lm--works fine
 res1 - lapply(levels(df$group), function(x) lm(y~x1,df, subset = group
 ==x))
 res1
 res2 - lapply(levels(df$group),function(x) lm(y~x1+x2,df, subset =
 group ==x))
 res2

 #try to pass formula into lm()--does not work
 formula1 - as.formula(y~x1)
 formula2 - as.formula(y~x1+x2)
 resf1 - lapply(levels(df$group),function(x) lm(formula1,df, subset =
 group ==x))
 resf1
 resf2 - lapply(levels(df$group),function(x) lm(formula2,df, subset =
 group ==x))
 Resf2

 The error message is
 'Error in eval(expr, envir, enclos): object x not found'

 Any help is greatly appreciated!

 Yan
 

 This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}

 __
 R-help@stat.math.ethz.ch mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


[[alternative HTML version deleted]]

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Formula in lm inside lapply

2007-08-15 Thread Gabor Grothendieck
It can't find x since the environment of formula1 and of formula2 is the Global
Environment and x is not there -- its local to the function.

Try this:

#generating data
set.seed(1)
DF - data.frame(y = rnorm(100, 1), x1 = rnorm(100, 1), x2 = rnorm(100, 1),
  group = rep(c(A, B), c(40, 60)))

formula1 - as.formula(y ~ x1)
lapply(levels(DF$group), function(x) {
   environment(formula1) - environment()
   lm(formula1, DF, subset = group == x)
})

formula2 - as.formula(y ~ x1 + x2)
lapply(levels(DF$group), function(x) {
   environment(formula2) - environment()
   lm(formula2, DF, subset = group == x)
})



On 8/15/07, Li, Yan (IED) [EMAIL PROTECTED] wrote:
 I am trying to run separate regressions for different groups of
 observations using the lapply function. It works fine when I write the
 formula inside the lm() function. But I would like to pass formulae into
 lm(), so I can do multiple models more easily. I got an error message
 when I tried to do that. Here is my sample code:

 #generating data
 x1 - rnorm(100,1)
 x2 - rnorm(100,1)
 y  - rnorm(100,1)
 group - rep(c(A,B),c(40,60))
 group - factor(group)
 df - data.frame(y,x1,x2,group)

 #write formula inside lm--works fine
 res1 - lapply(levels(df$group), function(x) lm(y~x1,df, subset = group
 ==x))
 res1
 res2 - lapply(levels(df$group),function(x) lm(y~x1+x2,df, subset =
 group ==x))
 res2

 #try to pass formula into lm()--does not work
 formula1 - as.formula(y~x1)
 formula2 - as.formula(y~x1+x2)
 resf1 - lapply(levels(df$group),function(x) lm(formula1,df, subset =
 group ==x))
 resf1
 resf2 - lapply(levels(df$group),function(x) lm(formula2,df, subset =
 group ==x))
 Resf2

 The error message is
 'Error in eval(expr, envir, enclos): object x not found'

 Any help is greatly appreciated!

 Yan
 

 This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}

 __
 R-help@stat.math.ethz.ch mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Formula in lm inside lapply

2007-08-15 Thread Weiwei Shi
try this:

 x = predict(z, Iris[-train, ])
 x1 - rnorm(100,1)
 x2 - rnorm(100,1)
 y  - rnorm(100,1)
 group - rep(c(A,B),c(40,60))
 group - factor(group)
 df - data.frame(y,x1,x2,group)
 resf1 - lapply(levels(df$group),function(x) {formula1 - as.formula(y~x1); 
 lm(formula1,df, subset =group ==x)}) # put the formula defn into function(x)
 resf1
[[1]]

Call:
lm(formula = formula1, data = df, subset = group == x)

Coefficients:
(Intercept)   x1
 0.8532   0.1189


[[2]]

Call:
lm(formula = formula1, data = df, subset = group == x)

Coefficients:
(Intercept)   x1
 0.7116   0.3398

HTH,

Weiwei

On 8/15/07, Li, Yan (IED) [EMAIL PROTECTED] wrote:
 I am trying to run separate regressions for different groups of
 observations using the lapply function. It works fine when I write the
 formula inside the lm() function. But I would like to pass formulae into
 lm(), so I can do multiple models more easily. I got an error message
 when I tried to do that. Here is my sample code:

 #generating data
 x1 - rnorm(100,1)
 x2 - rnorm(100,1)
 y  - rnorm(100,1)
 group - rep(c(A,B),c(40,60))
 group - factor(group)
 df - data.frame(y,x1,x2,group)

 #write formula inside lm--works fine
 res1 - lapply(levels(df$group), function(x) lm(y~x1,df, subset = group
 ==x))
 res1
 res2 - lapply(levels(df$group),function(x) lm(y~x1+x2,df, subset =
 group ==x))
 res2

 #try to pass formula into lm()--does not work
 formula1 - as.formula(y~x1)
 formula2 - as.formula(y~x1+x2)
 resf1 - lapply(levels(df$group),function(x) lm(formula1,df, subset =
 group ==x))
 resf1
 resf2 - lapply(levels(df$group),function(x) lm(formula2,df, subset =
 group ==x))
 Resf2

 The error message is
 'Error in eval(expr, envir, enclos): object x not found'

 Any help is greatly appreciated!

 Yan
 

 This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}

 __
 R-help@stat.math.ethz.ch mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.



-- 
Weiwei Shi, Ph.D
Research Scientist
GeneGO, Inc.

Did you always know?
No, I did not. But I believed...
---Matrix III

__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Formula in lm inside lapply

2007-08-15 Thread Gabor Grothendieck
Here is another solution that gets around the non-standard
way that subset= is handled in lm.  It has the advantage that unlike
the previous solution where formula1 and group == x appear literally
in the output, in this one the formula appears written out and
group == A and group == B appear:

 lapply(levels(DF$group), function(x) do.call(lm,
+list(formula1, quote(DF), subset = bquote(group == .(x)
[[1]]

Call:
lm(formula = y ~ x1, data = DF, subset = group == A)

Coefficients:
(Intercept)   x1
1.04855  0.04585


[[2]]

Call:
lm(formula = y ~ x1, data = DF, subset = group == B)

Coefficients:
(Intercept)   x1
1.13593 -0.01627


On 8/15/07, Gabor Grothendieck [EMAIL PROTECTED] wrote:
 It can't find x since the environment of formula1 and of formula2 is the 
 Global
 Environment and x is not there -- its local to the function.

 Try this:

 #generating data
 set.seed(1)
 DF - data.frame(y = rnorm(100, 1), x1 = rnorm(100, 1), x2 = rnorm(100, 1),
  group = rep(c(A, B), c(40, 60)))

 formula1 - as.formula(y ~ x1)
 lapply(levels(DF$group), function(x) {
   environment(formula1) - environment()
   lm(formula1, DF, subset = group == x)
 })

 formula2 - as.formula(y ~ x1 + x2)
 lapply(levels(DF$group), function(x) {
   environment(formula2) - environment()
   lm(formula2, DF, subset = group == x)
 })



 On 8/15/07, Li, Yan (IED) [EMAIL PROTECTED] wrote:
  I am trying to run separate regressions for different groups of
  observations using the lapply function. It works fine when I write the
  formula inside the lm() function. But I would like to pass formulae into
  lm(), so I can do multiple models more easily. I got an error message
  when I tried to do that. Here is my sample code:
 
  #generating data
  x1 - rnorm(100,1)
  x2 - rnorm(100,1)
  y  - rnorm(100,1)
  group - rep(c(A,B),c(40,60))
  group - factor(group)
  df - data.frame(y,x1,x2,group)
 
  #write formula inside lm--works fine
  res1 - lapply(levels(df$group), function(x) lm(y~x1,df, subset = group
  ==x))
  res1
  res2 - lapply(levels(df$group),function(x) lm(y~x1+x2,df, subset =
  group ==x))
  res2
 
  #try to pass formula into lm()--does not work
  formula1 - as.formula(y~x1)
  formula2 - as.formula(y~x1+x2)
  resf1 - lapply(levels(df$group),function(x) lm(formula1,df, subset =
  group ==x))
  resf1
  resf2 - lapply(levels(df$group),function(x) lm(formula2,df, subset =
  group ==x))
  Resf2
 
  The error message is
  'Error in eval(expr, envir, enclos): object x not found'
 
  Any help is greatly appreciated!
 
  Yan
  
 
  This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
 
  __
  R-help@stat.math.ethz.ch mailing list
  https://stat.ethz.ch/mailman/listinfo/r-help
  PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
  and provide commented, minimal, self-contained, reproducible code.
 


__
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.