Elp*_*rto 11 statistics matlab r
对于1,000,000次观察,我观察到一个离散事件X,对照组为3次,对于测试组为10次.
我需要在Matlab中进行Chi square独立测试.这是你在r中的方式:
m <- rbind(c(3, 1000000-3), c(10, 1000000-10))
# [,1] [,2]
# [1,] 3 999997
# [2,] 10 999990
chisq.test(m)
Run Code Online (Sandbox Code Playgroud)
r函数返回卡方= 2.7692,df = 1,p值= 0.0961.
我应该使用或创建什么Matlab函数来执行此操作?
Amr*_*mro 14
这是我自己使用的实现:
function [hNull pValue X2] = ChiSquareTest(o, alpha)
%# CHISQUARETEST Pearson's Chi-Square test of independence
%#
%# @param o The Contignecy Table of the joint frequencies
%# of the two events (attributes)
%# @param alpha Significance level for the test
%# @return hNull hNull = 1: null hypothesis accepted (independent)
%# hNull = 0: null hypothesis rejected (dependent)
%# @return pValue The p-value of the test (the prob of obtaining
%# the observed frequencies under hNull)
%# @return X2 The value for the chi square statistic
%#
%# o: observed frequency
%# e: expected frequency
%# dof: degree of freedom
[r c] = size(o);
dof = (r-1)*(c-1);
%# e = (count(A=ai)*count(B=bi)) / N
e = sum(o,2)*sum(o,1) / sum(o(:));
%# [ sum_r [ sum_c ((o_ij-e_ij)^2/e_ij) ] ]
X2 = sum(sum( (o-e).^2 ./ e ));
%# p-value needed to reject hNull at the significance level with dof
pValue = 1 - chi2cdf(X2, dof);
hNull = (pValue > alpha);
%# X2 value needed to reject hNull at the significance level with dof
%#X2table = chi2inv(1-alpha, dof);
%#hNull = (X2table > X2);
end
Run Code Online (Sandbox Code Playgroud)
并举例说明:
t = [3 999997 ; 10 999990]
[hNull pVal X2] = ChiSquareTest(t, 0.05)
hNull =
1
pVal =
0.052203
X2 =
3.7693
Run Code Online (Sandbox Code Playgroud)
请注意,结果与您的结果不同,因为chisq.test默认情况下会执行更正?chisq.test
correct:表示在计算2x2表的测试统计量时是否应用连续性校正的逻辑:从所有| O - E |中减去一半.差异.
或者,如果您对所讨论的两个事件有实际观察结果,则可以使用CROSSTAB函数来计算列联表并返回Chi2和p值度量:
X = randi([1 2],[1000 1]);
Y = randi([1 2],[1000 1]);
[t X2 pVal] = crosstab(X,Y)
t =
229 247
257 267
X2 =
0.087581
pVal =
0.76728
Run Code Online (Sandbox Code Playgroud)
R中的等价物是:
chisq.test(X, Y, correct = FALSE)
Run Code Online (Sandbox Code Playgroud)
注意:上述两种(MATLAB)方法都需要统计工具箱