概率密度函数的最小二乘回归,但我得到不正确的维度错误

Least Squares Regression for Probability Density function but I get incorrect dimensions error

我正在尝试对此概率密度函数执行最小二乘回归,但系统提示我在 matlab 中执行 .* 操作,而不是评估 [=13= 时的标准 * 操作].当我这样做时,我的情节底部出现奇怪的扁平线。

代码:

N = 10000;
mu = 5; sigma = 2;
r = randn(N,1);
x = mu+sigma*r;
bin=mu-6*sigma:0.5:mu+6*sigma;
f=hist(x,bin);
plot(bin,f,'bo'); hold on;
xlabel('bin');
ylabel('f');

y_ = f;
x_ = bin;


H = [ones(length(y_),1),x_'];
Astar = inv(H'*H)*H'.*y_;        % Line in Question
% Astar = inv(H'*H)*H'*y_;       % Initial form, but Matlab prompts to perform .* instead
Ytilde = H*Astar;
plot(x_,Ytilde, 'r-','LineWidth',1)

结果图:

可能是什么原因?

无论好坏,MATLAB 的一些命令 return 行向量和一些 return 列向量。通常(或者可能几乎总是)统计是用作为列向量的观察向量完成的。据我所知,这只是使用某些命令时必须注意的事情。

您的问题来自于 y_ 是一个行向量,而普通统计公式假设它是一个列向量。在 'line in question' 中,如果您使用 *y_' 而不是 .*y_(即 Astar = inv(H'*H)*H'*y_';),那么您会得到预期的行为。

MATLAB中的冒号运算符生成一个行向量,hist做同样的事情。这些才是问题的根源。这些可以通过几种方式解决。

一种方法是在代码的第一部分生成它们时转置它们。另一种方法是在实例化 x_y_ 时转置它们(在下面完成)。另一种方法(也可能是最糟糕的方法)是将它们保留为行向量并在每次使用它们时转置它们。总的来说,解决方案将取决于您的其余代码,最好保持一致。

===

N = 10000;
mu = 5; sigma = 2;
r = randn(N,1);
x = mu+sigma*r;
bin=mu-6*sigma:0.5:mu+6*sigma;
f=hist(x,bin);
figure;
scatter(bin,f); hold on;
xlabel('bin');
ylabel('f');

y_ = f';
x_ = bin';


H = [ones(length(y_),1),x_];
Astar = inv(H'*H)*H'*y_;        % Line in Question
Ytilde = H*Astar;
plot(x_,Ytilde, 'r-','LineWidth',1)

===

[另请注意,您仍然得到一条水平线,但 y ~= 200。鉴于曲线是对称的,这是预期的,这也与 MATLAB 的内置 polyfitpolyval 函数一致.]

[另请注意,不再推荐 hist。]