Matlab独立测试

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)方法都需要统计工具箱