我正在尝试解决一个练习,我需要计算本地常量内核估算器并使用留一交叉验证来提供带宽。 我的想法是我需要在Matlab中实现这一点,而不是使用一些内置函数(我还没有找到)。步骤是这样的:
见方程图:
我在Matlab中实现这一点的方法是首先编写一个函数,计算单个h的步骤2,然后使用fminsearch
函数找到最小值。
我的问题是我在写这个交叉验证功能时遇到困难。特别是 - 对i
以外的所有值进行循环和求和会给我带来麻烦。
这是我非常不完整的函数代码:
function SSresiduals = CV(h, N, data, grid, y)
%sum(ghat_{i,-i} - y_i)^2
h_mone = zeros(N,1);
for i = 1:N
for j = 1:N
if j~=i
u=(grid(:,i)-data(:,j))/h;
k= ((1/sqrt(2*pi))).*exp(-u.^2/2);
h_mone = h_mone + k;
end
end
end
其中N是等于205的标量。数据和网格是801x205的矩阵,y是205x1的向量。 这是不完整的,因为我被困在我需要循环数值的部分,并以某种方式总结它们,但结果的维度对我来说似乎不对。 我真的很感激有关这方面的任何见解。谢谢!