[R] nls and "plinear" algorithm

Duncan Murdoch murdoch at stats.uwo.ca
Tue Jul 8 22:10:35 CEST 2008


On 7/8/2008 2:33 PM, Allan Clark wrote:
> hello all
> 
> 
> i havnt had a chance to read through the references provided for the
> "nls" function (since the libraries are closed now).
> 
> can anyone shed some light on how the "plinear" algorithm works? 

Nonlinear regression is least squares.  There are standard linear 
algebra methods for solving least squares problems which are linear in 
the parameters.  plinear models are linear in some of the parameters for 
fixed values of the others, so the nonlinear search only needs to 
optimize the linear fit over the nonlinear parts of the model:  it's 
much faster than a fully nonlinear search over all the parameters.

 >
also,
> how are the fitted values obtained? also, WHAT DOES THE ".lin" below
> REPRESENT?

It's a linear multiplier applied to the whole expression you give, 
essentially changing the formula to

r ~ .lin * 242 * (p + exp(-a1 * p)/a1 - 1/a1) * (1 - exp(-a2 *
  o))/((100 +
      exp(-a1 * 100)/a1 - 1/a1) * (1 - exp(-a2 * 50)))

You can also compare the two DNase1 examples in the ?nls page.  In the 
second one, Asym plays the role of .lin.

Duncan Murdoch

> 
> thanking you in advance
> 
> ######################################
> i have a quick example: (data below)
> 
> 
> f1=nls(r~242*(p+exp(-a1*p)/a1-1/a1)*(1-exp(-a2*o))/(
> (100+exp(-a1*100)/a1-1/a1)*(1-exp(-a2*50)) ) , data = X.m,
> algorithm="plinear",start = list(a1=0.01,a2=.01),trace = TRUE)
> 
>> summary(f1)
> 
> Formula: r ~ 242 * (p + exp(-a1 * p)/a1 - 1/a1) * (1 - exp(-a2 *
> o))/((100 + 
>     exp(-a1 * 100)/a1 - 1/a1) * (1 - exp(-a2 * 50)))
> 
> Parameters:
>      Estimate Std. Error t value Pr(>|t|)    
> a1   0.027017   0.003493   7.735 6.34e-10 ***
> a2   0.154967   0.012214  12.688  < 2e-16 ***
> .lin 1.042452   0.008010 130.140  < 2e-16 ***
> ---
> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
> 
> Residual standard error: 3.979 on 47 degrees of freedom
> 
> Number of iterations to convergence: 13 
> Achieved convergence tolerance: 8.91e-06 
> 
> 
> 
> 
> 
> 
> 
> 
> p	r	o
> 98.96338287	241.2828283	50
> 97.55260431	237.6262626	49
> 95.63989983	233.0606061	48
> 93.91802748	229.3232323	47
> 92.31404009	224.7575758	46
> 90.03746768	220.7878788	45
> 89.30649329	216.6868687	44
> 87.64125166	212.2020202	43
> 86.68123643	207.4646465	42
> 85.25030371	203.3939394	41
> 83.64465743	198.5252525	40
> 82.60251377	193.8787879	39
> 81.62361512	189.1717172	38
> 80.71350574	185.1111111	37
> 79.15697699	180.7171717	36
> 78.11234178	176.5858586	35
> 76.60248492	172.7272727	34
> 76.03845076	168.5353535	33
> 74.32556341	164.6060606	32
> 73.3639895	160.3939394	31
> 72.35840786	156.7272727	30
> 70.90629218	152.5454545	29
> 69.88235864	148.6161616	28
> 68.69538137	144.1818182	27
> 67.6875564	140.5151515	26
> 67.16355934	135.7373737	25
> 66.90502437	131.3636364	24
> 65.63480302	126.8484848	23
> 64.63355769	122.1111111	22
> 63.5529748	117.4040404	21
> 62.65320004	113.4444444	20
> 61.31100803	109.0505051	19
> 60.59542007	105.1836735	18
> 58.43200533	100.244898	17
> 57.13903832	96.68041237	16
> 56.46953877	92.45833333	15
> 54.79475954	87.52083333	14
> 53.85049475	82.21875	13
> 52.50164551	77.84210526	12
> 51.04072849	72.87234043	11
> 49.64840803	68.22580645	10
> 48.24666285	62.76344086	9
> 46.36813455	58.0989011	8
> 44.40690015	51.85714286	7
> 42.8855932	45.13333333	6
> 40.93434063	39.34090909	5
> 37.84871552	32.39772727	4
> 36.10687426	25.8372093	3
> 32.74320593	18.26829268	2
> 28.03072554	9.922077922	1
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list