我目前正在运行一些算法来解决多目标线性数学模型(运营研究)。我使用了三种算法:约束方法(C-M),非排序遗传算法II(NSGA-II)和强度帕累托进化算法2(SPEA2)。我已经针对帕累托边界中的解决方案数量设置了一个性能指标(No_solutions),并从六个实例(I1,..,I6)收集了数据。
我的数据如下表:
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中运行ANOVA。我的代码如下:
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统计信息。有任何想法吗?我很确定我可以使用这种方法获取更多信息
答案 0 :(得分:7)
仔细查看aov
函数的文档。它指出仅当模型中的剩余自由度非零时才显示F和p值
在您的情况下,您有18个数据点,预测变量使用了17(7 + 5 + 5)个自由度,并且模型本身需要1个自由度,这使您达到18个。这使您剩下0个残差自由度,因此不显示F值。解决方案是收集更多数据或简化模型
答案 1 :(得分:0)
您的数据是否有错误?指出了8种算法,而问题文本中只有3种。如果将所有SPEA#
更改为SPEA2
并删除交互,则可以获得F值,但是考虑到数据和组内/组间方差,它仍然是一个无意义的模型。 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