方差(variance) 和标准差(standard variance)
方差:表示一组离散数据偏离平均值的程度。
公式:
方差公式
方差的算术平方根称为该随机变量的 标准差 。
在Matlab中, 方差 用 var函数 求, 标准差 用 std函数 来求。
以下转自: Matlab方差用std 或var 求出的结果和公式算出来的不一样 – MATLAB中文论坛
和 MATLAB求方差函数 var – MATLAB中文论坛
请问如何用matlab求一组数据的均方误差,方差,用std 或var 求出的结果和公式算出来的不一样?
最近做的东西要对两个样本的可区分度进行度量。懒得去用那些复杂的东西,自己就想用两样本的均值差除以两样本的方差的和。
查了下 MATLAB中var是用来计算样本方差的。
但是发现好像有些错误
比如,输入样本a=[1 2 3];如果按照方差求解方法,a的方差应该是(1+0+1)/3=0666666……才对。使用var(a),结果MATLAB输出的结果却是1。Why
答案:
1出现此种情况的原因 :
方差的公式是:实际值与期望值之差的平方和再除以N。
这个公式是针对度量总体(population)的,而matlab的函数var和std认为 *** 作数是度量总体的一个样本(sample),所以使用的公式为实际值与期望值之差的平方和再除以(N-1)而不是N。
具体使用哪个定义,应该具体问题具体分析了。
2 解决方法 :
>> var(a,1) %除数为N
ans =06667
>> var(a,0)%除数为N-1,该式等价于var(a),二者都是除以N-1
ans=1
1、std函数是用来计算标准偏差的一个函数,由于其有不同的参数,我们就用下面的例子进行介绍:
A =
1 2 3
1 1 1
2、std(A):
std(A)函数求解的是最常见的标准差,此时除以的是N-1。
注意:此函数命令不能对矩阵求整体的标准差,只能按照行或者列进行逐个求解标准差,默认情况下是按照列。
在MATLAB主窗口中输入std(A) 回车,结果如下:
输出的是每一列的标准差。
3、std(A,flag):
这里flag代表的是用哪一个标准差函数,如果取0,则代表除以N-1,如果是1代表的是除以N,在MATLAB主窗口中输入std(A,1) 回车,std(A,0) 回车,可以看到如下结果
4、std(A,flag,dim):
第三个参数代表的是按照列求标准差还是按照行求标准差,std(A,1,1)代表的是按照列求标准差,std(A,1,2)代表的是按照行求标准差。
在MATLAB主窗口中输入如下命令:std(A,1,1) 敲回车 std(A,1,2) 敲回车。
1,[muhat,sigmahat,muci,sigmaci] = normfit(x),其中sigmahat不应该是标准差吗?(是的)为何有些的方说是方差?(不严格)
2,还有就是normfit估计出来的均值会不会总是在ttest算出的置信区间里(两种方式计算结果很接近)
文件名为tempxls,放在matlab库里,否则写全路径
标准差存在了res里,有两列,第一列,为A列代码的值,B列为A列对应所有值的标准差,公式中,为n,不为n-1
A=xlsread('tempxls');
x=unique(A(:,1));
n=length(x);
res=zeros(n,2);
res(:,1)=x;
for i =1:n
k = A(:,1)==x(i);
res(i,2)=std(A(logical(k),2));
end
这个是Help中的解释,我大概做下翻译:
s = std(X)
s = std(X,flag)
s = std(X,flag,dim)
有三个std函数,都是返回标准差的计算函数
有两个计算式(如中显示)两个计算等式只在除以n或者n-1的差别(The two forms of the equation differ only in versus in the divisor)
(1)s=std(x),返回向量(数组)的标准差,用计算等式(1)式计算,当x为矩阵时,可得单行的标准差
(2)s=std(x,flag),flag作为标记值,有1或者0两个取值,当flag取值为0时,用计算式(1)即等于直接使用std(x),当flag取值为1时,使用计算式(2)
(3)s=std(x,flag,dim),flag的作用如(2)中所说,dim标示x的次元
假如 x=[1,2,3
4,5,6
7,8,9]
s=std(x,1,1)
s =
24495 24495 24495
>> s=std(x,1,2)
s =
08165
08165
08165
这个你具体打开help,分别搜var和std函数就行了,help里边说的很明白很详细,一看就懂。
我这里稍微做一下解释:
v1=var(x)
V = var(X) returns the variance of X for vectors
v2=var(x,0)
var(X,0) is equivalent to var(X)
v3=var(x,1)
V = var(X,1) normalizes by N and produces the second moment of the sample about its mean
v4=var(x,w)
V = var(X,w) computes the variance using the weight vector w
v5=var(x,1,1)
V = var(X,w,dim) takes the variance along the dimension dim of X
s1=std(x)
s = std(X), where X is a vector, returns the standard deviation using (1) above
(std可以使用不同的式子求,求出来不等价,看具体情况选择,这里的(1)是help里边的一个公式)
s2=std(x,1)
s = std(X,flag) for flag = 0, is the same as std(X) For flag = 1, std(X,1) returns the standard deviation using (2) above, producing the second moment of the set of values about their mean
s3=std(x,w)
s = std(X,flag,dim) computes the standard deviations along the dimension of X specified by scalar dim Set flag to 0 to normalize Y by n-1; set flag to 1 to normalize by n
这里只是大体粘贴了一下,公式在help里边也有,你还是自己help一下哈~
那你就把A变成一列不就完了吗
std(A(:),flag)
如果flag=0,就是无偏标准差,就是除以n-1的,如果flag=1就是除以n的,是有偏的
过两点求直线方程这是初中的公式吧,不会连这都要说吧,实在不行直接polyfit也行啊。
A=[1,2];B=[3,4];
p=polyfit([A(1),B(1)],[A(2),B(2)],1);%y=p(1)x+p(2)
plot([A(1),B(1)],[A(2),B(2)],'ro');
hold on;ezplot(@(x)p(1)x+p(2))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)