我们将树的直径作为预测变量,将树的高度作为因变量。此类数据存在许多不同的方程,我们尝试对其中的一些进行建模并比较结果。
但是,我们无法弄清楚如何正确地将一个方程转换为相应的R
formula
格式。
中的trees
数据集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
首先,一个似乎运行良好的方程示例:
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
outer 中的整个术语只给出了一个系数I()
,这似乎是逻辑上的。
我们如何将第二个方程拟合到我们的数据中?