octave - Octave 的 chisquare_test_homogeneity(x, y, bins) 是如何工作的?
问题描述
如何使用 chisquare_test_homogeneity (x, y, c)?能给我举个例子吗。
chisquare_test_homogeneity (x, y, c) 给定两个样本 x 和 y,根据 c 的(严格递增的)条目引起的分区,对 x 和 y 来自同一分布的原假设的同质性执行卡方检验。
我尝试如下调用它,但似乎我的输入是错误的。
x = poissrnd(2, [1,100]); #generate 100 poisson
y = poissrnd(3, [1, 100]); #another 100 poisson
bins = [0:10];
chisquare_test_homogeneity(x, y, bins); #NaN?
解决方案
看看中的代码chisquare-test-homogeneity.m
。这不是一个大文件。我在下面复制它(粗体强调我的):
c = [(重塑 (c, 1, df)), Inf]; l_x = 长度 (x); x = 重塑 (x, l_x, 1); n_x = sum (x * 个 (1, df+1) < 个 (l_x, 1) * c); l_y = 长度(y); y = 重塑 (y, l_y, 1); n_y = sum (y * 个 (1, df+1) < 个 (l_y, 1) * c); chisq = l_x * l_y * sum ((n_x/l_x - n_y/l_y).^2 ./ (n_x + n_y)); pval = 1 - chi2cdf (chisq, df);
我对该代码的阅读是,X
并且Y
应该由数字组成,例如整数,其中每个唯一的整数代表一个特定的类。
然后,C 似乎期望一个“分区点”向量,即“介于”这些整数之间的数字,清楚地分开类。请注意,在上面的粗体部分中,使用了严格的不等式,而不是<=
,因此您的分区不应与 X 和 Y 中使用的数字(例如整数)共存。
该代码还暗示您不应拥有低于 X 或 y 中最小整数的“分区”数,因为这会导致除以零。(漏洞?)
这也意味着如果你有 1:10 的值,那么 C 应该是 0.5:9.5 而不是 0.5:10.5,因为代码Inf
向 C 添加了一个额外的参数来覆盖所有值,因此 10.5 分区将还尝试计算 10.5 和 Inf 之间的任何数字,引入一个不存在的类(即假设在 X 和 Y 中都没有出现)。
这也意味着如果您愿意,可以使用 C 变量将组“组合在一起”,例如,如果 X 和 Y 取值在 1:10 范围内,您可以指定分区 C = [0.5, 1.5, 9.5],其中会将 1 视为一类,将 2:9 视为另一类,将 10 视为第三类。
显然这些都没有记录,这只是直接研究m文件的结论。
所以,关于你的例子,我会这样运行它:
x = poissrnd(2, [1,100]); #generate 100 poisson
y = poissrnd(3, [1, 100]); #another 100 poisson
c = 0.5 : ( max([x,y]) - 0.5 );
chisquare_test_homogeneity(x, y, c);
话虽如此,这似乎是我不熟悉的卡方检验的某种“累积”定义,我上面的解释可能是错误的。所以我会简单地将问题改写为“独立”卡方检验,这更容易直观地理解:
C = 1:max([x,y]); % define available classes (integers)
X = sum( x.' == C, 1 ); % get number of counts per class
Y = sum( y.' == C, 1 ); % get number of counts per class
chisquare_test_independence ([X;Y]) % perform test on contingency table
推荐阅读
- jestjs - React Js - 单元测试 - sanitizeEmail
- prediction - 函数 nnet 是否适用于带有文本的神经网络?
- python - 如何拆分字符串并仅保留分隔符后的文本?
- python - 使用 Spark 的 Conda 环境
- macos - 在进行顺序 C 调用时,在 MacOS 上的 x86 程序集中出现堆栈对齐错误?
- javascript - React Native 使用渲染道具创建自定义模式
- sql - 交易功能的完美数据库设计
- java - 有向图最短路径源到目的地 Dijkstra
- php - 我需要这个 $LoadId=implode(',',array_filter($_POST["load"])); 的输出 看起来像这样 ('7209','7210')
- windows - 脚本在windows中更改10,000个文件夹的文件夹名称