Learn R Programming

survey (version 4.4-2)

svynls: Probability-weighted nonlinear least squares

Description

Fits a nonlinear model by probability-weighted least squares. Uses nls to do the fitting, but estimates design-based standard errors with either linearisation or replicate weights. See nls for documentation of model specification and fitting.

Usage

svynls(formula, design, start, weights=NULL, ...)

Value

Object of class svynls. The fitted nls object is included as the fit element.

Arguments

formula

Nonlinear model specified as a formula; see nls

design

Survey design object

start

starting values, passed to nls

weights

Non-sampling weights, eg precision weights to give more efficient estimation in the presence of heteroscedasticity.

...

Other arguments to nls (especially, start). Also supports return.replicates for replicate-weight designs and influence for other designs.

See Also

svymle for maximum likelihood with linear predictors on one or more parameters

Examples

Run this code
set.seed(2020-4-3)
x<-rep(seq(0,50,1),10)
y<-((runif(1,10,20)*x)/(runif(1,0,10)+x))+rnorm(510,0,1)

pop_model<-nls(y~a*x/(b+x), start=c(a=15,b=5))

df<-data.frame(x=x,y=y)
df$p<-ifelse((y-fitted(pop_model))*(x-mean(x))>0, .4,.1)

df$strata<-ifelse(df$p==.4,"a","b")

in_sample<-stratsample(df$strata, round(table(df$strat)*c(0.4,0.1)))

sdf<-df[in_sample,]
des<-svydesign(id=~1, strata=~strata, prob=~p, data=sdf)
pop_model
(biased_sample<-nls(y~a*x/(b+x),data=sdf, start=c(a=15,b=5)))
(corrected <- svynls(y~a*x/(b+x), design=des, start=c(a=15,b=5)))

Run the code above in your browser using DataLab