[英]In R can you manually set degrees of freedom for lm() or Anova()?
[英]ANOVA in R: Degrees of freedom almost all equal 1
這是我的榮譽論文! 我的顧問不知道如何使用R,我不知道如何使用其他任何東西,所以我在這里。
我有一個數據集,開頭像這樣:
> d.weight
R N P C D.weight
1 1 0 0 GO 45.3
2 2 0 0 GO 34.0
3 3 0 0 GO 19.1
4 4 0 0 GO 26.6
5 5 0 0 GO 23.5
6 1 45 0 GO 22.1
7 2 45 0 GO 15.5
8 3 45 0 GO 23.4
9 4 45 0 GO 15.8
10 5 45 0 GO 42.9
...
等等。
但是,當我進行方差分析時,我得到了錯誤的自由度。 我通常在那組完整數據的子集上運行我的ANOVA,但是我只是做一個我實際上不會做的分析,只是這樣你就可以看到幾乎所有的Df都是錯誤的。
> example.aov=aov(D.weight ~ R+N+P+C, data=d.weight)
> summary(example.aov)
Df Sum Sq Mean Sq F value Pr(>F)
R 1 1158 1158 9.484 0.00226 **
N 1 202 202 1.657 0.19900
P 1 11040 11040 90.408 < 2e-16 ***
C 3 41032 13677 112.010 < 2e-16 ***
Residuals 313 38220 122
所以,基本上,唯一正確的是C因子。 是因為它有字母而不是數字嗎?
我找到了某個地方,如果我用每個術語寫下interaction(),我會得到正確的Df,但我不知道這是否是正確的做法。 例如:
> example.aov2=aov(D.weight ~ interaction(R)+interaction(N)+interaction(P)+interaction(C), data=d.weight)
> summary(example.aov2)
Df Sum Sq Mean Sq F value Pr(>F)
interaction(R) 4 7423 1856 19.544 2.51e-14 ***
interaction(N) 4 543 136 1.429 0.224
interaction(P) 4 13788 3447 36.301 < 2e-16 ***
interaction(C) 3 41032 13677 144.042 < 2e-16 ***
Residuals 304 28866 95
我用C因子嘗試了它只是為了看它是否搞砸了什么:
> example.aov3=aov(D.weight ~ C, data=d.weight)
> summary(example.aov3)
Df Sum Sq Mean Sq F value Pr(>F)
C 3 41032 13677 85.38 <2e-16 ***
Residuals 316 50620 160
>
> example.aov4=aov(D.weight ~ interaction(C), data=d.weight)
> summary(example.aov4)
Df Sum Sq Mean Sq F value Pr(>F)
interaction(C) 3 41032 13677 85.38 <2e-16 ***
Residuals 316 50620 160
它看起來一樣。 我應該在任何地方添加交互()嗎?
謝謝您的幫助!
R通過檢查變量是numeric
還是factor
變量來確定是將變量視為分類(ANOVA類型分析)還是連續(回歸類型分析)。 最簡單的說,您可以將預測變量(獨立)變量轉換為因子
facs <- c("R","N","P")
d_weight[facs] <- lapply(d.weight[facs],factor)
如果你想創建輔助變量而不是覆蓋你可以做類似的事情
for (varname in facs) {
d_weight[[paste0("f",varname)]] <- factor(d_weight[[varname]])
}
可能有一種更緊湊的方式來做到這一點,但應該服務......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.