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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
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'.
|