diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/linearregression/linearregression.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/linearregression/linearregression.sty | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/linearregression/linearregression.sty b/Master/texmf-dist/tex/latex/linearregression/linearregression.sty new file mode 100644 index 00000000000..f9d86096202 --- /dev/null +++ b/Master/texmf-dist/tex/latex/linearregression/linearregression.sty @@ -0,0 +1,335 @@ +%% +%% This is file `linearregression.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% linearregression.dtx (with options: `package') +%% ------------------------------------------------------------------------ +%% [2024-06-10] +%% This file is part of the (expanded) distribution of linearregression +%% The author of linearregression is Battista Benciolini +%% <benciolinibattista at gmail dot com > +%% ------------------------------------------------------------------------ +%% The author would strongly appreciate to receive +%% any comment, criticism and just usage report +%% ------------------------------------------------------------------------ +%% This program may be used, distributed and modified under +%% the conditions of the LaTeX Project Public License. +%% (see: http://www.latex-project.org/lppl.txt) +%% ------------------------------------------------------------------------ +\ProvidesPackage{linearregression}[2024-06-10] +\RequirePackage{pict2e} +\ExplSyntaxOn +\ior_new:N \g_BBLR_file_ior +\tl_new:N \g_BBLR_file_name_tl +\int_new:N \g_BBLR_number_of_points_int +\fp_new:N \g_BBLR_abscissa_fp +\fp_new:N \g_BBLR_ordinate_fp +\fp_new:N \g_BBLR_mean_abscissa_fp +\fp_new:N \g_BBLR_mean_ordinate_fp +\fp_new:N \g_BBLR_abscissa_SecOrdMoment_fp +\fp_new:N \g_BBLR_ordinate_SecOrdMoment_fp +\fp_new:N \g_BBLR_mixed_SecOrdMoment_fp +\fp_new:N \g_BBLR_slope_A_fp +\fp_new:N \g_BBLR_slope_B_fp +\fp_new:N \g_BBLR_slope_S_fp +\fp_new:N \g_BBLR_intercept_A_fp +\fp_new:N \g_BBLR_intercept_B_fp +\fp_new:N \g_BBLR_intercept_S_fp +\fp_new:N \g_BBLR_cos_fp +\fp_new:N \g_BBLR_sin_fp +\fp_new:N \g_BBLR_sig_sin_fp +\fp_new:N \g_BBLR_eig_diff_fp +\fp_new:N \g_BBLR_diag_diff_fp +\tl_new:N \g_BBLR_file_line_tl +\fp_new:N \g_BBLR_min_abscissa_fp +\fp_new:N \g_BBLR_min_ordinate_fp +\fp_new:N \g_BBLR_max_abscissa_fp +\fp_new:N \g_BBLR_max_ordinate_fp +\fp_new:N \g_BBLR_min_draw_abscissa_fp +\fp_new:N \g_BBLR_max_draw_abscissa_fp +\bool_new:N \g_BBLR_data_eof_bool +\int_new:N \g_BBLR_record_length_int +\int_new:N \g_BBLR_rec_count_int +\int_new:N \g_BBLR_first_separator_int +\int_new:N \g_BBLR_last_separator_int +\str_const:Nn \c_BBLR_space_str {~} +\str_const:Nn \c_BBLR_comma_str {,} +\str_const:Nn \c_BBLR_plus_str {+} +\str_const:Nn \c_BBLR_minus_str {-} +\bool_new:N \g_BBLR_plot_points_bool +\bool_new:N \g_BBLR_plot_lineA_bool +\bool_new:N \g_BBLR_plot_lineB_bool +\bool_new:N \g_BBLR_plot_lineS_bool +\fp_new:N \g_BBLR_base_fp +\fp_new:N \g_BBLR_height_fp +\fp_new:N \g_BBLR_Xbase_fp +\fp_new:N \g_BBLR_Xheight_fp +\fp_new:N \g_BBLR_Dabscissa_fp +\fp_new:N \g_BBLR_Dordinate_fp +\fp_new:N \g_BBLR_diameter_fp +\fp_gset:Nn \g_BBLR_diameter_fp{0.2} +\fp_new:N \g_BBLR_line_base_length_fp +\fp_new:N \g_BBLR_scale_factor_fp +\str_new:N \c_BBLR_point_code_str +\str_new:N \g_BBLR_labelA_str +\str_new:N \g_BBLR_labelB_str +\str_new:N \g_BBLR_labelS_str +\NewDocumentCommand{\lrfilename}{m}{ +\tl_gset:Nn \g_BBLR_file_name_tl {#1} +} +\NewDocumentCommand{\lraskfilename}{}{ +\ior_get_term:nN {filename ? } \g_BBLR_file_name_tl +\tl_trim_spaces:N \g_BBLR_file_name_tl +} +\NewDocumentCommand{\lrcomputation}{}{% +\bool_gset_false:N \g_BBLR_data_eof_bool +\int_zero:N \g_BBLR_number_of_points_int +\fp_zero:N \g_BBLR_mean_abscissa_fp +\fp_zero:N \g_BBLR_mean_ordinate_fp +\ior_open:Nn \g_BBLR_file_ior \g_BBLR_file_name_tl +\bool_until_do:Nn \g_BBLR_data_eof_bool { + \ior_str_get:NN \g_BBLR_file_ior \g_BBLR_file_line_tl + \if_eof:w \g_BBLR_file_ior + \bool_gset_true:N \g_BBLR_data_eof_bool + \else: + \int_incr:N \g_BBLR_number_of_points_int + \BBLR_decode_data: + \fp_gset:Nn \g_BBLR_mean_abscissa_fp + {\g_BBLR_mean_abscissa_fp + \g_BBLR_abscissa_fp} + \fp_gset:Nn \g_BBLR_mean_ordinate_fp + {\g_BBLR_mean_ordinate_fp + \g_BBLR_ordinate_fp} + \fi: +} +\ior_close:N \g_BBLR_file_ior +\fp_gset:Nn \g_BBLR_mean_abscissa_fp +{\g_BBLR_mean_abscissa_fp / \g_BBLR_number_of_points_int} +\fp_gset:Nn \g_BBLR_mean_ordinate_fp +{\g_BBLR_mean_ordinate_fp / \g_BBLR_number_of_points_int} +\fp_zero:N \g_BBLR_abscissa_SecOrdMoment_fp +\fp_zero:N \g_BBLR_ordinate_SecOrdMoment_fp +\fp_zero:N \g_BBLR_mixed_SecOrdMoment_fp +\fp_gset_eq:NN \g_BBLR_min_abscissa_fp \g_BBLR_mean_abscissa_fp +\fp_gset_eq:NN \g_BBLR_min_ordinate_fp \g_BBLR_mean_ordinate_fp +\fp_gset_eq:NN \g_BBLR_max_abscissa_fp \g_BBLR_mean_abscissa_fp +\fp_gset_eq:NN \g_BBLR_max_ordinate_fp \g_BBLR_mean_ordinate_fp +\ior_open:Nn \g_BBLR_file_ior \g_BBLR_file_name_tl +\int_zero:N \g_BBLR_rec_count_int +\int_do_until:nn +{\g_BBLR_rec_count_int = \g_BBLR_number_of_points_int} +{ + \ior_str_get:NN \g_BBLR_file_ior \g_BBLR_file_line_tl + \int_incr:N \g_BBLR_rec_count_int + \BBLR_decode_data: + \fp_gset:Nn \g_tmpa_fp + {\g_BBLR_abscissa_fp - \g_BBLR_mean_abscissa_fp} + \fp_gset:Nn \g_tmpb_fp + {\g_BBLR_ordinate_fp - \g_BBLR_mean_ordinate_fp} + \fp_gset:Nn \g_BBLR_abscissa_SecOrdMoment_fp + {\g_BBLR_abscissa_SecOrdMoment_fp + \g_tmpa_fp * \g_tmpa_fp} + \fp_gset:Nn \g_BBLR_mixed_SecOrdMoment_fp + {\g_BBLR_mixed_SecOrdMoment_fp + \g_tmpa_fp * \g_tmpb_fp} + \fp_gset:Nn \g_BBLR_ordinate_SecOrdMoment_fp + {\g_BBLR_ordinate_SecOrdMoment_fp + \g_tmpb_fp * \g_tmpb_fp} +\fp_gset:Nn \g_BBLR_min_abscissa_fp +{min(\g_BBLR_min_abscissa_fp, \g_BBLR_abscissa_fp)} +\fp_gset:Nn \g_BBLR_min_ordinate_fp +{min(\g_BBLR_min_ordinate_fp, \g_BBLR_ordinate_fp)} +\fp_gset:Nn \g_BBLR_max_abscissa_fp +{max(\g_BBLR_max_abscissa_fp, \g_BBLR_abscissa_fp)} +\fp_gset:Nn \g_BBLR_max_ordinate_fp +{max(\g_BBLR_max_ordinate_fp, \g_BBLR_ordinate_fp)} +} +\ior_close:N \g_BBLR_file_ior +\fp_gset:Nn \g_BBLR_abscissa_SecOrdMoment_fp +{\g_BBLR_abscissa_SecOrdMoment_fp / \g_BBLR_number_of_points_int} +\fp_gset:Nn \g_BBLR_mixed_SecOrdMoment_fp +{\g_BBLR_mixed_SecOrdMoment_fp / \g_BBLR_number_of_points_int} +\fp_gset:Nn \g_BBLR_ordinate_SecOrdMoment_fp +{\g_BBLR_ordinate_SecOrdMoment_fp / \g_BBLR_number_of_points_int} +\fp_gset:Nn \g_BBLR_Dabscissa_fp +{\g_BBLR_max_abscissa_fp - \g_BBLR_min_abscissa_fp } +\fp_gset:Nn \g_BBLR_Dordinate_fp +{\g_BBLR_max_ordinate_fp - \g_BBLR_min_ordinate_fp } +\fp_gset:Nn \g_BBLR_slope_A_fp +{\g_BBLR_mixed_SecOrdMoment_fp / \g_BBLR_abscissa_SecOrdMoment_fp } +\fp_gset:Nn \g_BBLR_intercept_A_fp +{\g_BBLR_mean_ordinate_fp - \g_BBLR_slope_A_fp * \g_BBLR_mean_abscissa_fp} +\fp_gset:Nn \g_BBLR_slope_B_fp +{\g_BBLR_ordinate_SecOrdMoment_fp / \g_BBLR_mixed_SecOrdMoment_fp} +\fp_gset:Nn \g_BBLR_intercept_B_fp +{\g_BBLR_mean_ordinate_fp - \g_BBLR_slope_B_fp * \g_BBLR_mean_abscissa_fp} +\fp_gset:Nn \g_BBLR_diag_diff_fp +{\g_BBLR_abscissa_SecOrdMoment_fp - \g_BBLR_ordinate_SecOrdMoment_fp} +\fp_gset:Nn \g_BBLR_eig_diff_fp +{sqrt(\g_BBLR_diag_diff_fp * \g_BBLR_diag_diff_fp + + 4 * \g_BBLR_mixed_SecOrdMoment_fp * \g_BBLR_mixed_SecOrdMoment_fp)} +\fp_gset:Nn \g_BBLR_cos_fp% +{sqrt((1 + \g_BBLR_diag_diff_fp / \g_BBLR_eig_diff_fp) / 2)} +\fp_gset:Nn \g_BBLR_sig_sin_fp {\fp_sign:n {\g_BBLR_mixed_SecOrdMoment_fp}} +\fp_gset:Nn \g_BBLR_sin_fp +{\g_BBLR_sig_sin_fp*sqrt((1-\g_BBLR_diag_diff_fp / \g_BBLR_eig_diff_fp) / 2)} +\fp_gset:Nn \g_BBLR_slope_S_fp +{\g_BBLR_sin_fp / \g_BBLR_cos_fp } +\fp_gset:Nn \g_BBLR_intercept_S_fp +{\g_BBLR_mean_ordinate_fp - \g_BBLR_slope_S_fp * \g_BBLR_mean_abscissa_fp} +} +\NewDocumentCommand{\lrprint}{}{ +\begin{center} +\begin{tabular}{| l | r |} \hline + Data~File: & \g_BBLR_file_name_tl \\ \hline + Number~of~points: & \int_use:N\g_BBLR_number_of_points_int \\ \hline + Mean~values~of~the~coordinates: &% + $\fp_use:N \g_BBLR_mean_abscissa_fp$ \\ & + $\fp_use:N \g_BBLR_mean_ordinate_fp$ \\ \hline + Minimum~values~of~the~coordinates: &% + $\fp_use:N \g_BBLR_min_abscissa_fp$ \\ & + $\fp_use:N \g_BBLR_min_ordinate_fp$ \\ \hline + Maximum~values~of~the~coordinates: &% + $\fp_use:N \g_BBLR_max_abscissa_fp$ \\ & + $\fp_use:N \g_BBLR_max_ordinate_fp$ \\ \hline + {Second~order~moments}\phantom{xxxxxxxxx}{abscissa} &% + $\fp_use:N \g_BBLR_abscissa_SecOrdMoment_fp$ \\ + \multicolumn{1}{|r|}{mixed} & % +$\fp_use:N \g_BBLR_mixed_SecOrdMoment_fp$ ~ \\ +\multicolumn{1}{|r|}{ordinate} & % +$\fp_use:N \g_BBLR_ordinate_SecOrdMoment_fp$ \\ \hline + Slope~and~intercept~of~optimal~line & $\fp_use:N \g_BBLR_slope_A_fp$ \\ + (estimated~with~errors~in~ordinate)&$\fp_use:N \g_BBLR_intercept_A_fp$\\ \hline + Slope~and~intercept~of~optimal~line & $\fp_use:N \g_BBLR_slope_B_fp$ \\ + (estimated~with~errors~in~abscissa)&$\fp_use:N \g_BBLR_intercept_B_fp$\\ \hline + Components~of~unit~vector~along~the~line & $\fp_use:N \g_BBLR_cos_fp$ \\ + & $\fp_use:N \g_BBLR_sin_fp$ \\ + Slope~and~intercept~of~optimal~line &$\fp_use:N \g_BBLR_slope_S_fp$ \\ +(estimated~with~symmetric~regression) & + $\fp_use:N \g_BBLR_intercept_S_fp$\\ \hline +\end{tabular} +\end{center} +} +\NewDocumentCommand{\lrplot}{mmmmm}{% +\fp_gset:Nn \g_BBLR_base_fp {#1} +\fp_gset:Nn \g_BBLR_Xbase_fp {\g_BBLR_base_fp - 0.6} +\fp_gset:Nn \g_BBLR_scale_factor_fp{\g_BBLR_Xbase_fp / \g_BBLR_Dabscissa_fp} +\fp_gset:Nn \g_BBLR_Xheight_fp {\g_BBLR_Dordinate_fp * \g_BBLR_scale_factor_fp} +\fp_gset:Nn \g_BBLR_height_fp {\g_BBLR_Xheight_fp + 0.6} +\str_gset:Nn \g_BBLR_point_code_str {#2} +\str_gset:Nn \g_BBLR_labelA_str {#3} +\str_gset:Nn \g_BBLR_labelB_str {#4} +\str_gset:Nn \g_BBLR_labelS_str {#5} +\bool_gset:Nn \g_BBLR_plot_points_bool +{!(\str_if_eq_p:NN \g_BBLR_point_code_str \c_BBLR_minus_str)} +\bool_gset:Nn \g_BBLR_plot_lineA_bool +{!(\str_if_eq_p:NN \g_BBLR_labelA_str \c_BBLR_minus_str)} +\bool_gset:Nn \g_BBLR_plot_lineB_bool +{!(\str_if_eq_p:NN \g_BBLR_labelB_str \c_BBLR_minus_str)} +\bool_gset:Nn \g_BBLR_plot_lineS_bool +{!(\str_if_eq_p:NN \g_BBLR_labelS_str \c_BBLR_minus_str)} +\setlength{\unitlength}{1.0cm} +\fp_gset:Nn \g_tmpa_fp {\g_BBLR_Xbase_fp +0.2} +\fp_gset:Nn \g_tmpb_fp {\g_BBLR_Xheight_fp +0.1} +\begin{picture}(\fp_use:N\g_BBLR_base_fp,\fp_use:N\g_BBLR_height_fp)(-0.3,-0.3) +\put(-0.1,-0.1){\line(1,0){\fp_use:N\g_tmpa_fp}} +\put(-0.1,\fp_use:N\g_tmpb_fp){\line(1,0){\fp_use:N\g_tmpa_fp}} +\fp_gset:Nn \g_tmpa_fp {\g_tmpa_fp -0.1} +\fp_gset:Nn \g_tmpb_fp {\g_tmpb_fp +0.1} +\put(-0.1,-0.1){\line(0,1){\fp_use:N\g_tmpb_fp}} +\put(\fp_use:N\g_tmpa_fp,-0.1){\line(0,1){\fp_use:N\g_tmpb_fp}} +\thicklines +\bool_if:nT {\g_BBLR_plot_points_bool}{\BBLR_plot_points:} +\bool_if:nT {\g_BBLR_plot_lineA_bool}{ +\BBLR_draw_line:NNN \g_BBLR_slope_A_fp\g_BBLR_intercept_A_fp\g_BBLR_labelA_str} +\bool_if:nT {\g_BBLR_plot_lineB_bool}{ +\BBLR_draw_line:NNN \g_BBLR_slope_B_fp\g_BBLR_intercept_B_fp\g_BBLR_labelB_str} +\bool_if:nT {\g_BBLR_plot_lineS_bool}{ +\BBLR_draw_line:NNN \g_BBLR_slope_S_fp\g_BBLR_intercept_S_fp\g_BBLR_labelS_str} +\end{picture} +}% +\cs_new_protected:Nn \BBLR_decode_data: { +\tl_trim_spaces:N \g_BBLR_file_line_tl +\int_gzero:N \g_tmpa_int +\int_gzero:N \g_BBLR_first_separator_int +\int_gzero:N \g_BBLR_last_separator_int +\int_gset:Nn \g_BBLR_record_length_int { +\str_count:N \g_BBLR_file_line_tl} +\str_map_variable:NNn \g_BBLR_file_line_tl \g_tmpa_str { +\int_gincr:N \g_tmpa_int +\bool_lazy_or:nnTF +{\str_if_eq_p:NN \g_tmpa_str \c_BBLR_comma_str} +{\str_if_eq_p:NN \g_tmpa_str \c_BBLR_space_str} +{\int_gset_eq:NN \g_BBLR_last_separator_int \g_tmpa_int +\int_if_zero:nTF {\g_BBLR_first_separator_int} +{\int_gset_eq:NN \g_BBLR_first_separator_int \g_tmpa_int +}{\prg_do_nothing:} +}{\prg_do_nothing:} +} +\int_gincr:N \g_BBLR_last_separator_int +\int_gdecr:N \g_BBLR_first_separator_int +\fp_gset:Nn \g_BBLR_abscissa_fp{ +\str_range:Nnn \g_BBLR_file_line_tl{1}{\g_BBLR_first_separator_int}} +\fp_gset:Nn \g_BBLR_ordinate_fp{ +\str_range:Nnn \g_BBLR_file_line_tl +{\g_BBLR_last_separator_int}{\g_BBLR_record_length_int}} +} +\cs_new_protected:Nn \BBLR_plot_points: { +\ior_open:Nn \g_BBLR_file_ior \g_BBLR_file_name_tl +\int_zero:N \g_BBLR_rec_count_int +\int_do_until:nn +{\g_BBLR_rec_count_int = \g_BBLR_number_of_points_int} +{ + \ior_str_get:NN \g_BBLR_file_ior \g_BBLR_file_line_tl + \int_incr:N \g_BBLR_rec_count_int + \BBLR_decode_data: + \fp_gset:Nn \g_tmpa_fp{(\g_BBLR_abscissa_fp-\g_BBLR_min_abscissa_fp)* + \g_BBLR_scale_factor_fp} + \fp_gset:Nn \g_tmpb_fp{(\g_BBLR_ordinate_fp-\g_BBLR_min_ordinate_fp)* + \g_BBLR_scale_factor_fp} + \put(\fp_use:N\g_tmpa_fp, \fp_use:N\g_tmpb_fp){ + {\circle*{\fp_use:N\g_BBLR_diameter_fp}}} +} +\ior_close:N \g_BBLR_file_ior +} +\cs_new_protected:Nn \BBLR_draw_line:NNN { +\fp_gset:Nn \fp_tmpa_fp {#1 * \g_BBLR_min_abscissa_fp + #2 } +\fp_compare:nTF{\fp_tmpa_fp > \g_BBLR_max_ordinate_fp}{ +\fp_gset:Nn \g_BBLR_min_draw_abscissa_fp {(\g_BBLR_max_ordinate_fp -#2) / #1} +}{ +\fp_compare:nTF{\fp_tmpa_fp < \g_BBLR_min_ordinate_fp}{ +\fp_gset:Nn \g_BBLR_min_draw_abscissa_fp {(\g_BBLR_min_ordinate_fp - #2) / #1} +}{ +\fp_gset:Nn \g_BBLR_min_draw_abscissa_fp { \g_BBLR_min_abscissa_fp } +}} +\fp_gset:Nn \fp_tmpa_fp {#1 * \g_BBLR_max_abscissa_fp + #2 } +\fp_compare:nTF{\fp_tmpa_fp > \g_BBLR_max_ordinate_fp}{ +\fp_gset:Nn \g_BBLR_max_draw_abscissa_fp {(\g_BBLR_max_ordinate_fp -#2) / #1} +}{ +\fp_compare:nTF{\fp_tmpa_fp < \g_BBLR_min_ordinate_fp}{ +\fp_gset:Nn \g_BBLR_max_draw_abscissa_fp { (\g_BBLR_min_ordinate_fp - #2) / #1} +}{ +\fp_gset:Nn \g_BBLR_max_draw_abscissa_fp { \g_BBLR_max_abscissa_fp } +}} +\fp_gset:Nn \fp_tmpa_fp {(\g_BBLR_min_draw_abscissa_fp - +\g_BBLR_min_abscissa_fp)* \g_BBLR_scale_factor_fp} +\fp_gset:Nn \fp_tmpb_fp {(#1 * \g_BBLR_min_draw_abscissa_fp + #2 - +\g_BBLR_min_ordinate_fp)* \g_BBLR_scale_factor_fp} +\fp_gset:Nn \fp_BBLR_line_base_length_fp{(\g_BBLR_max_draw_abscissa_fp - +\g_BBLR_min_draw_abscissa_fp) * \g_BBLR_scale_factor_fp} +\put(\fp_use:N\fp_tmpa_fp, \fp_use:N\fp_tmpb_fp){ +\line(1.,\fp_use:N #1){\fp_use:N\fp_BBLR_line_base_length_fp}} +\bool_if:nF {\str_if_eq_p:NN #3 \c_BBLR_plus_str}{ +\fp_gset:Nn \fp_tmpa_fp +{0.08 * \g_BBLR_min_draw_abscissa_fp + 0.92 * \g_BBLR_max_draw_abscissa_fp} +\fp_gset:Nn \fp_tmpb_fp {#1 * \fp_tmpa_fp + #2 } +\fp_gset:Nn \fp_tmpa_fp +{(\fp_tmpa_fp-\g_BBLR_min_abscissa_fp)*\g_BBLR_scale_factor_fp ++ 0.3 * #1 /sqrt(1.+#1*#1)} +\fp_gset:Nn \fp_tmpb_fp +{(\fp_tmpb_fp-\g_BBLR_min_ordinate_fp)* \g_BBLR_scale_factor_fp +- 0.3 /sqrt(1.+#1*#1)} +\put(\fp_use:N\fp_tmpa_fp, \fp_use:N\fp_tmpb_fp){#3} +} +} +\ExplSyntaxOff +\endinput +%% +%% End of file `linearregression.sty'. |