如何在fitdistrplus中拟合具有比例和位置参数的t分布

时间:2016-07-29 22:54:33

标签: r fitdistrplus

如何使用fitdistrplus估算t分布的比例参数的位置?我知道我需要提供初始值(在MASS中它可以很好地工作)但是在这个包中只允许使用df。你有解决方案吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

fitdistrplus包中的fitdist函数使用基于distr参数的分布函数。所以给出了这段代码:

data = 1.5*rt(10000,df=5) + 0.5
fit1 <- fitdist(data,"t",start=list(df=3))

fitdist正在使用R函数rtdtptqt。但是这些函数不支持位置和比例参数(因此上面的代码只会优化df参数并提供非常差的拟合)。因此,解决方案是使用提供所需参数的t分布版本。 metRology包提供了这样的版本metRology。该包中的分布称为t.scaled,并定义了相应的函数(rt.scaleddt.scaledpt.scaledqt.scaled)。

现在你可以适应三个参数df,mean和sd:

> library("metRology")
> fit2 <- fitdist(data,"t.scaled",
                  start=list(df=3,mean=mean(data),sd=sd(data)))

答案 1 :(得分:1)

可以根据此Wikipedia文章扩展基数R中的location和scale参数。

library(fitdistrplus)
x<-rt(100,23)
dt_ls <- function(x, df=1, mu=0, sigma=1) 1/sigma * dt((x - mu)/sigma, df)
pt_ls <- function(q, df=1, mu=0, sigma=1)  pt((q - mu)/sigma, df)
qt_ls <- function(p, df=1, mu=0, sigma=1)  qt(p, df)*sigma + mu
rt_ls <- function(n, df=1, mu=0, sigma=1)  rt(n,df)*sigma + mu
fit.t<-fitdist(x, 't_ls', start =list(df=1,mu=mean(x),sigma=sd(x))) 
summary(fit.t)

答案 2 :(得分:0)

学生t分布应该取2个参数,自由度数和零数偏移量。看看这是否适合你:

library(fitdistrplus)
#sample data
x<-rnorm(10, 2)

fitdist(x, "t", start= c(length(x)-1, mean(x)))

两个报告的值应该是估计的自由度和偏移值。