Michael Wither <michael.j.wit...@gmail.com> wrote on 01/28/2012 03:18:29 
PM:

> [image removed] 
> 
> Re: [R] R extracting regression coefficients from multiple 
> regressions using lapply command
> 
> Michael Wither 
> 
> to:
> 
> Jean V Adams
> 
> 01/28/2012 03:18 PM
> 
> Hi, this code is actually great (much better than any other response
> I've gotten or seen).  But I have one more question.  This puts the 
> regression coefficients for state 1 in row 1, which is what I do 
> need, but then it puts coef1 from the first regression in column 1, 
> then coef1 from the second regression in column 2, then coef1 from 
> the third regression in column 3, ...  What I need is coef 1 from 
> first regression in column 1, coef2 from regression 1 in column 2, 
> coef3 from regression 1 in column 3, ... And then after the first 28
> columns are filled in (27 covariate plus the constant term), I'd 
> like coef1 from the 2nd regression to go in column 29, coef2 from 
> the 2nd regression to go in column 30,... 
> Does this make sense?  Do you know how to do this?  
> Thank you again so much for your help, 
> Michael


Adjust the dimensions of your array, and fill in the data accordingly ...

coefs <- array(NA, dim=c(nstates, nxs+1, nys))
for(i in 1:nstates) {
for(k in 1:nys) {
        coefs[i, , k] <- lm(formula(paste(names(PUF)[k], 
                covariates, sep=" ~ ")), 
                data=PUF[PUF$state==i, ])$coef
        }}

Jean


> On Fri, Jan 27, 2012 at 1:05 AM, Michael Wither 
<michael.j.wit...@gmail.com
> > wrote:
> Thanks, this does help a bit.  I'll keep on trying to figure it out.  
> Thanks ,
> Michael
> 
> On Thu, Jan 26, 2012 at 6:42 AM, Jean V Adams <jvad...@usgs.gov> wrote:
> 
> Michael Wither wrote on 01/26/2012 12:08:19 AM:
> 
> 
> > Hi, I have a question about running multiple in regressions in R and 
then
> > storing the coefficients.  I have a large dataset with several 
variables,
> > one of which is a state variable, coded 1-50 for each state. I'd like 
to
> > run a regression of 28 select variables on the remaining 27 variables 
of
> > the dataset (there are 55 variables total), and specific for each 
state, ie
> > run a regression of variable1 on covariate1, covariate2, ..., 
covariate27
> > for observations where state==1. I'd then like to repeat this for 
variable1
> > for states 2-50, and the repeat the whole process for variable2,
> > variable3,..., variable28. I think I've written the correct R code to 
do
> > this, but the next thing I'd like to do is extract the coefficients,
> > ideally into a coefficient matrix. Could someone please help me with 
this?
> > Here's the code I've written so far, I'm not sure if this is the best 
way
> > to do this.  Please help me.
> > 
> > for (num in 1:50) {
> > 
> >     #PUF is the data set I'm using
> > 
> > #Subset the data by states
> > PUFnum <- subset(PUF, state==num)
> > 
> > #Attach data set with state specific data
> > attach(PUFnum)
> > 
> > #Run our prediction regression
> >     #the variables class1 through e19700 are the 27 covariates I want 
to use
> > regression <- lapply(PUFnum,  function(z) lm(z ~
> > class1+class2+class3+class4+class5+class6+class7+xtot+e00200+e00300
> > +e00600+e00900+e01000+p04470+e04800+e09600+e07180+e07220+e07260
> > +e06500+e10300+e59720+e11900+e18425+e18450+e18500+e19700))
> > 
> > Beta <- lapply(regression, function(d) d<- coef(regression$d))
> > 
> >  detach(PUFnum)
> > 
> > }
> > Thanks,
> > Mike
> 
> 
> This should help you get started. 
> 
> # You don't provide any sample data, so I made some up myself 
> nstates <- 5 
> nobs <- 30 
> nys <- 3 
> nxs <- 4 
> PUF <- data.frame(matrix(rnorm(nstates*nobs*(nys+nxs)), 
nrow=nstates*nobs, 
>         dimnames=list(NULL, c(paste("Y", 1:nys, sep=""), paste("X", 
> 1:nxs, sep=""))))) 
> PUF$state <- rep(1:nstates, nobs) 
> head(PUF) 
> 
> # create a character vector of all your covariate names 
> # separated by a plus sign 
> # this will serve as the right half of your regression equations 
> covariates <- paste(names(PUF)[nys + (1:nxs)], collapse=" + ") 
> 
> # create an empty array to be filled with coefficients 
> coefs <- array(NA, dim=c(nstates, nys, nxs+1)) 
> 
> # fill the array with coefficients 
> # this will work for you if the first 28 columns of your PUF 
> # data frame are the response variables 
> for(i in 1:nstates) { 
> for(j in 1:nys) { 
>         coefs[i, j, ] <- lm(formula(paste(names(PUF)[j], covariates,
> sep=" ~ ")), 
>                 data=PUF[PUF$state==i, ])$coef 
>         }} 
> coefs 
> 
> Jean
> 
> 
> -- 
> Michael J. Wither
> 2884 Torrey Pines Road
> La Jolla, CA 92037
> (216) 970-5036 (cell)
> michael.j.wit...@gmail.com

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org 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.

Reply via email to