对水平数相等的试验设计,用Python可以如下作答,可是当水平数不等时,用以下方法不对,请问如何做水平数不等的情况呢?
某橡胶以弯曲次数(单位:万次)为试验指标,在配方中促进剂A选两个水平,炭黑B选两个品种,硫磺分量C选两个水平,考虑交互作用A×B、A×C、B×C与A×B×C,根据正交表L8(27)安排试验,每号试验都重复了一次,得到试验指标的观测值如下,试用Python作方差分析。
| 试验号 \ 列号 | 1(A)2(B) 3 4(C) 5 6 7 (A×B) (A×C) (B×C) (A×B×C) | 观测值 |
| 1 2 3 4 5 6 7 8 | 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 1 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 | 1.5 1.6 2.0 1.8 2.0 2.3 1.5 1.4 2.0 2.1 3.0 3.2 2.5 2.5 2.0 1.9 |
解 用Python作方差分析的程序如下:
import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
data = {'A':list([1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2]),
'B':list([1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2]),\
'C':list([1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2]),\ 'result':list([1.5,1.6,2.0,1.8,2.0,2.3,1.5,1.4,2.0,2.1,
3.0,3.2,2.5,2.5,2.0,1.9])}
data=pd.DataFrame(data)
anova_results = anova_lm(ols('result ~ A+B+C+A*B+A*C+B*C+A*B*C',data).fit())
print(anova_results)
用Python计算得到方差分析表
df sum_sq mean_sq F PR(>F)
A 1.0 1.625625 1.625625 123.857143 0.000004
B 1.0 0.075625 0.075625 5.761905 0.043150
C 1.0 0.005625 0.005625 0.428571 0.531058
A:B 1.0 0.180625 0.180625 13.761905 0.005959
A:C 1.0 0.180625 0.180625 13.761905 0.005959
B:C 1.0 1.755625 1.755625 133.761905 0.000003
A:B:C 1.0 0.075625 0.075625 5.761905 0.043150
Residual 8.0 0.105000 0.013125 NaN NaN
水平数不等的情况?
| 试验号 \ 列号 | 1(A) 2(B) 3(C) 4(D) 5(空) | 观测值 |
| 1 2 3 4 5 6 7 8 | 1 1 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 1 1 3 1 2 1 2 3 2 1 2 1 4 1 2 2 1 4 2 1 1 2 | 195 205 220 225 210 215 185 190 |