Parametric bootstraping in curve fitting

Asked by Samiul Hayder Choudhury

Samiul Hayder Choudhury (view profile)

on 7 May 2012
Latest activity Commented on by Diandian QIU

Diandian QIU (view profile)

on 30 Sep 2013
Accepted Answer by Richard Willey

Richard Willey (view profile)

I like to use parametric bootstrapping technique to analyze the validity of a data set. The data set is the power received from an RFID tag. My aim is to develop a pathloss model. For this I have to fit the curve. But I want to use bootstrap technique to verify whether or not the collected data are okay. Is there any way to do this?

Products

No products are associated with this question.

Richard Willey (view profile)

Answer by Richard Willey

Richard Willey (view profile)

on 7 May 2012

In general when I hear the expression parametric bootstrap I think "parametric residual bootstrap"

I'm attaching some simple code that contrasts and parametric and a non parametric residual bootstrap.

```%% Bootstrap Examples
```
```% Generate some data
x = 1:10000;
X = x';
Y = 3*X + 5  + randn(10000,1);
```
```% Run a regression
b = regress(Y, [ones(size(X)), X])
```
```%% Parametric residual bootstrap
```
```% Appropriate if you have reason to believe that your residuals are
% normally distributed
YHat = [ones(size(X)), X] * b;
resid = Y - YHat;
foo = fitdist(resid, 'normal');
se = std(bootstrp(1000,@(bootr)regress(YHat+random(foo, size(bootr)),[ones(size(X)), X]),resid))
```
```%% Nonparametric residual bootstrap
```
```% Appropriate if you have reason to believe that your residuals are
% homoskedastic
```
```YHat = [ones(size(X)), X] * b;
resid = Y - YHat;
se = std(bootstrp(1000,@(bootr)regress(YHat+bootr,[ones(size(X)), X]),resid))
```

1 Comment

Samiul Hayder Choudhury

Samiul Hayder Choudhury (view profile)

on 14 May 2012

Thank you very much for your solution. But I need some information:
1. I did not understand the following line of code:
se = std(bootstrp(1000,@(bootr)regress(YHat+random(foo, size(bootr)),[ones(size(X)), X]),resid))
If you please explain it then it would be helpful for me.

2. If I want to fit a polynomial and then compute the residual, would it be possible?

Tom Lane (view profile)

Answer by Tom Lane

Tom Lane (view profile)

on 15 May 2012

This line creates a matrix with 1 in one column and X in the other. You could also include X^2 or higher to use polynomials:

```[ones(size(X)), X])
```

This line creates a function that performs a regression on the matrix above, with the response equal to fitted values plus random values from a normal distribution fitted to the original residuals. Richard suggests this is the way to do a parametric bootstrap for regression:

```@(bootr)regress(YHat+random(foo, size(bootr)),...)
```

This line computes the standard error se as the standard deviation of 1000 bootstrap samples generated by applying the above function to the residuals (note that the function is just using the size of the residual vector, not resampling from it):

```se = std(bootstrp(1000,...,resid))
```

Diandian QIU (view profile)

Answer by Diandian QIU

Diandian QIU (view profile)

on 6 Sep 2013

I got a question, I want to bootstrap the input time series "anomaly_ts" which is the argument for the function "mainf". mainf function should return four variables: [a,b,c,d]=mainf(anomaly_ts)

I did it this way:

[bootstat,bootsam] = bootstrp(1000,@(bootr)mainf(bootr),anomaly_ts);

but why bootstat only contains the bootstrapping result of one variable?

Diandian QIU

Diandian QIU (view profile)

on 30 Sep 2013

Hi all, I found a post addressing similar question, so I put it here in case anyone else is interested: https://www.mathworks.co.kr/matlabcentral/newsreader/view_thread/329082.

Thanks

Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Learn MATLAB today!