[R] Can I build an array of regrssion model?

Jason Turner jasont at indigoindustrial.co.nz
Wed Dec 18 23:09:03 CET 2002


On Wed, Dec 18, 2002 at 03:51:47PM -0500, Zhongming Yang wrote:
> I am trying to use piecewise linear regression to approximate a
> nonlinear function. 

Why not smooth regression, or non-linear regression?

> Actually, I don't know how many linear functions I
> need, therefore, I want build an array of regression models to automate
> the approximation job. Could you please give me any clue?

Clue 1) See above.  You might be using the wrong tool.  A smooth
regression might be better here.  help(loess), library(gss), and
library(sm) are your friends.

Clue 2) If you really want piecewise linear, a list makes more
sense than a vector.  R does handle vectors quite nicely, but I
find its real strength is the way it handles complex lists with
ease.

> Attached is ongoing code:
> 
> rawData = scan("c:/zyang/mass/data/A01/1.PRN",
> what=list(numeric(),numeric()));
> len = length(rawData[[1]]);
> cuts = len*c(0.01, 0.03, 0.08, 0.18, 0.38, 0.69, 1);
> cuts = as.integer(cuts); 

#change cuts to a matrix of values, col 1 is the lower
#bound, col 2 is the upper bound for your segments.

cuts <- cbind(c(1,cuts[1:(length(cuts)-1)], cuts)

#make an empty list
mod.list <- list()
#fill that list with models
for(ii in 1:dim(cuts)[1]) { 
	start <- cuts[ii,1]
	end <- cuts[ii,2]
	mod.list[[ii]] <- lm(rawData[[2]][start,end] ~ rawData[[1]][start,end])
}

#to extract coefficients
lapply(mod.list,coef)

#to extract coefficients, and confidence intervals
lapply(mod.list,function(x,...){ coef(summary(x))} )

#to reproduce your ablines
lapply(mod.list,abline,col="red")

etc

Cheers

Jason
-- 
Indigo Industrial Controls Ltd.
64-21-343-545
jasont at indigoindustrial.co.nz




More information about the R-help mailing list