File Exchange

## Kernel Smoothing Regression

version 1.2.0.0 (2.16 KB) by Yi Cao

### Yi Cao (view profile)

A non-parametrical regression (smoothing) tool using Gaussian kernel.

Updated 24 Dec 2008

Non-parametric regression is widely used in many scientific and engineering areas, such as image processing and pattern recognition.

Non-parametric regression is about to estimate the conditional expectation of a random variable:

E(Y|X) = f(X)

where f is a non-parametric function.

Based on the kernel density estimation technique, this code implements the so called Nadaraya-Watson kernel regression algorithm particularly using the Gaussian kernel. The default bandwidth of the regression is derived from the optimal bendwidth of the Gaussian kernel density estimation suggested in the literature. The code can also take care of missing data.

### Cite As

Yi Cao (2020). Kernel Smoothing Regression (https://www.mathworks.com/matlabcentral/fileexchange/19195-kernel-smoothing-regression), MATLAB Central File Exchange. Retrieved .

Carolina Bigozzi

Kevin Chaudhari

karena Quiroz

cyril

### cyril (view profile)

Does it work for multidimensional input x?

KARINA

### KARINA (view profile)

quisiera saber si existe un algoritmo para hallar el ancho de banda "h"'

temp

Charles

ben salah

nice

cf 

### cf  (view profile)

It works very well and friendly.

V. Poor

Michael Jordan

Kenneth Eaton

John D'Errico

Xu Wings

### Xu Wings (view profile)

Gholamreza (Shahab) Anbarjafari

Hi, nice work :)

Yi Cao

### Yi Cao (view profile)

Thanks for the comment. However, the zero median either in X or in Y should not be consider because we deal with a regression problem here. The case mentioned just means that X or Y are constant, then the regrassion problem is not well-posed and the solution is meaningless anyway.

J. Melon

### J. Melon (view profile)

Hi Yi, wouldn't this function produce all NaN if the median of either X or Y is zero? (since h would be zero)

Is there anyway to fix it? for example, if sigma is zero, then let sigma = max(X) - min(X)

Abel Brown

### Abel Brown (view profile)

this function rocks!! worked very well 'right outta the box'. My only question: Is is possible to do a variable bandwidth smoothing using this function?

At any rate, nice work
Thanks!

Yi Cao

Dimitri,

Thanks for your suggestions. The file has been updated to take some of your points: typos have been corrected (I hope I found all of them. BTW, I wish the MATLAB editor has a spelling check functionality. -:) ) and valid inputs have been properly checked.

In terms of better bandwidth, I do not aware any simple one available for such problem. Most I knew either too complcated or requires significant computation, such as the one through cross validation. If anyone know this, please leave a message here.

Option for user provided function handle is not implemented. Mainly, I am concerned the difficulty to check the correctness of the function specified (i.e. positiveness and integrating to 1).

Finally, local polynomial regression will require more work. It will be considered in a future version.

Dimitri Shvorob

Oops, I meant 'local polynomial (e.g. local linear) vs. local constant'. Does that make sense? Someone needs to refresh his stats :)

Dimitri Shvorob

Nice work! There are some typos that can be corrected; with more time on their hands, one could add clarification/input check 'x must be a vector', allow an arbitrary set of evaluation points x, make chosen default bandwidth selection procedure more prominent (I have to say I didn't know this one; have you consulted Pagan's little book?), or allow an arbitrary kernel via a function-handle input argument. Do you want to try coding local polynomial (vs. local linear) kernel regression? :)