如何获得 R 中方差分析的 F 统计值?

How can I get F statistic values for an ANOVA in R?

我目前正在运行使用一些算法来求解多objective 线性数学模型(运筹学)。我使用了三种算法:约束方法 (C-M)、非排序遗传算法 II (NSGA-II) 和强度帕累托进化算法 2 (SPEA2)。我已针对 Pareto Border (No_solutions) 中解决方案的数量设置了性能指标,并从六个实例 (I1,..,I6) 中收集了数据。

我的数据如下table:

   Instance Algorithm No_solutions

 1 I1       C-M                 48
 2 I2       C-M                 46
 3 I3       C-M                 51
 4 I4       C-M                 50
 5 I5       C-M                 51
 6 I6       C-M                 49
 7 I1       NSGA-II            300
 8 I2       NSGA-II            300
 9 I3       NSGA-II            300
10 I4       NSGA-II            300
11 I5       NSGA-II            300
12 I6       NSGA-II            300
13 I1       SPEA2              150
14 I2       SPEA3              150
15 I3       SPEA4              150
16 I4       SPEA5              150
17 I5       SPEA6              150
18 I6       SPEA7              150

我已经 运行 使用 aov() 在 R 中进行方差分析。我的代码如下:

performance_1 <- read_excel("C:/Users/Alonso/Desktop/metaheuristic_comparation/performance.xlsx")
View(performance_1)
attach(performance_1)
names(performance_1)
str(performance_1)

Factor_algorithm <- factor(Algorithm)
Factor_instance <- factor(Instance)
Respuesta <- performance_1$No_solutions

Modelo <-lm(Respuesta ~ (Factor_algorithm+Factor_instance)^2)
ANOVA <-aov(Modelo)
summary(ANOVA)

输出为:

 Modelo <-lm(Respuesta ~ (Factor_algorithm+Factor_instance)^2)
 ANOVA <-aov(Modelo)
 summary(ANOVA)
                                 Df Sum Sq Mean Sq
Factor_algorithm                  7 191169   27310
Factor_instance                   5      9       2
Factor_algorithm:Factor_instance  5      9       2

我已经阅读了 aov() 方法的文档,我非常确定必须显示 F 统计量。有任何想法吗?我很确定我可以使用这种方法获得更多信息

仔细查看 aov 函数的文档。它指出 F 和 p-values 仅在模型中具有 non-zero 剩余自由度时显示

在您的情况下,您有 18 个数据点,您的预测器使用了 17 (7+5+5) 个自由度,而模型本身需要 1 个,这使您达到 18 个。这给您留下了0 剩余自由度,因此 F-value 不显示。解决方案是收集更多数据或简化您的模型

你的数据有误吗?与您的问题文本中的 3 种相比,指示了 8 种算法。如果将所有 SPEA# 更改为 SPEA2 并删除交互,您可以获得 F-values,但考虑到数据和 within-/between-group 方差,它仍然是一个 non-sense 模型。 Algorithm 微不足道,而 Instance 微不足道。

pp <- read.table(text="
   Instance Algorithm No_solutions
 1 I1       C-M                 48
 2 I2       C-M                 46
 3 I3       C-M                 51
 4 I4       C-M                 50
 5 I5       C-M                 51
 6 I6       C-M                 49
 7 I1       NSGA-II            300
 8 I2       NSGA-II            300
 9 I3       NSGA-II            300
10 I4       NSGA-II            300
11 I5       NSGA-II            300
12 I6       NSGA-II            300
13 I1       SPEA2              150
14 I2       SPEA2              150
15 I3       SPEA2              150
16 I4       SPEA2              150
17 I5       SPEA2              150
18 I6       SPEA2              150")

anova(aov(No_solutions ~ Instance+Algorithm, data=pp))
# Analysis of Variance Table
# 
# Response: No_solutions
#           Df Sum Sq Mean Sq F value Pr(>F)    
# Instance   5      6       1       1 0.4651    
# Algorithm  2 191169   95585   76129 <2e-16 ***
# Residuals 10     13       1