我正在尝试使用matlab 2010中的此代码为pearson的相关系数创建自定义函数
function [p] = customcorr(o)
x := a
y := b
x_mean := mean(a)
y_mean := mean(b)
x_std := std(a)
y_std := std(b)
n := length(o)
r := (1/(n-1))*((x-x_mean)*(y-y_mean))/(x_std*y_std)
end
但是我在尝试执行时遇到错误
Error in ==> customcorr at 2
x := a
有人可能知道问题是什么吗?谢谢
答案 0 :(得分:1)
首先,检查正确的MATLAB语法:“正常”分配由=
完成,而不是:=
。
其次,您使用a
和b
但这些未定义为函数的参数。用function p = customcorr(a,b)
替换功能头。
第三,我不确定o
应该是什么,我认为它可以被length(a)
或length(b)
取代。
无偏相关系数的估计由
给出
(来自维基百科)
因此,您需要将所有(a-a_mean).*(b-b_mean)
与sum
相加。请注意,需要编写.*
来获取逐元素乘法。这样你就可以从向量的每个元素中减去均值,然后将相应的a
和b
相乘,并总结这些乘法的结果。
这是
function p = customcorr(a,b)
a_mean = mean(a);
b_mean = mean(b);
a_std = std(a);
b_std = std(b);
n = length(a);
p = (1/(n-1)) * sum((a-a_mean).*(b-b_mean)) / (a_std*b_std);
end
MATLAB在corr
函数中做了什么(除了许多其他有趣的事情)之外,他们检查参数的数量(nargin
变量)以查看a
和{{1}提供与否。您可以通过将以下代码添加到函数(开头)
b