某校高二年级共有四个班,采用四种不同的教学方法进行数学教学,为了比较这四种教学法的效果是否存在明显的差异,期末统考后,从这四个班中各抽取 5 名考生的成绩,如下所示。
班级 | 一班 | 二班 | 三班 | 四班 | |
1 | 75 | 93 | 65 | 72 | |
2 | 77 | 80 | 67 | 70 | |
3 | 70 | 85 | 77 | 71 | |
4 | 88 | 90 | 68 | 65 | |
5 | 72 | 84 | 65 | 81 | |
6 | 80 | 86 | 64 | 72 | |
7 | 79 | 85 | 62 | 68 | |
8 | 81 | 81 | 68 | 74 |
问这四种教学法的效果是否存在显著性差异(α =0.05)?
- import numpy as np
- from scipy.stats import f_oneway
-
- # Data for the four classes
- class1 = [75, 77, 70, 88, 72, 80, 79, 81]
- class2 = [93, 80, 85, 90, 84, 86, 85, 81]
- class3 = [65, 67, 77, 68, 65, 64, 62, 68]
- class4 = [72, 70, 71, 65, 81, 72, 68, 74]
-
- # Perform one-way ANOVA
- f_statistic, p_value = f_oneway(class1, class2, class3, class4)
-
- # Output the results
- print("F-statistic:", f_statistic)
- print("P-value:", p_value)
-
- # Interpret the results
- alpha = 0.05
- if p_value < alpha:
- print("There is a significant difference in the effectiveness of the teaching methods.")
- else:
- print("There is no significant difference in the effectiveness of the teaching methods.")
- F-statistic: 22.045992451864645
- P-value: 1.5622062333927252e-07
- There is a significant difference in the effectiveness of the teaching methods.
- import numpy as np
- import pandas as pd
- from scipy.stats import f_oneway, f
-
- # Data for the four classes
- class1 = [75, 77, 70, 88, 72, 80, 79, 81]
- class2 = [93, 80, 85, 90, 84, 86, 85, 81]
- class3 = [65, 67, 77, 68, 65, 64, 62, 68]
- class4 = [72, 70, 71, 65, 81, 72, 68, 74]
-
- # Perform one-way ANOVA
- f_statistic, p_value = f_oneway(class1, class2, class3, class4)
-
- # Degrees of freedom
- num_groups = 4
- num_samples = len(class1) + len(class2) + len(class3) + len(class4)
- df_between = num_groups - 1
- df_within = num_samples - num_groups
-
- # Calculate sum of squares (SS)
- mean_total = np.mean([np.mean(class1), np.mean(class2), np.mean(class3), np.mean(class4)])
- ss_total = np.sum((np.concatenate([class1, class2, class3, class4]) - mean_total) ** 2)
- ss_between = np.sum([len(class1) * (np.mean(class1) - mean_total) ** 2,
- len(class2) * (np.mean(class2) - mean_total) ** 2,
- len(class3) * (np.mean(class3) - mean_total) ** 2,
- len(class4) * (np.mean(class4) - mean_total) ** 2])
- ss_within = np.sum((class1 - np.mean(class1)) ** 2) + \
- np.sum((class2 - np.mean(class2)) ** 2) + \
- np.sum((class3 - np.mean(class3)) ** 2) + \
- np.sum((class4 - np.mean(class4)) ** 2)
-
- # Calculate mean squares (MS)
- ms_between = ss_between / df_between
- ms_within = ss_within / df_within
-
- # Calculate F-statistic
- f_statistic_manual = ms_between / ms_within
-
- # Critical F-value
- alpha = 0.05
- f_crit = f.ppf(1 - alpha, df_between, df_within)
-
- # Create a DataFrame for better tabular representation
- data = {
- 'Class 1': class1,
- 'Class 2': class2,
- 'Class 3': class3,
- 'Class 4': class4,
- }
-
- df = pd.DataFrame(data)
-
- # Output the ANOVA results
- print("Analysis of Variance (ANOVA):")
- print("F-statistic (from scipy.stats):", f_statistic)
- print("P-value (from scipy.stats):", p_value)
- print("\nManual Calculation:")
- print("SS Between:", ss_between)
- print("SS Within:", ss_within)
- print("DF Between:", df_between)
- print("DF Within:", df_within)
- print("MS Between:", ms_between)
- print("MS Within:", ms_within)
- print("F-statistic (manual calculation):", f_statistic_manual)
- print("Critical F-value:", f_crit)
-
- # Interpret the results
- if p_value < alpha:
- print("\nThere is a significant difference in the effectiveness of the teaching methods.")
- else:
- print("\nThere is no significant difference in the effectiveness of the teaching methods.")
- Manual Calculation:
- SS Between: 1538.59375
- SS Within: 651.375
- DF Between: 3
- DF Within: 28
- MS Between: 512.8645833333334
- MS Within: 23.263392857142858
- F-statistic (manual calculation): 22.045992451864645
- Critical F-value: 2.9466852660172655