Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

# Copyright 2017-2020 Spotify AB 

# 

# Licensed under the Apache License, Version 2.0 (the "License"); 

# you may not use this file except in compliance with the License. 

# You may obtain a copy of the License at 

# 

# http://www.apache.org/licenses/LICENSE-2.0 

# 

# Unless required by applicable law or agreed to in writing, software 

# distributed under the License is distributed on an "AS IS" BASIS, 

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

# See the License for the specific language governing permissions and 

# limitations under the License. 

 

from typing import (Union, Iterable, Tuple) 

 

from pandas import DataFrame 

 

from .statsmodels_computer import ChiSquaredComputer 

from ..abstract_base_classes.confidence_computer_abc import \ 

ConfidenceComputerABC 

from ..abstract_base_classes.confidence_grapher_abc import ConfidenceGrapherABC 

from .generic_test import GenericTest 

from ..confidence_utils import listify 

from ..constants import BONFERRONI, NIM_TYPE 

 

 

class ChiSquared(GenericTest): 

 

def __init__(self, 

data_frame: DataFrame, 

numerator_column: str, 

denominator_column: str, 

categorical_group_columns: Union[str, Iterable], 

ordinal_group_column: Union[str, None] = None, 

interval_size: float = 0.95, 

correction_method: str = BONFERRONI, 

confidence_computer: ConfidenceComputerABC = None, 

confidence_grapher: ConfidenceGrapherABC = None): 

 

computer = ChiSquaredComputer( 

data_frame=data_frame, 

numerator_column=numerator_column, 

numerator_sum_squares_column=numerator_column, 

denominator_column=denominator_column, 

categorical_group_columns=listify(categorical_group_columns), 

ordinal_group_column=ordinal_group_column, 

interval_size=interval_size, 

correction_method=correction_method.lower()) 

 

super(ChiSquared, self).__init__( 

data_frame, 

numerator_column, 

numerator_column, 

denominator_column, 

categorical_group_columns, 

ordinal_group_column, 

interval_size, 

correction_method, 

computer, 

confidence_grapher) 

 

def difference(self, 

level_1: Union[str, Tuple], 

level_2: Union[str, Tuple], 

absolute: bool = True, 

groupby: Union[str, Iterable] = None, 

non_inferiority_margins: NIM_TYPE = None, 

final_expected_sample_size: float = None 

) -> DataFrame: 

if non_inferiority_margins is not None: 

raise ValueError('Non-inferiority margins not supported in ' 

'ChiSquared. Use StudentsTTest or ZTest instead.') 

return super(ChiSquared, self).difference( 

level_1, 

level_2, 

absolute, 

groupby, 

None, 

final_expected_sample_size) 

 

def multiple_difference(self, level: Union[str, Tuple], 

absolute: bool = True, 

groupby: Union[str, Iterable] = None, 

level_as_reference: bool = None, 

non_inferiority_margins: NIM_TYPE = None, 

final_expected_sample_size: float = None 

) -> DataFrame: 

if non_inferiority_margins is not None: 

raise ValueError('Non-inferiority margins not supported in ' 

'ChiSquared. Use StudentsTTest or ZTest instead.') 

return super(ChiSquared, self).multiple_difference( 

level, 

absolute, 

groupby, 

level_as_reference, 

None, 

final_expected_sample_size)