[R] Noobie question, regression across levels

AllenL allen.larocque at gmail.com
Wed Dec 17 23:43:09 CET 2008


This is what I ended up using:

Data.subset<-data.frame(PlotFinal,YearFinal,BioFinal,ritFinal)     ###Subset
of main dataset
Data.length<-sapply(split(Data.subset,PlotFinal),nrow)       ### The number
of data points in each plot 

Data.sub<-split(Data.subset,PlotFinal)         ##Split Data.subset by
PlotFinal
Good.levels<-Data.sub[Data.length>10]       ##Take only those Plots that
have >10 years of observation

lmfun<-function(Good.levels)
{lm(ritFinal~BioFinal+YearFinal,data=Good.levels)}   ##Set up the 
###regression function
lmList<-lapply(Good.levels,lmfun)                       ###Apply above
function to all "good levels"

coef.List<-lapply(lmList,coef)          ###List of the coefficients of EACH
above regression

This seems to have worked beautifully.
So, my current problem is extracting the coefficients from "coef.List" (and
I think this is getting to the roof of my general confusion). coef.List
seems to be a list of a list of lm objects, right? How come them I cannot
call them by their position directly (ie. coef.List[1] gives me the first lm
object. I cannot seem to call the first coefficient in this object (the
intercept).) 
My goal is to have a bunch of new lists, each one listing a subset of
coefficients from each regression (ie. one will be a list of all the
intercepts, another the mean of all the "YearFinal" effects, etc).

Thanks again in advance for help with all these noobie questions!




Ben Bolker wrote:
> 
> 
> 
> AllenL wrote:
>> 
>> Much thanks! This helped a lot. Another quick one:
>> In using the lmList function in the nlme package, is it possible to
>> subset my data according to the number of observations in each level?
>> (ie. I obviously want to include only those levels in which the
>> observations are of sufficient size for regression). What is the best way
>> to exclude factors of insufficient size? Can I do it inside the lmList
>> function? I've read the requisite help files etc. and two hours later am
>> still confused.
>> Thanks in advance,
>> Allen
>> 
>> 
> 
>  Don't know if you can do it directly in lmList, but:
> 
> splitdat <- split(mydata,splitfactor)
> lengths <- sapply(splitdat,nrow)  ## NOT sapply(splitdat,length)
> splitdat <- splitdat[lengths>minlength]
> lmfun <- function(d) { lm(y~x,data=d) }
> myLmList <- lapply(splitdat,lmfun) 
> 
> OR
> 
> lengths <- sapply(split(mydata,splitfactor),nrow)
> badlevels <- levels(splitfactor)[lengths<minlength]
> subdata <- subset(mydata,!splitfactor %in% badlevels)
> 
>   and then proceed with lmList
> 
>   of course, I didn't test any of this ...
> 
>  Ben Bolker
> 

-- 
View this message in context: http://www.nabble.com/Noobie-question%2C-regression-across-levels-tp21020222p21063210.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list