And if you *really* want piecewise linear function (and most likely you want the pieces to be continuous, no?), there are better ways than yours. For "manual" fitting, use something like:
library(splines) lm(y ~ bs(x, knots=..., deg=1)) For more automatic fitting, I believe bruto() or even mars() in the package `mda' will do. Andy > -----Original Message----- > From: Jason Turner [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, December 18, 2002 5:08 PM > To: Zhongming Yang > Cc: [EMAIL PROTECTED] > Subject: Re: [R] Can I build an array of regrssion model? > > > 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 > [EMAIL PROTECTED] > > ______________________________________________ > [EMAIL PROTECTED] mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-help > ------------------------------------------------------------------------------ ______________________________________________ [EMAIL PROTECTED] mailing list http://www.stat.math.ethz.ch/mailman/listinfo/r-help
