
    !g*                        d Z ddlZddlZddlmZ ddlmZ  ej                  de	fde	fde	fde	fd	e	fd
e
fde
fde
fg      Z	  ej                  d      Z eej                          ej                   e      Z edej%                  d      j'                                 ede	fde	fde	fde	fd	e	fd
e
fde
fde
ff      D  ci c]  \  } }|d   | |d   f c}} Zdj-                         ZeddeD cg c]
  }e|   d    c}f   Z ej                   e      j%                  d       Z edej'                                eeddf   Z ee      D  ci c]  \  } }|edd| f   | e|   d   g c}} Zd7dZd Zd Z eedddf         ZdgZ e D ]  Z! eee!   d         ee!   d<    dgZ"e"D ]=  Z! eejF                  ee!d      d   ee!d      d   f         edjI                  e!      <   ? ejF                  eedddf    ejJ                  ej                  d   df      f   Z&edddf   Z' ee'e&      jP                  Z) ee)jT                          ee)jV                         dZ,dZ-d Z. ee, e.e)      z          ee- e.e)      z          ed       ejF                  e ejJ                  ej                  d   df      f   Z/ ee'e/      jP                  Z0 ee0jT                          ee0jV                          ee- e.e0      z          ed       ejF                  edddf    ejJ                  ej                  d   df      f   Z1 ee'e1      jP                  Z2 ee2jT                          ee2jV                          ee- e.e2      z         d Z3dZ4ejj                  jm                  de4d f!      jo                  d"e	fd#e	fd$e	fd%e	fg      Z8ejj                  js                  e4df!      jo                  d&e
fd'e
fg      Z:ejv                  jx                  j{                  e8e:fd()      Z> ej~                  e4dfe>      Z@e8j                  j                  D ]
  ZBe8eB   e@eB<    e:j                  j                  D ]
  ZBe:eB   e@eB<    	  e3d*e@      \  ZCZA e3d+e@      \  ZCZA ej                  eAD cg c]  }eC|   	 c}      ZFeFj'                  d      d,ejj                  js                  e4!      z  z   ZG eeGeF      jP                  ZH eeHjT                          ee- e.eH      z         d- ZI ej                   eId.eA      D cg c]  }eC|   	 c}      ZFeFj'                  d      d,ejj                  js                  e4!      z  z   ZG eeGeF      jP                  ZH eeHjT                          ee- e.eH      z          ej                  ded/d(0      Z ed1ej                  j                  D cg c]  }ej"                  |   j'                         ! c}       ej"                  jo                  eJ      ZKeKj                  d2 eMej                  j                              j%                  d      ZNeeN ddf   j                  ZP eePj                          eePj                          e3d3eP      \  ZQZR ej                   eIdeR      D cg c]  }eQ|   	 c}      ZSePd   ZT eeTeS      jP                  ZU eeUjT                          ee- e.eU      z          ee- e.e)      z         d4jI                  ej                  j                  dd2       ZV e3d5eP      \  ZWZX ej                   eIdeX      D cg c]  }eW|   	 c}      ZYePd   ZZ eeZeY      jP                  Z[ ee[jT                          ee- e.e[      z         eXD ]^  Z\ ed6e\        ej                   eIe\eX      D cg c]  }eW|   	 c}      Z]ePd   Z^ ee^e]      jP                  Z_ ee- e.e_      z         ` yc c}} w c c}w c c}} w c c}w c c}w c c}w c c}w c c}w c c}w )8z convenience functions for ANOVA type analysis with OLS

Note: statistical results of ANOVA are not checked, OLS is
checked but not whether the reported results are the ones used
in ANOVA

    N)lmap)OLSbreedsexlitterpenpigagebageyzdftest3.datazrows with missing values   z	y sex ageznumber of complete observationsc                     | j                         } t        j                  |       }|r| dddf   |k(  j                  t              S | dddf   |k(  j                  t              ddddf   S )z|convert array of categories to dummy variables
    by default drops dummy variable for last category
    uses ravel, 1d onlyN)ravelnpuniqueastypeint)x	returnallgroupss      n/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/sandbox/regression/ols_anova_original.py
data2dummyr   4   sh     	
	AYYq\F!T'
f$,,S11!T'
f$,,S1!CRC%88    c                     t        j                  t        t        | j	                                     }| |dddddf   k(  j                  d      j                  j                  t              ddddf   S )zcreates product dummy variables from 2 columns of 2d array

    drops last dummy variable, but not from each category
    singular with simple dummy variable but not with constant

    quickly written, no safeguards

    Nr   )	r   r   r   tupletolistallTr   r   )r   r   s     r   data2proddummyr    ?   s^     YYtE188:./FvaQh$$R(**11#6q"u==r   c                 V    |j                   dk(  r	|dddf   }t        | d      }||z  S )zcreate dummy continuous variable

    Parameters
    ----------
    x1 : 1d array
        label or group array
    x2 : 1d array (float)
        continuous variable

    Notes
    -----
    useful for group specific slope coefficients in regression
    r   NT)r   )ndimr   )x1x2dummys      r   data2groupcontr&   N   s2     
ww!|$ZrT*E2:r   )r   r
       aW  
ANOVA statistics (model sum of squares excludes constant)
Source    DF  Sum Squares   Mean Square    F Value    Pr > F
Model     %(df_model)i        %(ess)f       %(mse_model)f   %(fvalue)f %(f_pvalue)f
Error     %(df_resid)i     %(ssr)f       %(mse_resid)f
CTotal    %(nobs)i    %(uncentered_tss)f     %(mse_total)f

R squared  %(rsquared)f
a]  
ANOVA statistics (model sum of squares includes constant)
Source    DF  Sum Squares   Mean Square    F Value    Pr > F
Model     %(df_model)i      %(ssmwithmean)f       %(mse_model)f   %(fvalue)f %(f_pvalue)f
Error     %(df_resid)i     %(ssr)f       %(mse_resid)f
CTotal    %(nobs)i    %(uncentered_tss)f     %(mse_total)f

R squared  %(rsquared)f
c                     i }|j                  | j                         g d}|D ]  }t        | |      ||<    | j                  j                  |d<   | j
                  | j                  z
  |d<   |S )zjupdate regression results dictionary with ANOVA specific statistics

    not checked for completeness
    )df_modeldf_residessssruncentered_tss	mse_model	mse_resid	mse_totalfvaluef_pvaluersquarednobsssmwithmean)update__dict__getattrmodelr5   r.   r-   )resad
anova_attrkeys       r   	anovadictr?      sp    
 
BIIcllJ  $#s#3$BvJ**SWW4B}Ir   zusing sex onlyzusing age onlyc                    i }g }| j                         D ]  }|dk(  r7t        j                  |j                  d         |d<   |j	                  d       @d|vr||   ||<   |j	                  |       ^|dd dk(  r7|j                  d      d   }t        ||         ||<   |j	                  |       |dd d	k(  r|j                  d      d   j                  d
      }t        t        j                  ||d      ||d      f         |dj                  |      <   |j	                  dj                  |             &|dd dk(  ro|j                  d      d   j                  d
      }t        ||d      ||d            |dj                  |      <   |j	                  dj                  |             t        d       ||fS )a  convert string formula to data dictionary

    ss : str
     * I : add constant
     * varname : for simple varnames data is used as is
     * F:varname : create dummy variables for factor varname
     * P:varname1*varname2 : create product dummy variables for
       varnames
     * G:varname1*varname2 : create product between factor and
       continuous variable
    data : dict or structured array
       data set, access of variables by name as in dictionaries

    Returns
    -------
    vars : dictionary
        dictionary of variables with converted dummy variables
    names : list
        list of names, product (P:) and grouped continuous
        variables (G:) have name by joining individual names
        sorted according to input

    Examples
    --------
    >>> xx, n = form2design('I a F:b P:c*d G:c*f', testdata)
    >>> xx.keys()
    ['a', 'b', 'const', 'cf', 'cd']
    >>> n
    ['const', 'a', 'b', 'cd', 'cf']

    Notes
    -----

    with sorted dict, separate name list would not be necessary
    Ir   const:Nr(   zF:r   zP:*r'   zG:zunknown expression in formula)splitr   onesshapeappendr   r    c_joinr&   
ValueError)ssdatavarsnamesitemvs         r   form2designrR      s   H DE
 >3;GGDJJqM2DMLL!_dDJLL"1X

3"A a)DGLLO"1X

3"((-A-beeD1JtAaDz4I.JKDLL$"1X

3"((-A-d1Q4j$qt*EDLL$<==)>* ;r   i        )sizeabcdefT)flattenzI a F:b P:c*dzI a F:b P:c*d G:a*e fg{Gz?c                 \    |dd }| j                         D ]  }|j                  |        |S )zwdrop names from a list of strings,
    names to drop are in space delimited list
    does not change original list
    N)rE   remove)rL   linewlirP   s       r   dropnamera     s3    
 qEE
 TLr   zae f.)missingusemaskrc   r   zI F:sex age z'I F:breed F:sex F:litter F:pen age bagez
Results dropping)F)`__doc__numpyr   numpy.lib.recfunctionsstatsmodels.compat.pythonr   #statsmodels.regression.linear_modelr   dtyper   floatdt_b
genfromtxtdtaprintrG   isnanmaskanysum	enumeraterN   rE   datavarnamesdta_usekeeprowsdta_usedvarsusedr   r    r&   sexdummyfactorskproductsrI   rJ   rF   X_b0y_b0resultsres_b0paramsr-   
anova_str0	anova_strr?   X2res2X3res3rR   r5   randomrandintviewtestdataintnormaltestdatacontlibrecfunctions	zip_descrdt2emptytestdatarO   namexxncolumn_stackXr   rest1ra   boolmreshapelendroprowsrM   
dta_use_b1xx_b1names_b1X_b1y_b1rest_b1allexogxx_b1a	names_b1aX_b1ay_b1arest_b1adropnX_b1a_y_b1a_	rest_b1a_)idxrQ   colr}   nns   00000r   <module>r      s     * 3 rxx'3%#s|eS\E5>e. / bmmN# cii rxx}  $((1+//"3 4(1GS>:?:BC:?:?:?:@%:=u3G )H Ifc1!sAaDk I   "
a,73$s)A,77
8BHHW!!!$$ ' 88A:@I,@WXfc1A3d1gaj11X	9>& hqsm$'	 0AA/HQKN0 	 VA)"%%1q0A(1Q4.QRBS0S*TUHRWWQZV 
uuXx!}gbggx~~a/@.C&DDE!}	T4	 	  fmm  fjj 
	" j9V$$ % i)F## $  UU8WRWWhnnQ/2334
4} dkk  dhh i)D/! "  UUHQqSM7277HNN1$5a#899:
4} dkk  dhh i)D/! ";z iia166S	3s)SQTIWZ[^V_7`ayytAh/44s5kC;5OPii&&\'B4&P288T!Hc"## 'D &HTN'$$ (D!$'HTN(  2	E/:	E BOOe,RV,-EE!HtBII$$4$111Aa ell  i)E"" # BOOhvu&=>RV>?EE!HtBII$$4$111Aa ell  i)E"" # bmmNDdC iSYY__=#((1+//#= >HHMM$99RCIIOO,-11!4 (1""
 j  j 
 mZ8xrHR,BCbb	CD#
dD/
!
! gnn  i)G$$ % i)F## $ ((399??3B'
(   I:V 	hr9.EFFG3ue$$ hoo  i)H%% & ,E	
&R__8E93MNRfRjNOF_FFF#++I	)i	*
*+,W	I 8
 Yr -" ? > D  G Os6   `/2`5`:8a a7$a

a=a0a
