如何在R中正确使用gofstat?

时间:2015-03-18 11:38:02

标签: r goodness-of-fit

我正在尝试在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(FUNC)     gofstat(func)出错:       参数f必须是'fitdist'对象或'fitdist'对象列表。     for(i in 1:1000)     + plot(f [[i]])     f [[i]]:下标超出范围

时出错   

尽管出现了“下标越界”错误,但仍然会出现这些情节(我认为这可能是由于导入数据中存在错误的负值),但我真的想知道我的gofstat用法有什么问题。有什么想法吗?

P.S。我的R经验仅限于我们大学的单一模块,而且非常基础。所以任何高级技巧都会受到赞赏。

2 个答案:

答案 0 :(得分: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. 您希望绘制分布类型而不是数据。

  4. 所以:

    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中的分发列表。注意一些分布期望所有值都是正的(例如泊松 - 因为它与计数有关)。

    你在使用RStudio吗?您在“图形”选项卡中的后退箭头可以让您在图形之间来回移动。

    M

答案 1 :(得分:1)

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

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

plot(fit)
gofstat(fit)