【问题标题】:How to properly use gofstat in R?如何在 R 中正确使用 gofstat?
【发布时间】:2015-03-18 11:38:02
【问题描述】:

我正在尝试在 R 中编写一些代码,从 Excel 中获取样本数据并确定最适合数据的分布,然后是所述分布的参数。经过一番谷歌搜索,我决定尝试使用 fitdistrplus 来拟合分布,并看到 gofstat 是一个可用于检查拟合优度的函数。我想比较 GOF 统计数据以找到循环中最合适的分布。

我的代码的最初部分实际上只是从 Excel 中导入我的示例数据(我在 Excel 中创建了一个 1000 个通常分布的值,并将其保存为 CSV 格式的单列),并尝试将其适应分布并绘制结果。

library(fitdistrplus)
testData = read.table("C:\\Users\\Havok\\Documents\\Skripsie\\Excel\\NormalTest1.csv", header=FALSE)
(func <- apply(testData, 2,  fitdist, "norm"))
gofstat(func)
for(i in 1:1000)
  plot(f[[i]])

但是,每当我尝试运行代码时,都会收到错误消息

gofstat(函数) gofstat(func) 中的错误: 参数 f 必须是“fitdist”对象或“fitdist”对象列表。 for(i in 1:1000) + 情节(f[[i]]) f[[i]] 中的错误:下标超出范围

尽管出现“下标越界”错误(我认为这可能是由于导入数据中的杂散负值),这些图仍然出现,但我真的想找出我的 gofstat 使用有什么问题。有什么想法吗?

附:我的 R 经验仅限于我们在大学学习的一个模块,而且非常基础。因此,任何高级技巧都会受到赞赏。

【问题讨论】:

    标签: r goodness-of-fit


    【解决方案1】:

    我认为您不需要使用 apply,这使其成为滚动功能。

    library(fitdistrplus)
    set.seed(1234)
    testData = rnorm(1000)
    fit <- fitdist(testData, "norm")
    
    plot(fit)
    gofstat(fit)
    

    【讨论】:

      【解决方案2】:

      Martin,这里有一些通用提示和示例代码可以帮助您。

      1. 使用rnorm() 在 R 中生成随机数列表很方便。我在测试期间使用 set.seed 固定相同系列的随机数。

        testData <- rnorm(1000)
        head(testData) 3 see first few elements
        [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078 -0.8204684
        
      2. 您查看过此软件包的文档吗?使用?寻求帮助

        ?fitdistrplus
        ?gofstat
        
      3. 您想要绘制分布类型而不是数据。

      所以:

      library(fitdistrplus)
      # setting where random number sequence starts so you can reproduce results. 
      set.seed(1)
      testData <- rnorm(1000)
      # list of distributions
      #   see help  for full list e.g. "norm", "lnorm", "exp" and "pois",
      #   "cauchy", "gamma", "logis", "nbinom" (parametrized by mu and size),
      #   "geom", "beta", "unif", and "weibull"
      dist <- c("norm", "unif")
      
      # Loop through your list of distributions
      for(i in length(dist)){
        x <- fitdist(testData, dist[i])
        gofstat(x)
        plot(x)
      }
      

      添加到 dist 中的分发列表。请注意,某些分布期望所有值都是正数(例如 Poisson - 因为它与计数有关)。

      您在使用 RStudio 吗?绘图选项卡中的后退箭头可让您在绘图之间来回切换。

      中号

      【讨论】:

      • 非常感谢您的回答。我确实查看了包的文档,但无法从那里找出我的问题,所以这些答案真的很有帮助。 f 应该是 func - 只是我的一个错字。对此感到抱歉。
      • 我添加了一些代码来循环遍历分布,因为我认为这就是你想要做的。谢谢。
      • 你为我节省了很多时间。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多