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]])
}

Там может быть более компактный способ сделать это, но это должно служить...

Другие вопросы по тегам