我正在尝试在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经验仅限于我们大学的单一模块,而且非常基础。所以任何高级技巧都会受到赞赏。
答案 0 :(得分:2)
Martin,这里有一些常见技巧和示例代码可以帮助您。
使用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
你看过这个包的文档了吗?用?寻求帮助
?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吗?您在“图形”选项卡中的后退箭头可以让您在图形之间来回移动。
M
答案 1 :(得分:1)
我认为你不需要使用apply,这使它成为滚动功能。
library(fitdistrplus)
set.seed(1234)
testData = rnorm(1000)
fit <- fitdist(testData, "norm")
plot(fit)
gofstat(fit)