a
    ?e                     @   s~   d dl Zd dlmZ d dlZd dlmZ d dl	m
Z
 dd Zdd Zdd
dZdd Zdd Zdd ZdddZdddZdS )    N)r2_score)	curve_fitc                 C   s   |dt | | |    S )N   )npexp)xLkx0 r   (/var/www/html/logistic_data_generator.pylogistic_function   s    r   c                 C   s$   t ddd}t|| ||}||fS )N
      r   linspacer   )r   r	   r
   r   	y_perfectr   r   r   generate_target_logistic   s    r   normalr   c                 C   s   t |}t||d  }tt jj||dd}	t|D ]}
|dkrTt jd|}n:|dkrnt j| |}n |dkrt j	d|}nt
d|
|	v r||9 }|d u st||kr<|||
< q8q<q8| | }|S )	Nd   F)replacer   r   uniformlaplacez=Invalid noise type. Choose 'normal', 'uniform', or 'laplace'.)r   zerosintsetrandomchoiceranger   r   r   
ValueErrorabs)r   std_devn
noise_typeoutlier_percentageoutlier_multiplierrejection_thresholdnoisenum_outliersoutlier_indicesinoise_sampley_noisyr   r   r   generate_noisy_data   s$    
r.   c              
   C   s   t |dt| g}zHtt| ||d\}}|\}}}t| g|R  }t||}	|||||	fW S  ty }
 ztd|
  W Y d }
~
dS d }
~
0 0 d S )Nr   )p0z(An error occurred during curve fitting: ))NNNNN)maxr   medianr   r   r   RuntimeErrorprint)r   r-   Zp0_initial_guesspoptpcova_fittedb_fittedZc_fittedy_pred	r_squareder   r   r   fit_noisy_logistic_data/   s    

r;   c                 C   s0   t | | }| d d | }|d d | }||fS )N)len)r   r-   r#   stepx_subsety_subsetr   r   r   subset_noisy_dataC   s    r@   c                 C   s0   | \}}}}t dd|}t||||}||fS )Nr   r   r   )final_coeffsr#   r   r	   r
   _x_refy_refr   r   r    generate_logistic_reference_lineI   s    rE   ffffff?c                 C   s   d| }t |}t |}td|| }tjjd|d  |}	|| }
tt|
| }t	t
| | t| gj}|tj|j|  }|||j  }tt|}||	|  }||	|  }||fS )Nr   r      )r<   r0   scipystatstppfr   sumsquarevstack	ones_likeTlinalgpinvsqrtdiag)r   yr8   r4   
confidencealphar#   pdoft_stat	residualsmseZx_matrixjacobianZpred_covZpred_stdci_lowerci_upperr   r   r   'calculate_confidence_intervals_logisticP   s    r`   c	              
   C   s   t | ||\}	}
t|
|t|	||||}t|	||\}}t||\}}}}}t||||||f\}}t||||f|\}}t|dt|dt|dt|df}|	 |
 | | | | | | |d	}t	| ||fS )N   )		x_perfectr   x_noisyr-   x_referencey_referencer^   r_   r9   )
r   r.   r<   r@   r;   r`   rE   roundtolistr3   )r   r	   r
   r"   r#   r$   r%   r&   	thresholdrb   r   r-   x_noisy_subsety_noisy_subsetZL_noisyZk_noisyZx0_noisyr8   r9   r^   r_   rd   re   coeffsdatar   r   r   logistic_fit_and_store_resultsk   s&    $rm   )r   r   r   N)rF   )r   r   N)numpyr   matplotlib.pyplotpyplotpltscipy.statsrH   sklearn.metricsr   scipy.optimizer   r   r   r.   r;   r@   rE   r`   rm   r   r   r   r   <module>   s   

