Abbiamo il diametro degli alberi come predittore e altezza dell'albero come variabile dipendente. Esistono diverse equazioni per questo tipo di dati e cerchiamo di modellarne alcuni e confrontare i risultati.Come inserire un'equazione complicata in una formula R?
Tuttavia, non riusciamo a capire come inserire correttamente un'equazione nel corrispondente formato R
formula
.
Il set di dati trees
in R
può essere utilizzato come esempio.
data(trees)
df <- trees
df$h <- df$Height * 0.3048 #transform to metric system
df$dbh <- (trees$Girth * 0.3048)/pi #transform tree girth to diameter
In primo luogo, l'esempio di un'equazione che sembra funzionare bene:.
form1 <- h ~ I(dbh^-1) + I(dbh^2)
m1 <- lm(form1, data = df)
m1
Call:
lm(formula = form1, data = df)
Coefficients:
(Intercept) I(dbh^-1) I(dbh^2)
27.1147 -5.0553 0.1124
Coefficienti a
, b
e c
sono stimati, che è quello che ci interessa
Ora l'equazione problematica:
Cercando di adattarsi in questo modo:
form2 <- h ~ I(dbh^2)/dbh + I(dbh^2) + 1.3
dà un errore:
m1 <- lm(form2, data = df)
Error in terms.formula(formula, data = data)
invalid model formula in ExtractVars
Credo che questo è dovuto al fatto /
viene interpretato come un modello nidificato e non un operatore aritmetico ?
questo non dà un errore:
form2 <- h ~ I(I(dbh^2)/dbh + I(dbh^2) + 1.3)
m1 <- lm(form2, data = df)
Ma il risultato non è quello che vogliamo:
m1
Call:
lm(formula = form2, data = df)
Coefficients:
(Intercept) I(I(dbh^2)/dbh + I(dbh^2) + 1.3)
19.3883 0.8727
un solo coefficiente è dato per l'intera durata all'interno del esterna I()
, che sembra essere logico.
Come possiamo adattare la seconda equazione ai nostri dati?
Contrassegnerò questa risposta come corretta perché a) include come stimare i valori iniziali, b) usando una normale funzione R ci consente di adattare facilmente altre funzioni non lineari e c) traccia i risultati. Grazie! – donodarazao