在我的简单内核平滑代码中控制平滑程度
Control the degree of smoothing in my simple kernel smoothing code
我需要帮助自定义对我的时间序列数据的平滑处理。下面的代码使用 sm.regression
和 approx
函数对数据进行平滑处理,但平滑程度不受用户控制,即通过更改函数参数,我希望能够控制平滑曲线是否更符合基础数据紧密或不紧密。
find.extrema <- function(x)
{
if(is.xts(x)) {
y = as.vector( Cl(x) )
} else {
y = x
}
n = len(y)
t = 1:n
h = h.select(t, y, method = 'cv')
temp = sm.regression(t, y, h=h, display = 'none')
mhat = approx(temp$eval.points, temp$estimate, t, method='linear')$y
#mhat = y #to exactly match underlying data
return (mhat)
}
如有任何帮助,我们将不胜感激。
谢谢。
关于sm
包的问题不多。也许它现在没有被广泛使用,但我仍然记得在攻读 MRes 学位时经常使用它。
您无法控制平滑度,因为您正在使用交叉验证来自动选择平滑参数。只需删除 h.select
行并将 h
作为函数的参数传递。
find.extrema <- function(x, h = NULL)
{
if(is.xts(x)) {
y = as.vector( Cl(x) )
} else {
y = x
}
n = len(y)
t = 1:n
## if not given, do auto-selection from data
if (is.null(h)) h = h.select(t, y, method = 'cv')
temp = sm.regression(t, y, h=h, display = 'none')
mhat = approx(temp$eval.points, temp$estimate, t, method='linear')$y
#mhat = y #to exactly match underlying data
return (mhat)
}
sm
内核平滑和/或内核密度估计包的全部要点是交叉验证部分。如果您不使用它,您可以只使用 R base 中的 ksmooth
作为 Nadaraya-Watson 核估计器。您可以从 阅读更多相关信息。我确实在那里与 sm.regression
进行了比较。
我需要帮助自定义对我的时间序列数据的平滑处理。下面的代码使用 sm.regression
和 approx
函数对数据进行平滑处理,但平滑程度不受用户控制,即通过更改函数参数,我希望能够控制平滑曲线是否更符合基础数据紧密或不紧密。
find.extrema <- function(x)
{
if(is.xts(x)) {
y = as.vector( Cl(x) )
} else {
y = x
}
n = len(y)
t = 1:n
h = h.select(t, y, method = 'cv')
temp = sm.regression(t, y, h=h, display = 'none')
mhat = approx(temp$eval.points, temp$estimate, t, method='linear')$y
#mhat = y #to exactly match underlying data
return (mhat)
}
如有任何帮助,我们将不胜感激。
谢谢。
关于sm
包的问题不多。也许它现在没有被广泛使用,但我仍然记得在攻读 MRes 学位时经常使用它。
您无法控制平滑度,因为您正在使用交叉验证来自动选择平滑参数。只需删除 h.select
行并将 h
作为函数的参数传递。
find.extrema <- function(x, h = NULL)
{
if(is.xts(x)) {
y = as.vector( Cl(x) )
} else {
y = x
}
n = len(y)
t = 1:n
## if not given, do auto-selection from data
if (is.null(h)) h = h.select(t, y, method = 'cv')
temp = sm.regression(t, y, h=h, display = 'none')
mhat = approx(temp$eval.points, temp$estimate, t, method='linear')$y
#mhat = y #to exactly match underlying data
return (mhat)
}
sm
内核平滑和/或内核密度估计包的全部要点是交叉验证部分。如果您不使用它,您可以只使用 R base 中的 ksmooth
作为 Nadaraya-Watson 核估计器。您可以从 sm.regression
进行了比较。