R: la fonction mle pas réussi à estimer les paramètres avec le code d'erreur 100

0

La question

Je travaille avec le R langage de programmation.

Supposons que j'ai les données suivantes:

 [1]  3631  1681   188  1065   733   643  2001   714   180  5147  2541  1048   643  1356   270  4396   358  4025  2004  1879  2342  4138   616  3161  4904  4320   215
 [28]    79  5431  6551    97   889  6009   992  1487   336   840   612   769   680  5840   603  2581  4087  2241   129  2366  3856   980  1315  1050  7002    36   511
 [55]   529   534  3037  1123  3889  4611  2577  3953   517   774   923   295  3152   524   714  5135  2529  1561  6105  4305  3633  1164  1663   791    11   225   940
 [82]   172  4936   348  3410  3205  6827  3846  1809  6580    61   892  4525   523   595  3594  2245   999   343   856   106  1513   224   324  6725   323  2221  6455
[109]  3955  3580   532   775  3022  3049  1086   613  2866  4799   158   869  2510   149  1809  2772  5474  1096  5668   381  2428   428   308   932  1868   490 10163
[136]    12   671  1676   536  1940   686  1590  5749  1257  1389  3209   562  2504   129  1617  4058   521  2541    57 10747  1795   566  3290   372  5624  1229   252
[163]   257  1971   707  8036  2934   466   378   675  1551  2320   248  2871  4747  2987  6555   369   378   443   397  7653  1471   174   764   585   291   703   440
[190]  1808    83  3346  2384  2693    52   678  1320  7359  5367  1527  5789   300   101  1749  4265  4095  2134   326   326  1266   424   379  2275   206  1740  1593
[217]  1448  7488  1862  4304   436  2609   929  1583   325  5153   371   572   884   422 10905  2406  1873  4371    75   150  1538  1617  7756   630   691   200  1000
[244]   964   693   444    59  2059  1130  1276  1847   367  1533   875  2434   495  2087  1777  3709   335   156   280  2528  2401  1978   511  4999  2568  1398  2637
[271]  1668  2077  2993    69  3699  1667  2584  1915   679  4078  3014   555  2690    69   930  1026   324   991   973   566   459  2338   509   785   467   355  3186
[298]  5202  1122  5077  4945  1973  3029   377  4871  5481   284   801   444  1196   661    25   318  1137  1317  2841   143  1139  1662  1012    88  1764  1203  3618
[325]   713  8657  1274  2255    96   784  1687    62  1211   952   125  3260   879   430  3096   499   699  2395  1704  5818  2754  2012  6724  2891   959  1730   962
[352]   182   210  6051   902  3759  2211   206  1408  1472   883   773  2479   529  2932  1421  2111  1829   847  2761  1060  1805  1348  2049  2507   809   502  5877
[379]  1621  2254  1329  2752  1657   167   526   616   198  1648  1329  1643   360  1028   923  2819  1856  4562  2547  2517  6200  1704    10  1838   333  1643  1561
[406]   985  2763  4939  3116   855  1405   891  4503   210  4406  4836    33    97  4957  2202  1709  6048   123  1193 13006   271   781  2005  2970   352  1600  1862
[433]  2945  5234   502  2943  1666   167  4473   468   795  3175  1114     6   579    42   995  2705  1929   594   809   572   871   470   802   773  7028   430   139
[460]   215  1328   117  1324  1451  1455   157  1347  1049  2391   301  1587   602  1197   199  4400  1883  1971  1849  8050  7730  2527  4066  4443    54   838    16
[487]   584   261   579   729   226   292  1367  1608   749  1351  3710  2219   369   628

J'ai placé les données ci-dessus dans un bloc de données appelé "d" et a appelé la variable contenant les données comme "df". J'ai envie d'essayer et de s'adapter à différentes distributions de probabilité pour ces données:

library(fitdistrplus)
library(patchwork)
library(ggplot2)



 fg <- fitdist(d$df, "gamma")
 fln <- fitdist(d$df, "lnorm")
fg <- fitdist(d$df, "gamma")
 fw <- fitdist(d$df, "weibull")

 par(mfrow = c(2, 2))
 plot.legend <- c("Weibull", "lognormal", "gamma")

a <- denscomp(list(fw, fln, fg), legendtext = plot.legend, plotstyle = "ggplot")
b <- qqcomp(list(fw, fln, fg), legendtext = plot.legend, plotstyle = "ggplot")
c <- cdfcomp(list(fw, fln, fg), legendtext = plot.legend, plotstyle = "ggplot")
d <- ppcomp(list(fw, fln, fg), legendtext = plot.legend, plotstyle = "ggplot")

a+b+c+d

Mais ceci renvoie les erreurs suivantes:

<simpleError in optim(par = vstart, fn = fnobj, fix.arg = fix.arg, obs = data,     gr = gradient, ddistnam = ddistname, hessian = TRUE, method = meth,     lower = lower, upper = upper, ...): non-finite finite-difference value [2]>
Error in fitdist(d$df, "gamma") : 
  the function mle failed to estimate the parameters, 
                with the error code 100

Personne ne sait ce que je fais de mal? Quelqu'un peut-il svp me montrer comment corriger cette erreur?

Merci!

Références:

1

La meilleure réponse

1

À l'échelle les données de la première donnant xx. Aussi, nous avons réduit et fixe le code. (L'entrée x est indiqué dans la Note à la fin. Elle est tirée de la question, mais a montré dans reproductible formulaire.)

library(fitdistrplus)
library(patchwork)
library(ggplot2)

xx <- x/20000
fg <- fitdist(xx, "gamma")
fln <- fitdist(xx, "lnorm")
fw <- fitdist(xx, "weibull")
L <- list(fg, fln, fw)

a <- denscomp(L, plotstyle = "ggplot")
b <- qqcomp(L, plotstyle = "ggplot")
c <- cdfcomp(L, plotstyle = "ggplot")
d <- ppcomp(L, plotstyle = "ggplot")

a+b+c+d

screenshot

Note

Données reproductibles forme:

x <- c(3631, 1681, 188, 1065, 733, 643, 2001, 714, 180, 5147, 2541, 
1048, 643, 1356, 270, 4396, 358, 4025, 2004, 1879, 2342, 4138, 
616, 3161, 4904, 4320, 215, 79, 5431, 6551, 97, 889, 6009, 992, 
1487, 336, 840, 612, 769, 680, 5840, 603, 2581, 4087, 2241, 129, 
2366, 3856, 980, 1315, 1050, 7002, 36, 511, 529, 534, 3037, 1123, 
3889, 4611, 2577, 3953, 517, 774, 923, 295, 3152, 524, 714, 5135, 
2529, 1561, 6105, 4305, 3633, 1164, 1663, 791, 11, 225, 940, 
172, 4936, 348, 3410, 3205, 6827, 3846, 1809, 6580, 61, 892, 
4525, 523, 595, 3594, 2245, 999, 343, 856, 106, 1513, 224, 324, 
6725, 323, 2221, 6455, 3955, 3580, 532, 775, 3022, 3049, 1086, 
613, 2866, 4799, 158, 869, 2510, 149, 1809, 2772, 5474, 1096, 
5668, 381, 2428, 428, 308, 932, 1868, 490, 10163, 12, 671, 1676, 
536, 1940, 686, 1590, 5749, 1257, 1389, 3209, 562, 2504, 129, 
1617, 4058, 521, 2541, 57, 10747, 1795, 566, 3290, 372, 5624, 
1229, 252, 257, 1971, 707, 8036, 2934, 466, 378, 675, 1551, 2320, 
248, 2871, 4747, 2987, 6555, 369, 378, 443, 397, 7653, 1471, 
174, 764, 585, 291, 703, 440, 1808, 83, 3346, 2384, 2693, 52, 
678, 1320, 7359, 5367, 1527, 5789, 300, 101, 1749, 4265, 4095, 
2134, 326, 326, 1266, 424, 379, 2275, 206, 1740, 1593, 1448, 
7488, 1862, 4304, 436, 2609, 929, 1583, 325, 5153, 371, 572, 
884, 422, 10905, 2406, 1873, 4371, 75, 150, 1538, 1617, 7756, 
630, 691, 200, 1000, 964, 693, 444, 59, 2059, 1130, 1276, 1847, 
367, 1533, 875, 2434, 495, 2087, 1777, 3709, 335, 156, 280, 2528, 
2401, 1978, 511, 4999, 2568, 1398, 2637, 1668, 2077, 2993, 69, 
3699, 1667, 2584, 1915, 679, 4078, 3014, 555, 2690, 69, 930, 
1026, 324, 991, 973, 566, 459, 2338, 509, 785, 467, 355, 3186, 
5202, 1122, 5077, 4945, 1973, 3029, 377, 4871, 5481, 284, 801, 
444, 1196, 661, 25, 318, 1137, 1317, 2841, 143, 1139, 1662, 1012, 
88, 1764, 1203, 3618, 713, 8657, 1274, 2255, 96, 784, 1687, 62, 
1211, 952, 125, 3260, 879, 430, 3096, 499, 699, 2395, 1704, 5818, 
2754, 2012, 6724, 2891, 959, 1730, 962, 182, 210, 6051, 902, 
3759, 2211, 206, 1408, 1472, 883, 773, 2479, 529, 2932, 1421, 
2111, 1829, 847, 2761, 1060, 1805, 1348, 2049, 2507, 809, 502, 
5877, 1621, 2254, 1329, 2752, 1657, 167, 526, 616, 198, 1648, 
1329, 1643, 360, 1028, 923, 2819, 1856, 4562, 2547, 2517, 6200, 
1704, 10, 1838, 333, 1643, 1561, 985, 2763, 4939, 3116, 855, 
1405, 891, 4503, 210, 4406, 4836, 33, 97, 4957, 2202, 1709, 6048, 
123, 1193, 13006, 271, 781, 2005, 2970, 352, 1600, 1862, 2945, 
5234, 502, 2943, 1666, 167, 4473, 468, 795, 3175, 1114, 6, 579, 
42, 995, 2705, 1929, 594, 809, 572, 871, 470, 802, 773, 7028, 
430, 139, 215, 1328, 117, 1324, 1451, 1455, 157, 1347, 1049, 
2391, 301, 1587, 602, 1197, 199, 4400, 1883, 1971, 1849, 8050, 
7730, 2527, 4066, 4443, 54, 838, 16, 584, 261, 579, 729, 226, 
292, 1367, 1608, 749, 1351, 3710, 2219, 369, 628)
2021-11-24 13:52:55

@ G. Grothendieck : je vous remercie pour votre réponse! Savez-vous pourquoi il a été nécessaire de faire évoluer ces chiffres? merci!
stats555

En général, les algorithmes d'optimisation ne fonctionne pas bien lorsque les paramètres sont très différents de l'échelle. optim, utilisé par fitdist, a un parscale paramètre qui peut être transmis dans la liste de contrôle, mais fitdist n'a aucun moyen de contrôle des laissez-passer pour optim; cependant, nous pouvons scasle les valeurs elles-mêmes.
G. Grothendieck

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................