如何在 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,这里有一些一般提示和示例代码可以帮助您。
在 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
你看过这个包的文档了吗?使用 ?寻求帮助
?fitdistrplus
?gofstat
您想绘制分布类型而不是数据。
所以:
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 吗?绘图选项卡中的后退箭头可让您在绘图之间来回移动。
米
我正在尝试在 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,这里有一些一般提示和示例代码可以帮助您。
在 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
你看过这个包的文档了吗?使用 ?寻求帮助
?fitdistrplus ?gofstat
您想绘制分布类型而不是数据。
所以:
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 吗?绘图选项卡中的后退箭头可让您在绘图之间来回移动。
米