Undocumented behavior of smooth()?
4 次查看(过去 30 天)
显示 更早的评论
Update: I submitted a support request for this issue, and it's been forwarded to the development and documentation teams.
Original: The documentation for smooth() states that for the 'lowess' and 'loess' smoothing methods, span is a percentage of the total number of data points, less than or equal to 1. However, I discovered that if I set span >= 1, it seemed to behave similarly to that for the 'moving' method (i.e. the input is interpreted as the number of points to smooth over).
I found this line in smooth() that performs the conversion (line 146 in R2016b, before any of the specific methods are called):
if span < 1, span = ceil(span*t); end % percent convention
So, conversely then, smooth() is more than happy to convert a fraction to a number of samples if you request 'moving'.
I don't see this behavior mentioned in the documentation, and I believe both the behavior and documentation has been the same at least back to R2014a. Am I missing something?
I actually prefer this behavior - I want to smooth different length vectors with exactly the same method, and it seems overcomplicated to have to calculate the fraction for each such that I could be absolutely sure that the number of points in the span were always the same. It seems like using the fraction is a great way to make errors, generally. However, I see two problems with this:
- It is (apparently) undocumented, so I assume there's no guarantee that the behavior will stay the same in future versions, and it could change without warning.
- If I wanted to smooth using 'lowess' with a span of 100% of the data points, I would use span = 1, according to the documentation. However, the actual behavior is no smoothing, as any numbers >= 1 are interpreted as a number of samples, rather than as a fraction of samples.
Side note:
Like moving, lowess forces span to be odd, but it adds one point (line 292):
span = 2*floor(span/2) + 1;
instead of subtracting one, as in moving (line 206):
width = span-1+mod(span,2); % force it to be odd
I don't see any reason why the behavior should be different between the two.
1 个评论
Chad Greene
2017-9-11
Interesting question, and well communicated. I'll be interested to find out what you hear from the documentation team.
采纳的回答
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!