De vergelijking van een exponentiële functie is $ y = ae ^ {bx} $
De gegevens worden uitgezet zoals hieronder weergegeven:
Dit transformeren voor lineaire regressie: $ ln (y) = ln (a) + bx $
Deze transformatie wordt getoond in de onderstaande plot:
Dan is de lineaire regressievergelijking: $ ln (y) = -369.9778 + 0.187693x $
Hoe transformeer ik het terug in de vorm van $ y = ae ^ { bx} $ ??
Mijn probleem zit in $ ln (a) = -369.9778 $. Hoe u de $ a $ waarde kunt krijgen.
Zelfs Excel kan de vergelijking niet correct krijgen, maar er is een trendlijn? Ik begrijp niet hoe het is afgeleid. De trendlijn vertegenwoordigt helemaal niet het werkelijke scenario op basis van de gegevens:
Maar het is enigszins nauwkeurig wanneer ik de recentere gegevenspunten gebruik:
De gegevens zijn als volgt:
Year Asymptomatic AIDS Total 1984 0 2 2 1985 6 4 10 1986 18 11 29 1987 25 13 38 1988 21 11 32 1989 29 10 39 1990 48 18 66 1991 68 17 85 1992 51 21 72 1993 64 38 102 1994 61 57 118 1995 65 51 116 1996 104 50 154 1997 94 23 117 1998 144 45 189 1999 80 78 158 2000 83 40 123 2001 117 57 174 2002 140 44 184 2003 139 54 193 2004 160 39 199 2005 171 39 210 2006 273 36 309 2007 311 31 342 2008 505 23 528 2009 804 31 835 2010 1562 29 1591 2011 2239 110 2349 2012 3151 187 3338 2013 4477 337 4814 2014 5468 543 6011 2015 7328 503 7831 2016 8151 1113 9264
Opmerkingen
- Ik ‘ gebruik Excel niet routinematig en ‘ weet niet wat de toegevoegde regel is in je eerste plot. Het ‘ is zeker niet exponentieel omdat het niet monotoon is. Ik raad studenten en collegas aan om nooit een curve te geven als ze kunnen ‘ t legt uit hoe het werd geproduceerd. Het ‘ is waarschijnlijk een polynoom of een spline.
- Ik heb zojuist op exponentieel gedrukt in Excel. Jij ‘ re right Ik heb gewoon willekeurig geklikt op wat ik voelde het zo. Ik probeer uit te vinden hoe ik elk soort regel correct kan aanpassen. Ik ben alleen bekend met lineaire regressie.
- Bedankt voor het verstrekken van een Excel-bestand op een andere site. Ik ‘ heb de gegevens genomen en in uw vraag vermeld. Dat ‘ is een betere manier om voorbeelden te geven door een of twee andere programmas te verwijderen, geen Excel te gebruiken, wat veel mensen niet ‘ doen of niet ‘ hebben, en mensen gewoon iets geven dat ze kunnen kopiëren en in hun favoriete software plakken.
Antwoord
Deze twee regressies zullen geen parameterwaarden geven die exact in elkaar kunnen worden omgezet:
$ ln (y) ~ vs. ~ A + B ~ x $
$ y ~ vs. ~ a ~ exp (b ~ x) $
omdat ze verschillende sommen kwadraten minimaliseren, namelijk respectievelijk de volgende:
$ \ Sigma_i (ln (y_i) – (A + B ~ x_i)) ^ 2 $
$ \ Sigma_i (y_i – a ~ exp (b ~ x_i)) ^ 2 $
en dat zijn geen gelijkwaardige minimalisatieproblemen.
De eerste regressie kan worden opgelost voor $ A $ en $ B $ met behulp van lineaire regressie.
Om de tweede regressie op te lossen, begint u met het oplossen van de eerste. Gebruik vervolgens $ a = exp (A) $ en $ b = B $ als startwaarden om het tweede regressieprobleem op te lossen met een niet-lineaire regressieoplosser (d.w.z. in Excel zou dat Oplosser zijn). Als het niet-lineaire regressiemodel ver genoeg verwijderd is van het lineaire regressiemodel, is het mogelijk dat deze startwaarden niet toereikend zijn. In dat geval moet u andere startwaarden proberen.
Toegevoegd
De gegevens zijn aan de vraag toegevoegd, zodat we nu de voorgestelde actie kunnen uitvoeren die in de bovenstaande paragraaf is besproken. Hieronder laten we de R-code zien om dit te doen. Als u R op uw computer installeert, kopieert en plakt u die code in de R-console.
Eerst lezen we de gegevens in DF
en voeren we vervolgens een lineair model uit, dwz regressie, van log(Total)
vs. Year
. Merk op dat log
in R logboekbasis e is. We zien dat de regressiecoëfficiënten die worden geproduceerd A = -369,977814 en B = 0,187693 zijn voor het snijpunt en de helling. Vervolgens extraheren we de helling naar variabele b
om te gebruiken als een startwaarde in de niet-lineaire regressie. We hebben het snijpunt niet nodig als startwaarde, aangezien het niet-lineaire regressie-algoritme, plinear, alleen startwaarden vereist voor niet-lineaire parameters. Vervolgens voeren we de niet-lineaire regressie uit van Total
vs. a * exp(b * Year)
. De coëfficiënten die het produceert zijn b = 2.838264e-01 en a = 3.117445e-245. We plotten vervolgens het resultaat en we zien dat het redelijk dicht bij de gegevens lijkt.
In het algemeen impliceren numerieke overwegingen bij het uitvoeren van niet-lineaire optimalisatie dat we willen dat de parameters ongeveer van dezelfde grootte zijn, wat niet het geval is. Dit suggereert dat het opnieuw parametriseren van het model als volgt is:
$ y ~ vs. ~ exp (a ~ + ~ b ~ x_i) $ [opnieuw geparametriseerd niet-lineair model]
en aan het einde van de onderstaande code doen we dat. We zien dat nu de parameters zijn a = -562,9959733 en b = 0.2838263 waar nu a is zoals gedefinieerd in de definitie van het opnieuw geparameteriseerde niet-lineaire model. Deze parameters zijn veel meer vergelijkbare waarden, dus ons niet-lineaire model met nieuwe parameters lijkt de voorkeur te hebben.
De grafiek zou er ongeveer zo uitzien als de grafiek die wordt weergegeven voor het eerste niet-lineaire regressiemodel.
Lines <- "Year Asymptomatic AIDS Total 1984 0 2 2 1985 6 4 10 1986 18 11 29 1987 25 13 38 1988 21 11 32 1989 29 10 39 1990 48 18 66 1991 68 17 85 1992 51 21 72 1993 64 38 102 1994 61 57 118 1995 65 51 116 1996 104 50 154 1997 94 23 117 1998 144 45 189 1999 80 78 158 2000 83 40 123 2001 117 57 174 2002 140 44 184 2003 139 54 193 2004 160 39 199 2005 171 39 210 2006 273 36 309 2007 311 31 342 2008 505 23 528 2009 804 31 835 2010 1562 29 1591 2011 2239 110 2349 2012 3151 187 3338 2013 4477 337 4814 2014 5468 543 6011 2015 7328 503 7831 2016 8151 1113 9264" DF <- read.table(text = Lines, header = TRUE)
Voer nu dit uit:
# run linear regression model fit.lm <- lm(log(Total) ~ Year, DF) coef(fit.lm) ## (Intercept) Year ## -369.977814 0.187693 b <- coef(fm.lm)[[2]] b ## [1] 0.187693 # run nonlinear regresion model fit.nls <- nls(Total ~ exp(b * Year), DF, start = list(b = b), alg = "plinear") coef(fit.nls) ## b .lin ## 2.838264e-01 3.117445e-245 plot(Total ~ Year, DF) lines(fitted(fit.nls) ~ Year, DF, col = "red") a <- coef(fit.lm)[[1]] a ## [1] -369.9778 # run reparameterized nonlinear regression model fit2.nls <- nls(Total ~ exp(a + b * Year), DF, start = list(a = a, b = b)) coef(fit2.nls) ## a b ## -562.9959733 0.2838263
Opmerkingen
- Dat ‘ is correct. In de praktijk is het eerst lineariseren niet alleen gemakkelijker te implementeren omdat het ‘ slechts een kwestie van regressie is; voor gegevens als deze lijkt het redelijk in het licht van de foutenstructuur die wordt geïmpliceerd door de grafiek van log $ y $ versus jaar, met name die spreiding verschijnt ongeveer zelfs op logaritmische schaal. We hebben geen ‘ de onbewerkte gegevens om te controleren, maar in dit soort voorbeelden lijkt het onwaarschijnlijk dat linearisering problematisch of inferieur is.
- Lineaire regressie gaf de gewenste antwoord. Dat is het belangrijkste punt van de vraag.
- Ik lees de vraag helemaal niet op die manier ‘. Het OP heeft ‘ niet begrepen wat er allemaal (a) in het algemeen (b) door Excel werd gedaan. (Het is verontrustend dat het OP de thread opnieuw heeft bezocht, maar tot nu toe niet reageert op een van de langere antwoorden.)
- De discussie in de vraag aan het einde en de bijbehorende grafieken laten zien dat wat was verkregen uit de lineaire regressie was niet wat gewenst was.
- Er is ‘ een hoop die verwarrend en zelfs tegenstrijdig is in de vraag. Als de gegevens exact exponentieel waren, zou het ‘ niet uitmaken hoe het model werd aangepast. Het ‘ is mogelijk een keuze tussen een middelmatige fit die te laag schiet bij hoge waarden; een middelmatige pasvorm die meer aandacht aan hen besteedt; en een heel ander model bedenken. Het OP is de autoriteit over wat hen dwarszit, maar (zoals gezegd) heeft geen ‘ nog enig belangrijk detail opgehelderd. Desondanks roepen de antwoorden verschillende punten op die nuttig of interessant kunnen zijn voor anderen in dit gebied.
Antwoord
U gebruikt kalenderjaar als $ x $, dus het onvermijdelijke gevolg is dat $ a $ in $ y = a \ exp (bx) $ de waarde van $ y $ in jaar $ x = 0 is of was $. Afgezien van het pedante punt dat er geen jaar nul was, dat was het jaar vóór $ 1 $ AD (CE), en mentale projectie van je curve naar achteren zou moeten onderstrepen dat de aangepaste waarde in het jaar inderdaad erg klein zal zijn (zou zijn geweest!) $ 0 $ (maar nog steeds positief, aangezien de exponentiële functie dat garandeert).
U geeft niet de originele gegevens zodat we deze kunnen controleren, maar ik zie geen reden om te twijfelen aan wat u laat zien. Ik krijg $ \ exp (-369.9778) $ $ 2.09 \ maal 10 ^ {- 161 } $, inderdaad erg klein. Dus Excel is correct tot op de twee decimalen die worden weergegeven. Bovendien moet u uw resultaat weergeven in machtsnotatie.
Als dit mijn probleem was, zou ik passen in termen van zeg $ a \ exp [b (x – 2000)] $; dan heeft $ a $ de gemakkelijkere interpretatie van $ y $ wanneer $ x = 2000 $ en kan het gemakkelijker worden vergeleken met gegevens. (numerieke precisie wordt niet geschaad beide, en kan worden geholpen.)
JW Tukey voerde aan dat we “centercepts” zouden moeten passen, niet intercepts, en dit voorbeeld onderstreept het punt. Autoriteit: Roger Koenker op deze pagina van hem .
Plotten op logaritmische schaal suggereert dat het exponentieel slechts een ruwe match is, maar dat is niet “t de vraag.
Gerelateerde discussie over de keuze van de oorsprong op Heeft het zin om een datumvariabele te gebruiken in een regressie?
BEWERK Gezien de gegevens, heb ik ze in Stata gelezen.
Ik paste $ \ text {total} = a \ exp [b (\ text {year} – 2000)] $ aan door $ \ ln (\ text {total}) $ on $ \ text {year} – 2000 $.
Dat levert een lineaire vergelijking op van $ 5.40827 + 0.187693 (\ text {year} – 2000) $.
Het “centercept” voor $ 2000 $ transformeert dus terug naar $ 223 $ of zo. De datawaarde was $ 123 $. Een belangrijk detail hier is dat $ 0,187693 $ overeenkomt met je Excel-resultaat.
I paste vervolgens dezelfde vergelijking direct aan met behulp van niet-lineaire kleinste kwadraten en kreeg een centercept van $ 105,2718 $ en een coëfficiënt van $ 0,2838264 $. Dat is heel anders en niet verrassend, aangezien de niet-lineaire kleinste kwadraten geen korting geven op t De hoge waarden zoals linearisering door logaritmen doet. Uw eigen grafiek op logaritmische schaal laat zien dat de hoogste waarden in latere jaren ondervoorspeld worden door ze op een logaritmische schaal te passen. Omgekeerd leunt niet-lineaire kleinste kwadraten de andere kant op.
Zelfs als een exponentieel een zeer goede match bleek te zijn, zou ik niet proberen om het erg ver in de toekomst te extrapoleren.Met deze gegevens, waar een exponentieel het beste is, een ruwe benadering van nul, en met een meer bescheiden extrapolatie dan waarom u gevraagd heeft, is de onzekerheid ernstig:
Opmerkingen
- Bedankt voor die verwijzingen i ‘ Ik zal ze lezen. Ik ben niet zo goed met de grondbeginselen met betrekking tot de oorsprong van de vergelijkingen en hoe ze werken, dus pas ik de tools verkeerd toe. Nou, ik denk dat ‘ de reden is waarom de meeste mensen wiskunde moeilijk vinden
Antwoord
Om te beginnen raad ik je ten zeerste aan om Khan Academy-videos te zoeken over logboek- en exponentiële functies.
Je zou in orde moeten zijn door simpelweg a = e^(-369.9778)
te maken.
Reacties
- Ik begrijp niet ‘ helemaal hoe je aan die waarde bent gekomen. Isn ‘ t
log(a) = -369.9778
hetzelfde als10^(-369.9778) = a
? - Wacht, sorry je ‘ hebt gelijk ‘ s
e^(-369.9778)
. Hoewel het het gedrag van de trendlijnen en de regressievergelijking niet verklaart. Misschien ontbreekt er ‘ iets dat ik ‘ m mist - Toen je de vraag voor het eerst schreef, dacht ik dat dat een simpele wiskunde probleem. Nu begrijp ik je punt.
- Sorry voor de misleidende vraag. Toen ik de vraag voor het eerst stelde, dacht ik ook dat het mijn gebrekkige algebra was die het probleem veroorzaakte. Ik ‘ ben gewoon niet zo goed met de grondbeginselen van wiskunde. Ik moet veel gaten opvullen.