ANOVA в R: степени свободы почти все равны 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
...
и так далее.
- R rep и их 5 (1-5).
- N - уровень азота, а также есть 5 (0, 45, 90, 180, 360).
- P - уровень фосфора, и их тоже 5 (0, 35, 70, 140, 280).
- C - комбинация растений, и их 4 (GO, GB, LO, LB).
- D. Weight - это сухой вес в граммах.
Однако, когда я делаю ANOVA, я получаю неправильные степени свободы. Я обычно запускаю свои 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. Это потому, что в нем есть буквы вместо цифр?
Я где-то обнаружил, что если я пишу взаимодействие () с каждым термином, я получаю правильный 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
И это выглядит так же. Должен ли я добавлять взаимодействия () везде?
Спасибо за помощь!
1 ответ
R определяет, следует ли рассматривать переменные как категориальные (анализ типа ANOVA) или непрерывные (анализ типа регрессии), проверяя, являются ли они переменными numeric
или же factor
переменные. Проще всего, вы можете преобразовать ваши предикторные (независимые) переменные в факторы с помощью
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]])
}
Там может быть более компактный способ сделать это, но это должно служить...