1

是否有一些简单的方法可以在 MATLAB 中计算 t-Test 的 p 值。

我发现了类似的东西,但是我认为它没有返回正确的值:

Pval=2*(1-tcdf(abs(t),n-2))

我想计算回归斜率等于 0 的检验的 p 值。因此我计算标准误差

$SE= \sqrt{\frac{\sum_{s = iw }^{i+w}{(y_{s}-\widehat{y} s})^2}{(w-2)\sum {s =iw}^{i+w}{(x_{s}-\bar{x}})^2}}$

其中$y_s$是$s$时间段内分析参数的值,
$\widehat{y}_s$是时间段$s$内分析参数的估计值,
$x_i$是观察到的时间点分析参数的值,
$\bar{x}$ 是分析期间时间点的平均值,然后
$t_{score} = (a - a_{0})/SE$ where $a_{0}$ where $ a_{0} = 0$。

4

1 回答 1

4

我检查了来自 ttest 函数的 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);
于 2014-06-24T06:35:58.300 回答