【问题标题】:Sample t-test in MatlabMatlab中的样本t检验
【发布时间】:2019-10-21 03:02:27
【问题描述】:

在 Matlab 中,我必须生成两个具有分布的高斯随机样本:

  1. N(100,5)
  2. N(115,15)

然后运行模拟 1000 次,并计算从 2 到 50 的每个样本量在 1000 次中被拒绝的次数。

最后,我需要根据样本量绘制H0 的拒绝结果。

h = zeros(1000,1);
k = 0;

for i = 1:1000
    r1 = ();
    r2 = ();
    for j= 2:50
        r1(j-1)=normrnd(100,5,[1,j]);
        r2(j-1)=normrnd(110,15,[1,j]);
    end
    h(i)=ttest2(r1,r2)
    if h(i)==1
        k=k+1;
    end
    percent_of_rejection_Null=(k/1000*100);
end
%plot(h vs sample_size)

有人可以帮我更正上面的代码吗?

【问题讨论】:

    标签: matlab t-test


    【解决方案1】:

    您的代码存在一些问题:

    1. ri 是一个可变大小的向量,因此您需要将其附加到一个可以存储不同大小元素的结构 -> 元胞数组。
    2. percent_of_rejection_Null 需要是一个向量来存储所有的值。
    3. 您没有具体说明您要查找的图类型,我展示了条形图,但很容易调整为您需要的图。
    4. h 的计算有问题,它的向量每次迭代都是 50,因此需要计算 1 的总和。

    这段代码是:

    h = zeros(1000,1);
    percent_of_rejection_Null = zeros(1000,1);
    k = 0;
    
    for i = 1:1000
        r1 = {};
        r2 = {};
        for j= 2:50
            r1{j-1}=normrnd(100,5,[1,j]);
            r2{j-1}=normrnd(110,15,[1,j]);
        end
        h = cellfun(@ttest2, r1, r2);
        k = sum(h==1);
        percent_of_rejection_Null(i) = (k/1000*100);
    end
    figure;
    plot(percent_of_rejection_Null)
    

    结果图是:

    如果输出不是您想要的,请编辑您的问题以便我进行调整。

    【讨论】:

    • 立即清除!谢谢
    • 您可以通过在制作随机样本的同一循环中调用ttest2 来简化代码。那么你就不需要存储中间数据了,你只需要在k中累加计数即可。
    • @CrisLuengo 你绝对正确,但我想尽可能保持相同的逻辑,以便能够指出代码的缺陷。 ri 的使用确实是不必要的,除非有人在循环之外使用它并且没有提到它
    • @DavidS 不过,我仍然怀疑我的原始代码是否正确。最终,我想绘制拒绝数量与从 2 到 50 扫描的样本量。因此,我的疑问是我是否应该简单地使用 r1(j-1)=normrnd(100,5) 而不是 r1(j-1)=normrnd(100,5,[1,j]) 因为否则对于每个模拟,我的模拟样本都会始终具有相同的大小。你怎么看?
    • @FunnyBuzer 我不知道您在给我们的代码中的目标是什么,您对保持向量大小相同的怀疑可能是正确的,但可能不是。您需要考虑您的问题并得出结论,对于您尝试解决的问题,不同的大小是否重要;希望它更有意义
    猜你喜欢
    • 2018-05-17
    • 2020-06-25
    • 2020-02-13
    • 2014-05-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多