R中的Weibull核密度估计

时间:2018-09-09 05:06:12

标签: r kernel-density density-plot

我正在尝试评估Salha等人的工作。 (2014),题为“使用Weibull内核的危险率函数估计”。但是我的密度图(用于真实数据)只是一条平线,而不是类似于文章的适当密度图。这是预期的密度,我的R代码和Weibull内核。请帮助我找出我的错误。

Expected Density Weibull Kernel

R代码:

public void ConfigureAuth(IAppBuilder app)
{
   app.UseCookieAuthentication(new CookieAuthenticationOptions
   {
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
      LoginPath = new PathString("/Account/Login")
   });
   app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}

1 个答案:

答案 0 :(得分:0)

希望这会有所帮助:

要达到上述目标,需要解决两个问题:

  1. 使用对数

首先(在您所指的paper中)他们使用输入数据的对数-我在论文的5.2节中找到了这一点--- 以下是此修复程序:

k<-200
yy<-c(1,1,1,5,7,8,8,13,14,14,17,18,21,21,22,25,27,27,30,30,31,31,32,34,35,36,37,38,39,39,40,49,49,54,56,56,62,63,65,65,67,75,76,79,82,83,84,84,84,90,91,92,93,93,103,103,111,112,119,122,123,126,129,134,144,147,153,163,167,175,228,231,235,242,256,256,257,311,314,322,369,415,573,609,640,737)
y<-log(yy)
n<-length(yy)

#h<-0.79 * IQR(y) * length(y) ^ (-1/5)
x <- seq(min(y) + 0.05, max(y), length = k)
h <- 0.480411

KWeibull <- matrix(rep(0, k * n), ncol = k)
fhat <- rep(0, k)

请注意,对带宽(h)进行了硬编码,使其等于研究论文的带宽,但这并不是至关重要的解决方案。

  1. 用于循环索引

for循环-您正在遍历yy(我认为这是内核密度估计器中的时间变量),但是您的x随机样本每次都在同一集合上进行迭代。并且也使用y而不是yy,因为这是对数转换的数据。

请参阅以下修复程序:(其中包括对数修复程序)

###########weibull###########
for (j in 1:k) {
  for (i in 1:n) {
    fn <- gamma(1 + h)
    KWeibull[i, j] <- (fn/(h * x[j])) * ((y[i] * fn)/x[j])^((1/h) - 1) * exp(-((y[i] * 
                                                                                   fn)/x[j])^(1/h))
  }
  fhat[j] <- 1/n * (sum(KWeibull[, j]))
}

plot(yy,KWeibull[,86], type = "l")
plot(x,fhat, type = "l")

enter image description here