Mamy średnicę drzew jako predyktor i wysokość drzewa jako zmienną zależną. Istnieje wiele różnych równań dla tego rodzaju danych i staramy się modelować niektóre z nich i porównywać wyniki.Jak umieścić skomplikowane równanie w formule R?
Jednak nie możemy dowiedzieć się, jak poprawnie umieścić jedno równanie w odpowiednim formacie R
formula
.
Jako przykład można użyć zestawu danych trees
w R
.
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
pierwsze, przykładem równania, które wydaje się działać dobrze.
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
Współczynniki a
, b
i c
szacuje, czyli to, co nas interesuje
Teraz problematyczne równanie:
Próbując dopasować go tak:
form2 <- h ~ I(dbh^2)/dbh + I(dbh^2) + 1.3
daje błąd:
m1 <- lm(form2, data = df)
Error in terms.formula(formula, data = data)
invalid model formula in ExtractVars
to chyba dlatego /
jest interpretowany jako zagnieżdżonego modelu, a nie operator arytmetyczny ?
To nie daje błąd:
form2 <- h ~ I(I(dbh^2)/dbh + I(dbh^2) + 1.3)
m1 <- lm(form2, data = df)
Ale wynik nie jest jeden chcemy:
m1
Call:
lm(formula = form2, data = df)
Coefficients:
(Intercept) I(I(dbh^2)/dbh + I(dbh^2) + 1.3)
19.3883 0.8727
Tylko jeden współczynnik jest podawany dla całego wyrażenia wewnątrz zewnętrznej I()
, co wydaje się być logiczne.
Jak możemy dopasować drugie równanie do naszych danych?
Zaznaczę tę odpowiedź jako poprawną, ponieważ a) obejmuje ona oszacowanie wartości początkowych, b) użycie zwykłej funkcji R pozwala nam bardzo łatwo dopasować inną funkcję nieliniową i c) wyświetla wyniki. Dzięki! – donodarazao