Как уменьшить предполагаемую ошибку в правом граде GEV? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть два набора данных об осадках за базовый период (1961-2000 гг.) И будущий временной горизонт (2061-2100 гг.) В условиях изменения климата.Я снабдил обе функции fevd в пакете extRemes, встроенном в R, и обе они статистически значимы с помощью теста KS (p = 0,79, 0,90 соответственно).Однако для базового периода форма подобранного параметра является отрицательной (местоположение = 49,7, масштаб = 14,9, форма = -0,089), в результате чего правый хвост недооценивается, расчетное значение для периода возврата 50, 100, 1000 лет.97, 104 и 124,8 соответственно.В то время как максимальное значение в выборке составляет 103,89, что может быть эмпирически рассмотрено как период возврата 40 лет.Если сравнивать с будущим интервалом времени, период возврата 1000 лет в базовом периоде будет составлять всего 30 лет.Это явно не логично.Очевидно, это связано с большой оценочной ошибкой в ​​правом граде за базовый период.Я попытался увеличить вес для правого хвоста в вычислениях правдоподобия (указав весовой параметр в fevd).Но мне интересно, как сделать тест значимости для новой примерки?Как правило, это не является статистически значимым, а оценочные значения нестабильны.

Как я могу справиться с такой проблемой?Ниже приведены данные испытаний:

require(extRemes)
require(evd)

# no weights
weights=1
fit=fevd(xb,type="GEV",method=c("MLE","GMLE")[2],verbose=TRUE,weights=1)
ksb=ks.test(fit$x,pgev,fit$results$par[1],fit$results$par[2],fit$results$par[3])
print(fit$results)
#Location    Scale       shape
#47.91380457 14.90826196 -0.08899684
print(ksb)
#D = 0.099517, p-value = 0.7866
return.level(fit,return.period=c(50,100,1000))
#97.05897       104.19041       124.83811

fit=fevd(xf,type="GEV",method=c("MLE","GMLE")[2],verbose=TRUE,weights=1)
ksf=ks.test(fit$x,pgev,fit$results$par[1],fit$results$par[2],fit$results$par[3])
print(fit$results)
#Location    Scale       shape
#45.4775676 13.0846847  0.3677431 
print(ksf)
#D = 0.085989, p-value = 0.9042
return.level(fit,return.period=c(50,100,1000))
#159.3110        203.0502        461.0956 


#weighted
weights=c(rep(1,35),rep(30,5))
fit=fevd(xb,type="GEV",method=c("MLE","GMLE")[2],verbose=TRUE,weights=weights)
ksb=ks.test(fit$x,pgev,fit$results$par[1],fit$results$par[2],fit$results$par[3])
print(fit$results)
#Location    Scale       shape
#69.05423757 20.14142692  0.03734749
print(ksb)
#D = 0.50196, p-value = 0
return.level(fit,return.period=c(50,100,1000))
#153.6599        170.1430        227.7687

fit=fevd(xf,type="GEV",method=c("MLE","GMLE")[2],verbose=TRUE,weights=weights)
ksf=ks.test(fit$x,pgev,fit$results$par[1],fit$results$par[2],fit$results$par[3])
print(fit$results)
#Location    Scale       shape
#80.88160150 30.12867059  0.05011096
print(ksf)
#D = 0.57544, p-value = 0
return.level(fit,return.period=c(50,100,1000))
#210.7223        236.7541        329.5452
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...