r - 生成的随机数的卡方拟合优度

标签 r random statistics simulation

我使用逆 CDF 方法从指数柯西随机变量生成 1000 个样本。

现在为了验证这些是否属于其相关分布,我必须执行拟合优度的卡方检验。

我尝试了两种方法(如下) -

  1. Chisq.test(y) #其中有来自假定指数分布的 1000 个样本

    chisq.test(z) #cauchy
    

我收到以下错误:

data: y X-squared = 234.0518, df = 999, p-value = 1

 Warning message:
 In chisq.test(y) : Chi-squared approximation may be incorrect
  chisq.test(z)
 Error in chisq.test(z) : 
  all entries of 'x' must be nonnegative and finite 
  • 我下载了vcd库来使用goodfit() 并输入:

        t1 <- goodfit(y,type= "exponential",method= "MinChiSq")
        summary(t1)
    
  • 在这种情况下,错误消息:

       Error: could not find function "goodfit"
    

    有人可以指导如何正确实现卡方 GOF 测试吗?

    注意:样本并非来自正态分布(分别为指数分布和柯西分布) 我试图了解是否有可能获得观察到的和预期的数据,但到目前为止还没有运气。

    编辑 - 在编写其余代码之前,我确实输入了library(vcd)。抱歉假设这是显而易见的。

    最佳答案

    chisq.test(...) 函数主要设计用于计数,因此它期望其参数是可数的(使用 table(...) code> 例如),或者已经计数。它基本上为 xy(前两个参数)创建一个列联表,然后使用 chisq 测试来确定它们是否来自同一分布。

    您最好使用 Kolmogorov-Smirnov 测试,该测试是为像您这样的问题而设计的。 K-S 检验将样本的 ecdf 与测试分布的 cdf 进行比较,并检验它们相同的原假设。

    set.seed(1)
    df <- data.frame(y = rexp(1000),
                     z = rcauchy(1000, 100, 100))
    
    ks.test(df$y,"pexp")
    # One-sample Kolmogorov-Smirnov test
    #
    # data:  df$y
    # D = 0.0387, p-value = 0.1001
    # alternative hypothesis: two-sided
    
    ks.test(df$z,"pcauchy",100,100)    
    #  One-sample Kolmogorov-Smirnov test
    # 
    # data:  df$z
    # D = 0.0296, p-value = 0.3455
    # alternative hypothesis: two-sided
    

    请注意,在这种情况下,K-S 检验预测您的样本 df$y 有 90% 的可能性来自指数分布,尽管它显然来自指数分布。

    您可以使用chisq.test(...),方法是人为地对数据进行分箱,然后将每个箱中的计数与测试分布的预期进行比较(使用p= ...),但这很复杂,您得到的答案取决于垃圾箱的数量。

    breaks <- c(seq(0,10,by=1))
    O <- table(cut(df$y,breaks=breaks))
    p <- diff(pexp(breaks))
    chisq.test(O,p=p, rescale.p=T)
    #   Chi-squared test for given probabilities
    # 
    # data:  O
    # X-squared = 7.9911, df = 9, p-value = 0.535
    

    在这种情况下,chisq 检验预测您的样本有 47% 的可能性来自指数分布。

    最后,尽管它们是定性的,但我发现 Q-Q 图非常有用。这些图绘制了样本的分位数与测试分布的分位数的关系。如果样本是从测试分布中抽取的,则 Q-Q 图应接近线 y=x

    par(mfrow=c(1,2))
    plot(qexp(seq(0,1,0.01)),quantile(df$y,seq(0,1,0.01)),
         main="Q-Q Plot",ylab="df$Y", xlab="Exponential",
         xlim=c(0,5),ylim=c(0,5))
    plot(qcauchy(seq(0,.99,0.01),100,100),quantile(df$z,seq(0,.99,0.01)),
         main="Q-Q Plot",ylab="df$Z",xlab="Cauchy",
         xlim=c(-1000,1000),ylim=c(-1000,1000))
    

    enter image description here

    查看 Q-Q 图使我更有信心断言 df$ydf$z 分别是从指数分布和柯西分布中得出的K-S 或 ChiSq 测试,尽管我无法给出具体数字。

    关于r - 生成的随机数的卡方拟合优度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21655653/

    相关文章:

    java - 如何制作由 1's and 0' 组成的随机数组生成器,长度取自用户

    php - 基于MySQL和PHP的统计

    java - 特征脸的相关矩阵 - Java

    algorithm - 涉及 3 个硬币的 EM 问题

    R 并行处理 - 节点选择

    r - 文本分类-当训练数据和测试数据具有不同特征时该怎么办

    c# - 如何生成总和为预定值的 N 个随机值?

    javascript - 种子 PRNG 的安全性

    matlab - Matlab 中唯一值的累计计数

    r - 我可以移动光标在 R 中修改吗?