我们以树的直径为自变量,以树高为因变量。这类数据有多种不同的方程式可用于建模和比较结果。但是,我们无法确定如何将其中一种方程正确地放入相应的R公式格式中。可以使用R中的“trees”数据集作为示例。
系数
现在来看一下问题所在的方程式:
我猜这是因为
这不会产生错误:
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
首先,这是一个看起来运作良好的方程示例:
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
系数
a
、b
和c
是我们感兴趣的估计值。现在来看一下问题所在的方程式:
form2 <- h ~ I(dbh ^ 2) / dbh + I(dbh ^ 2) + 1.3
出现错误:
m1 <- lm(form2, data = df)
Error in terms.formula(formula, data = data)
invalid model formula in ExtractVars
我猜这是因为
/
被解释为嵌套模型而不是算术运算符?这不会产生错误:
form2 <- h ~ I(I(dbh ^ 2) / dbh + I(dbh ^ 2) + 1.3)
m1 <- lm(form2, data = df)
但结果并非我们想要的:
m1
Call:
lm(formula = form2, data = df)
Coefficients:
(Intercept) I(I(dbh^2)/dbh + I(dbh^2) + 1.3)
19.3883 0.8727
在外部的I()
中,只给出了整个项的一个系数,这似乎是合理的。
我们如何将第二个方程拟合到我们的数据中?