如何在MATLAB中计算t检验的p值?

时间:2012-05-14 18:24:49

标签: matlab

是否有一些简单的方法来计算matlab中T-Test的P值。

我找到了类似的东西,但我认为id不会返回正确的值: Pval = 2 *(1-tcdf(abs(t),n-2))。

我想计算P值,以确定reggression的斜率等于0.因此我计算出StandardError $ SE = \ sqrt {\ frac {\ sum_ {s = iw} ^ {i + w} {( Y_ {S} - \ widehat {Y} _s})^ 2} {(W-2)\ sum_ {S = IW} ^ {1 +瓦特} {(X_ {S} - \酒吧{X}})^ 2}} $其中$ y_s $是时间段内分析参数的值$ s $,$ \ widehat {y} _s $是时间段内分析参数的估计值$ s $,$ x_i $是时间点在分析参数的观察值中,$ \ bar {x} $是分析期间的时间点的平均值,然后是$ t_ {score} =(a - a_ {0})/ SE $,其中$ a_ {0} $ where $ a_ {0} = 0 $

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

我检查了ttest函数的p值和使用这个公式计算的p值:

% Let n be your sample size
% Let v be your degrees of freedom

% Then:
pvalues = 2*(1-tcdf(abs(t),n-v)) 

他们是一样的!

Matlab演示数据集示例:

load accidents
x = hwydata(:,2:3);
y = hwydata(:,4);
stats = regstats(y,x,eye(size(x,2)));
fprintf('T stat using built-in function: \t %.4f\n', stats.tstat.t);
fprintf('P value using built-in function: \t %.4f\n', stats.tstat.pval);
fprintf('\n\n');

n = size(x,1);
v = size(x,2);
b = x\y;
se = diag(sqrt(sumsqr(y-x*b)/(n-v)*inv(x'*x)));
t = b./se;
p = 2*(1-tcdf(abs(t),n-v));
fprintf('T stat using own calculation: \t\t %.4f\n', t);
fprintf('P value using own calculation: \t\t %.4f\n', p);