forked from statsmodels/statsmodels
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_formula_glm.py
32 lines (22 loc) · 1.05 KB
/
example_formula_glm.py
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
"""GLM Formula Example
"""
import statsmodels.api as sm
star98 = sm.datasets.star98.load_pandas().data
formula = ('SUCCESS ~ LOWINC + PERASIAN + PERBLACK + PERHISP + PCTCHRT '
'+ PCTYRRND + PERMINTE*AVYRSEXP*AVSALK + PERSPENK*PTRATIO*PCTAF')
dta = star98[['NABOVE', 'NBELOW', 'LOWINC', 'PERASIAN', 'PERBLACK', 'PERHISP',
'PCTCHRT', 'PCTYRRND', 'PERMINTE', 'AVYRSEXP', 'AVSALK',
'PERSPENK', 'PTRATIO', 'PCTAF']]
endog = dta['NABOVE'] / (dta['NABOVE'] + dta.pop('NBELOW'))
del dta['NABOVE']
dta['SUCCESS'] = endog
mod = sm.GLM.from_formula(formula=formula, data=dta,
family=sm.families.Binomial()).fit()
# try passing a formula object, using arbitrary user-injected code
def double_it(x):
return 2 * x
formula = ('SUCCESS ~ double_it(LOWINC) + PERASIAN + PERBLACK + PERHISP + '
'PCTCHRT + PCTYRRND + PERMINTE*AVYRSEXP*AVSALK'
'+ PERSPENK*PTRATIO*PCTAF')
mod2 = sm.GLM.from_formula(formula=formula, data=dta,
family=sm.families.Binomial()).fit()