如何检查我的数据(例如薪水)是否来自R中的连续指数分布?
这是我的样本的直方图:
。任何帮助将不胜感激!
fitdistr
在R中寻找函数。它根据最大似然估计(MLE)方法调整概率密度函数(pdfs)。还可以在该站点中搜索pdf,fitdistr,mle和类似问题。切记这样的问题几乎需要可复制的示例来收集好的答案。同样,如果问题不仅仅与编程有关(这可能导致它成为题外话而搁置),它也会有所帮助。
如何检查我的数据(例如薪水)是否来自R中的连续指数分布?
这是我的样本的直方图:
。任何帮助将不胜感激!
fitdistr
在R中寻找函数。它根据最大似然估计(MLE)方法调整概率密度函数(pdfs)。还可以在该站点中搜索pdf,fitdistr,mle和类似问题。切记这样的问题几乎需要可复制的示例来收集好的答案。同样,如果问题不仅仅与编程有关(这可能导致它成为题外话而搁置),它也会有所帮助。
Answers:
我会首先rate
使用来估计唯一的分布参数fitdistr
。这不会告诉您分布是否合适,因此您必须使用拟合优度检验。为此,您可以使用ks.test
:
require(vcd)
require(MASS)
# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution
# estimate the parameters
fit1 <- fitdistr(ex, "exponential")
fit2 <- fitdistr(control, "exponential")
# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) # significant p-value -> distribution refused
# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)
根据我的个人经验(尽管我从未在任何地方正式找到它,请确认或纠正我),ks.test
仅在您首先提供参数估计值的情况下才能运行。您不能像它那样让它自动估计参数goodfit
。这就是为什么需要使用的两步过程fitdistr
。
我通常建议使用诊断图(例如QQ图)检查指数,但我将讨论测试,因为人们经常需要它们:
正如托马斯所暗示的,Kolmogorov-Smirnov检验是不适合与未指定的参数测试exponentiality。
但是,如果调整表进行参数估计,则会得到Lilliefors的指数分布检验。
Lilliefors,H.(1969),“关于Kolmogorov–Smirnov检验的均值未知的指数分布”,《美国统计协会杂志》,第1卷。64。第387–389页。
此测试的用法在Conover的《实用非参数统计》中进行了讨论。
但是,在D'Agostino和Stephens的《拟合技术的善意》中,他们讨论了对安德森-达林测验的类似修改(如果我没记错的话,这有点倾斜,但是我认为关于指数情况下如何使用该测验的所有必要信息都是(可以在书中找到),并且几乎可以肯定,对于有趣的替代方案,它具有更大的威力。
同样,通过在上进行检验,可以估算出类似Shapiro-Francia检验(与Shapiro-Wilk相似,但比Shapiro-Wilk简单),其中是阶数统计量与指数分数之间的相关性(预期的指数订单统计信息)。这对应于测试QQ图中的相关性。r
最后,也许可以采用平滑测试的方法,如Rayner&Best在书中所述(《拟合优度的平滑测试》,1990年-尽管我相信还有一种更新的方法,在标题中加上了Thas和“ in R ”)。指数情况也包含在:
JCW Rayner和DJ Best(1990),“拟合优度的平滑测试:概述”,《 国际统计评论》,第1卷。58,第1号(1990年4月),第9-17页
Cosma Shalizi还在他的《本科生高级数据分析》 演讲笔记的一章中讨论了平滑测试,或者从基本的角度看了《高级数据分析》一书的第15章。
对于上述某些情况,您可能需要模拟测试统计量的分布;其他表可用(但是在某些情况下,由于原始模型的限制,无论如何,模拟起来可能更容易,甚至像Lilliefors测试一样,模拟自己的精度也更高)。
在所有这些方法中,我倾向于采用与Shapiro-Francia指数式等效的方法(也就是说,我将在QQ绘图中测试相关性[或者,如果我要创建表格,则可以使用,它将拒绝相同的情况]-它应该足够强大,可以与更好的测试竞争,但是非常容易做到,并且与QQ图的视觉外观具有令人愉悦的对应性(甚至可以选择将相关性和p值添加到绘图中(如果需要)。
您可以使用qq-plot,这是一种图形方法,用于通过将两个概率分布相互绘制来比较两个概率分布。
在R中,没有专门用于指数分布的现成的qq-plot函数(至少在基本函数中)。但是,您可以使用以下命令:
qqexp <- function(y, line=FALSE, ...) {
y <- y[!is.na(y)]
n <- length(y)
x <- qexp(c(1:n)/(n+1))
m <- mean(y)
if (any(range(y)<0)) stop("Data contains negative values")
ylim <- c(0,max(y))
qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
if (line) abline(0,m,lty=2)
invisible()
}
在解释结果时:如果比较的两个分布相似,则qq图中的点将大致位于y = x线上。如果分布是线性相关的,则qq图中的点将近似位于一条线上,但不一定位于y = x线上。
qexp
来自SSC的是罐头实现。