我对线性模型的特定效果(或参数)感兴趣。例如,以虹膜数据集,我将感兴趣:
Sepal.Width
如何调节多色和弗吉尼亚州的效果(与参考水平 setosa 相比)。Sepal.Width
的三个级别中,Sepal.Length
和species
之间的线性关系。我发现做到这一点的唯一方法是适合两个模型,一个模型具有交互性,另一个模型具有嵌套的交互性:
fit <- lm(Sepal.Length ~ Species * Sepal.Width, data=iris)
summary(fit) # The two last lines
fit <- lm(Sepal.Length ~ Species / Sepal.Width, data=iris)
summary(fit) # The three last lines
尽管如此,拟合两次 same 模型似乎效率相对较低(尤其是在拟合需要花费较长时间计算的模型时)。
有没有办法从单个模型中获得第一个模型的最后两行和第二个模型的最后三行的等效项?谢谢
答案 0 :(得分:2)
如果您对摘要中的系数估计感兴趣,则可以从一个模型中获得第一个模型的最后两行和第二个模型的最后三行的等效项通过添加。让我解释一下。
实际上,两个摘要都以不同的方式为您提供了相同的信息。对于第一个摘要,这是我的输出:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.6390 0.5715 4.618 8.53e-06 ***
Speciesversicolor 0.9007 0.7988 1.128 0.261
Speciesvirginica 1.2678 0.8162 1.553 0.123
Sepal.Width 0.6905 0.1657 4.166 5.31e-05 ***
Speciesversicolor:Sepal.Width 0.1746 0.2599 0.672 0.503
Speciesvirginica:Sepal.Width 0.2110 0.2558 0.825 0.411
这是从模型中删除 setosa 时的拟合结果。这在R中会自动发生,因为当您将因子传递给线性模型时,您仅需要n-1
个部分来描述它,因为基本级部分(在这种情况下为 setosa )与其他两个因素共线。
在第二篇摘要中,这就是我所看到的。
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.6390 0.5715 4.618 8.53e-06 ***
Speciesversicolor 0.9007 0.7988 1.128 0.261
Speciesvirginica 1.2678 0.8162 1.553 0.123
Speciessetosa:Sepal.Width 0.6905 0.1657 4.166 5.31e-05 ***
Speciesversicolor:Sepal.Width 0.8651 0.2002 4.321 2.88e-05 ***
Speciesvirginica:Sepal.Width 0.9015 0.1948 4.628 8.16e-06 ***
在此模型中,尽管完全共线,但基本级别的 setosa 被保留在模型中。通常,如果要在模型中保留一个完全共线的变量,R会返回错误,因为它会抱怨无法求矩阵求最佳公式的最佳拟合(这是因为矩阵不是完整排名)。
但是R可以很好地使用该模型,因为它成功地返回了它。这意味着矩阵是可逆的,因为尽管在交互项中具有因子的所有三个级别,但它仍然是一个完整的矩阵。利用这些知识,我认为第二个模型中任何“缺失”的信息都被烘焙到第一个模型中。
这正是我所看到的。看下面的方程式,方程式左侧的模型1的系数,方程式右侧的2的系数。
Sepal.Width = Speciessetosa:Sepal.Width
Sepal.Width + Speciesversicolo:Sepal.Width = Speciesversicolor:Sepal.Width
Sepal.Width + Speciesvirginica:Sepal.Width = Speciesvirginica:Sepal.Width
因此,要从第一个模型的最后两行和第二个模型的最后三行获取系数估计,只需简单地提取第一个模型的摘要,然后执行我在上面编写的三个方程式获得了存储在最后三行中的“额外”信息。