如何在 R 中正确使用 gofstat?

How to properly use gofstat in R?

我正在尝试在 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) Error in gofstat(func) : argument f must a 'fitdist' object or a list of 'fitdist' objects. for(i in 1:1000) + plot(f[[i]]) Error in f[[i]] : subscript out of bounds

尽管出现了 "subscript out of bounds" 错误(我认为这可能是由于导入数据中存在杂散的负值),但图仍然出现,但我真的很想找出我的 gofstat 使用有什么问题。有什么想法吗?

P.S。我的 R 经验仅限于我们在大学时的一个模块,而且非常基础。因此,我们将不胜感激任何高级技巧。

我认为您不需要使用应用,这使它成为一个滚动函数。

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

plot(fit)
gofstat(fit)

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

  1. 在 R 中使用 rnorm() 生成随机数列表很方便。我在测试期间使用 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 中的发行版列表。请注意,某些分布期望所有值均为正(例如泊松 - 因为它与计数有关)。

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