J'essaie d'écrire une fonction pour automatiser une analyse de variance, dont une partie implique d'effectuer d'autres calculs. La méthode que j'ai utilisée n'est pas très robuste, si les noms de variables changent, alors cela cesse de fonctionner.Meilleure façon d'extraire des valeurs quadratiques moyennes à partir d'un objet aov dans
Pour ces données fictives
> dput(assayvar,"")
structure(list(Run = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L, 4L, 4L, 4L), .rk.invalid.fields = list(), .Label = c("1",
"2", "3", "4"), class = "factor"), Actual = c(246.3, 253.6, 247.6,
249, 249, 251.3, 254.9, 254.1, 253.2, 250, 248.9, 250.3)), .Names = c("Run",
"Actual"), row.names = c(NA, 12L), class = "data.frame")
> assayaov<-aov(Actual~Run+Error(Run),data=assayvar)
> str(summary(assayaov))
List of 2
$ Error: Run :List of 1
..$ :Classes ‘anova’ and 'data.frame': 1 obs. of 3 variables:
.. ..$ Df : num 3
.. ..$ Sum Sq : num 46.5
.. ..$ Mean Sq: num 15.5
..- attr(*, "class")= chr [1:2] "summary.aov" "listof"
$ Error: Within:List of 1
..$ :Classes ‘anova’ and 'data.frame': 1 obs. of 5 variables:
.. ..$ Df : num 8
.. ..$ Sum Sq : num 36.4
.. ..$ Mean Sq: num 4.55
.. ..$ F value: num NA
.. ..$ Pr(>F) : num NA
..- attr(*, "class")= chr [1:2] "summary.aov" "listof"
- attr(*, "class")= chr "summary.aovlist"
Mais pour ces données fictives
> dput(BGBottles,"")
structure(list(Machine = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L, 4L, 4L, 4L), .rk.invalid.fields = structure(list(), .Names = character(0)), .Label = c("1",
"2", "3", "4"), class = "factor"), Weight = c(14.23, 14.96, 14.85,
16.46, 16.74, 15.94, 14.98, 14.88, 14.87, 15.94, 16.07, 14.91
)), .Names = c("Machine", "Weight"), row.names = c(NA, 12L), class = "data.frame")
> bgaov<-aov(Weight~Machine+Error(Machine),data=BGBottles)
> str(summary(bgaov))
List of 2
$ Error: Machine:List of 1
..$ :Classes ‘anova’ and 'data.frame': 1 obs. of 3 variables:
.. ..$ Df : num 3
.. ..$ Sum Sq : num 5.33
.. ..$ Mean Sq: num 1.78
..- attr(*, "class")= chr [1:2] "summary.aov" "listof"
$ Error: Within :List of 1
..$ :Classes ‘anova’ and 'data.frame': 1 obs. of 5 variables:
.. ..$ Df : num 8
.. ..$ Sum Sq : num 1.45
.. ..$ Mean Sq: num 0.182
.. ..$ F value: num NA
.. ..$ Pr(>F) : num NA
..- attr(*, "class")= chr [1:2] "summary.aov" "listof"
- attr(*, "class")= chr "summary.aovlist"
Ainsi, le code pour obtenir la valeur quadratique moyenne
machine<-summary(bgaov)$"Error: Machine"[[1]]$"Mean Sq"
ne fonctionne pas, parce que la Machine mais ne sera pas toujours Machine.
Une meilleure façon de le faire?
J'utilise str (...) pour afficher tous les objets et leur ordre dans l'objet ANOVA – PaulHurleyuk