2014-06-19 16 views
6

Buon giorno,R: Utilizzando la formula con il logaritmo naturale in NLS

sto lottando con R e logaritmo naturale (ln). In primo luogo, non riesco a trovare una funzione ln (x) in R. Ho notato che log (x) è lo stesso di ln (x) (quando si usa ln (x) con una calcolatrice).

In R:

log(5) = 1.609438 

E con una calcolatrice:

ln(5) = 1.609438 
log(5) = 0.69897 

Sto cercando di adattare un'equazione in R (questo è esattamente come ho trovato nella letteratura di 3 referenze) :

y = a + b (x /) + c (x /) + d ln (/ x) + f ln (/ x)

È corretto utilizzare la seguente sintassi in R per usare l'equazione?

y ~ a + b*(x/305) + c*((x/305)^2) + d*log(305/x) + f*(log(305/x))^2 

L'idea è quella di utilizzare questa funzione con NLS() in R. Grazie in anticipo!

+1

'log' in R indica il logaritmo naturale. Questa è la convenzione dei matematici, poiché i logaritmi "comuni" non hanno alcun interesse matematico. L'abbreviazione "ln" è qualcosa che è stato introdotto per rendere le cose meno confuse agli studenti. –

+2

Non hai bisogno di una calcolatrice per scoprire cosa fa 'log'. Hai solo bisogno di leggere la documentazione: 'help (" log ")'. La tua formula sembra corretta. – Roland

risposta

13

In R, log è il logaritmo naturale. Nei calcolatori, log di solito indica logaritmo di base 10. Per ottenere ciò in R è possibile utilizzare la funzione log10.

log(5) 
## [1] 1.609438 
log10 
## [1] 0.69897(5) 

Per quanto riguarda la formula, sembra corretto, dal momento che log è il logaritmo naturale.

+0

Grazie per la risposta! Mi aspettavo tanto e mi serviva solo la conformazione. Grazie ancora! – wernerfeuer

4

Inoltre vi sottolineare che il modello

y ~ a + b*(x/305) + c*((x/305)^2) + d*log(305/x) + f*(log(305/x))^2 

è lineare nel senso statistico di essere lineare nei coefficienti; non ha bisogno di essere lineare in x.

Non è necessario nls per adattarsi a questo modello, è possibile utilizzare lm().

Ma ricorda di guardare la funzione I() per esprimere termini come (x/305)^2.

ETA esempio:

aDF <- data.frame(x=abs(rnorm(100)), y=rnorm(100)) 
lm(y ~ 1 + I(x/305) + I((x/305)^2) + log(305/x) + I(log(305/x)^2), data=aDF)