2016-05-13 3 views
0

Mein Problem ist wie folgt:Wie führe ich eine Funktion für jede meiner Beobachtungen in R?

Ich habe einen Datensatz von 6000 Beobachtung mit Informationen von Kunden (jede Beobachtung ist eine Client-Information).

Ich optimiere eine bestimmte Funktion (in meinem Fall ist eine Profit-Funktion), um eine optimale für meine Variable von Interesse zu finden. Insbesondere suche ich nach dem optimalen Zinssatz, den ich anbieten sollte, um meine erwarteten Gewinne zu maximieren.

Ich habe keinen Zweifel über meine Funktion. Das Problem ist, dass ich nicht weiß, wie ich vorgehen sollte, um diese Funktion auf JEDE BEOBACHTUNG anzuwenden, um einen OPTIMALEN ZINSSATZ für JEDES VON MEINEN 6000 KUNDEN (oder Beobachtungen, wie Sie bevorzugen) zu erhalten.

Bis jetzt war es einfach, das EINZIGARTIGE Optimum zu finden (dasselbe für alle Klienten) für diese Variable, die meinen Profit maximieren würde (Dies ist das globale Maximum, das ich denke). Aber was ich wissen muss ist, wie ich vorgehen sollte, um mein Optimierungsproblem auf JEDE meiner 6000 Beobachtungen INDIVIDUELL anzuwenden, um den optimalen Zinssatz für jeden Kunden zu haben (das sind 6000 optimale Zinssätze, eins für jeden von ihnen).

Ich denke, ich sollte etwas ähnliches wie eine for-Schleife tun, aber meine Erfahrung in diesem Bereich ist begrenzt, und ich bin schon ziemlich frustriert. Außerdem habe ich versucht, mapply (myfunction, mydata) wie gewohnt zu verwenden, bekomme aber nur Fehlermeldungen. Diese

ist, wie mein (wirklich) jetzt einfacher Code wie folgt aussieht:

profits<- function(Rate) 
    sum((Amount*(Rate-1.2)/100)* 
     (1/(1+exp(0.600002438-0.140799335888812* 
        ((Previous.Rate - Rate)+(Competition.Rate - Rate)))))) 

und die Ergebnisse für ONE optimal für die gesamte Stichprobe:

> optimise(profits, lower = 0, upper = 100, maximum = TRUE) 
$maximum 
[1] 6.644821 

$objective 
[1] 1347291 

Also die Sache ist, wie kann ich umschreiben mein Code, um dies zu maximieren und das Optimum meiner Variable von Interesse für jede meiner Zeilen zu erhalten?

Ich hoffe, ich war klar! Vielen Dank im Voraus!

+2

Es ist immer gut, ein [reproduzierbares Beispiel] einzuschließen (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). Dies erleichtert es anderen, Ihnen zu helfen. – Jaap

+0

Sie können 'apply (dataset, 1, FUN = function (obs) ...) verwenden.} Wenn das Dataset ein Datenframe ist, dann ist das Argument obs in der Funktion ein benannter Vektor. Überprüfen Sie, ob Sie alternativ 'with()' oder 'transform()' verwenden können. – jogo

Antwort

0

Es scheint, dass jeder Ihrer Kunden unabhängig ist. So setzen Sie nur lapply() um den optimize() Anruf:

lapply(customer_list, function(one_customer){ 
optimise(profits, lower = 0, upper = 100, maximum = TRUE) 
}) 

Dies wird eine sehr große Liste zurück, wo jedes Listenelement ein $maximum und $objective hat. Sie können dann die gesamte $maximum s laufen, um herauszufinden, wie reich Sie geworden sind!

+0

Oder Sie könnten eine "for" -Schleife verwenden (die langsamer sein könnte, aber Sie könnten '<-'zuweisung verwenden, um das Maximum im Datenrahmen auf der Beobachtungszeile zu speichern und alle Daten eng verbunden zu haben. Mit 6000 Variablen es ist wahrscheinlich wenig Zeitverlust, aber ein gewisser Mehrwert, um die Ergebnisse an die Daten gebunden zu halten. – sconfluentus