我想運行lm模型並保存模型比較結果並提取p值。我想將所有信息保存在數據框中。 使用鑽石的數據集爲例:運行多個模型並將數據框中的模型比較結果保存在r中
diamonds %>%
group_by(cut) %>%
do(model1 = lm(price~carat, data=.),
model2 = lm(price~carat+depth, data=.)) %>%
mutate(anova = anova(model2,model1)) %>%
mutate(pval= anova$'Pr(>F'[2])
我得到以下錯誤信息:
Error in mutate_impl(.data, dots) :
Column `anova` must be length 1 (the group size), not 6
我的問題是:
- 爲什麼我得到的錯誤信息以及如何保存方差分析結果在數據框中?
- 如果lm或anova在某些子集上不起作用,如何使整個過程正常工作?像try..catch ..
我的真實數據是這樣更復雜。只需使用鑽石和線性模型來說明這個想法。 非常感謝。
類的對象'從類anova'繼承'data.frame'。他們有6列,因爲dfs是'list'類的對象的特例,'length(anova(m1,m2))'的值是6. –
@ Rui Barradas謝謝。那麼怎樣才能將anova結果保存在數據框中,就像其他模型結果一樣? – zesla
您可以使數據框列包含任何種類的對象,包括類data.frame的對象。但你真的需要這一切嗎?例如,你會重複'F'統計量,因爲你也保留了''Pr(> F)'[2]'(你的代碼中有一個錯字,btw)。我相信你應該將'anova'結果保存在一個列表中,而不是保存在原始數據框'diamonds'中。 –