2

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

我的代码的最初部分实际上只是从 Excel 导入我的示例数据(我在 Excel 中创建了一个 1000 个值,通常分布在 Excel 中,并将其保存为 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 使用有什么问题。有任何想法吗?

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

4

2 回答 2

3

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

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

plot(fit)
gofstat(fit)
于 2015-03-18T12:05:08.460 回答
3

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

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

于 2015-03-18T12:07:49.723 回答