1 | rlab -- A JavaScript Scientific Library like R
|
2 |
|
3 | ## Introduction
|
4 |
|
5 | The rlab is a A JavaScript Scientific Library like R.
|
6 |
|
7 | It's based on `lodash.js , jStat.js and numeric.js`
|
8 |
|
9 | ## Install
|
10 |
|
11 | ```
|
12 | npm install rlab
|
13 | ```
|
14 |
|
15 | ## Use rlab
|
16 |
|
17 | file : probabilityEx.js
|
18 |
|
19 | ```javascript
|
20 | var R = require("rlab");
|
21 | var dice = R.steps(1,6);
|
22 | log("sample(1:6, 10)", R.samples(dice, 10));
|
23 | log("runif(10,0,1)=", R.runif(10, 0, 1).str());
|
24 | log("rnorm(10,5,1)=", R.rnorm(10, 5, 1).str());
|
25 | log("dnorm(5,5,1)=", R.dnorm(5, 5, 1));
|
26 | log("pnorm(5,5,1)=", R.pnorm(5, 5, 1));
|
27 | log("qnorm(0.5,5,1)=", R.qnorm(0.5, 5, 1));
|
28 | log("rbinom(10, 5, 0.5)=", R.rbinom(10,5,0.5));
|
29 | log("dbinom(4, 5, 0.5)=", R.dbinom(4,5,0.5));
|
30 | log("dbinom(5, 5, 0.5)=", R.dbinom(5,5,0.5));
|
31 | log("pbinom(4, 5, 0.5)=", R.pbinom(4,5,0.5));
|
32 | log("qbinom(0.9, 5, 0.5)=", R.qbinom(0.9,5,0.5));
|
33 |
|
34 | ```
|
35 |
|
36 | run :
|
37 |
|
38 | ```
|
39 | $ node probabilityEx.js
|
40 | sample(1:6, 10) [ 3, 5, 3, 2, 3, 3, 1, 2, 4, 3 ]
|
41 | runif(10,0,1)= [0.9119,0.5899,0.6839,0.1350,0.6894,0.9512,0.8186,0.5826,0.4279,0
|
42 | .5125]
|
43 | rnorm(10,5,1)= [5.8961,5.4312,6.0002,5.3623,5.5281,4.4413,6.2144,5.7173,5.3111,1
|
44 | .3146]
|
45 | dnorm(5,5,1)= 0.3989422804014327
|
46 | pnorm(5,5,1)= 0.5
|
47 | qnorm(0.5,5,1)= 5
|
48 | rbinom(10, 5, 0.5)= [ 2, 1, 2, 2, 4, 4, 1, 4, 3, 2 ]
|
49 | dbinom(4, 5, 0.5)= 0.15625
|
50 | dbinom(5, 5, 0.5)= 0.03125
|
51 | pbinom(4, 5, 0.5)= 0.96875
|
52 | qbinom(0.9, 5, 0.5)= 4
|
53 | ```
|
54 |
|
55 | file : statisticsEx.js
|
56 |
|
57 | ```javascript
|
58 | var R = require("rlab");
|
59 | var v = [1,3,5];
|
60 | log("v.max()=", v.max());
|
61 | log("v.min()=", v.min());
|
62 | log("v.sum()=", v.sum());
|
63 | log("v.normalize()=", v.normalize());
|
64 | log("v.normalize().sum()=", v.normalize().sum());
|
65 | log("v.product()=", v.product());
|
66 | log("v.mean()=", v.mean());
|
67 | log("v.range()=", v.range());
|
68 | log("v.median()=", v.median());
|
69 | log("v.variance()=", v.variance());
|
70 | log("v.sd()=", v.sd(), " sd^2=", v.sd()*v.sd());
|
71 | log("v.cov(v)=", v.cov(v), "v.cor(v)=", v.cor(v));
|
72 | log("factorial(5)=", R.factorial(5));
|
73 | ```
|
74 |
|
75 | run :
|
76 |
|
77 | ```
|
78 | $ node statisticsEx.js
|
79 | v.max()= 5
|
80 | v.min()= 1
|
81 | v.sum()= 9
|
82 | v.normalize()= [ 0.1111111111111111, 0.3333333333333333, 0.5555555555555556 ]
|
83 | v.normalize().sum()= 1
|
84 | v.product()= 15
|
85 | v.mean()= 1
|
86 | v.range()= 4
|
87 | v.median()= 3
|
88 | v.variance()= 2.6666666666666665
|
89 | v.sd()= 1.632993161855452 sd^2= 2.6666666666666665
|
90 | v.cov(v)= 4 v.cor(v)= 1
|
91 | factorial(5)= 120
|
92 | ```
|
93 |
|
94 | file : testEx.js
|
95 |
|
96 | ```javascript
|
97 | var R = require("rlab");
|
98 | var v = [1,3,5];
|
99 |
|
100 | var x = R.rnorm(10, 0, 0.1);
|
101 | log("x=", x.str());
|
102 | log("x.sort()=", x.sort().str());
|
103 |
|
104 | var t1=R.ttest({x:x, mu:0});
|
105 | R.report(t1);
|
106 | ```
|
107 |
|
108 | run :
|
109 |
|
110 | ```
|
111 | $ node testEx.js
|
112 | x= [-0.1405,0.0495,-0.1850,0.0824,0.0687,-0.0854,-0.1049,-0.1171,0.0947,-0.1592]
|
113 |
|
114 | x.sort()= [-0.0854,-0.1049,-0.1171,-0.1405,-0.1592,-0.1850,0.0495,0.0687,0.0824,
|
115 | 0.0947]
|
116 | =========== report ==========
|
117 | name : ttest(X)
|
118 | h : H0:mu=0
|
119 | alpha : 0.0500
|
120 | op : =
|
121 | pvalue : 0.0003
|
122 | ci : [-0.2599,-0.1101]
|
123 | df : 9.0000
|
124 | mean : -0.1850
|
125 | sd : 0.1047
|
126 | ```
|
127 |
|
128 | file : matrixEx.js
|
129 |
|
130 | ```javascript
|
131 | var M = require("rlab").M;
|
132 | var v = [1,2,3];
|
133 | log("v.sin()=", v.sin());
|
134 | log("v.norm2()=", v.norm2());
|
135 | log("v.norm2Squared()=", v.norm2Squared());
|
136 |
|
137 | var A = [[1,2,3],[4,5,6],[7,3,9]];
|
138 | var AiA = A.inv().dot(A);
|
139 | log("AiA=\n", AiA.strM());
|
140 | log("AiA.tr()=\n", AiA.tr().strM());
|
141 | log("A=\n", A.str());
|
142 | log("A.mul(0.1)=\n", A.mul(0.1).strM());
|
143 | log("A.row(1)=", A.row(1));
|
144 | log("A.col(1)=", A.col(1));
|
145 | log("A.sumM()=", A.sumM());
|
146 | log("A.rowSum()=", A.rowSum());
|
147 | log("A.colSum()=", A.colSum());
|
148 | log("A.mean(row)=", A.rowMean().str());
|
149 | log("A.mean(col)=", A.colMean().str());
|
150 |
|
151 | var D = M.diag(v);
|
152 | log("D=", D);
|
153 |
|
154 | var Eλ = M.eigR(A);
|
155 | var E = Eλ.E, λ=Eλ.lambda;
|
156 | log("E*[λ]*E-1=", E.dot(λ.diag()).dot(E.inv()).strM());
|
157 | ```
|
158 |
|
159 | run :
|
160 |
|
161 | ```
|
162 | $ node matrixEx.js
|
163 | v.sin()= [ 0.8414709848078965, 0.9092974268256817, 0.1411200080598672 ]
|
164 | v.norm2()= 3.7416573867739413
|
165 | v.norm2Squared()= 14
|
166 | AiA=
|
167 | [[ 1, 1.11e-16, -1.11e-16],
|
168 | [ 0, 1, 4.441e-16],
|
169 | [ -3.331e-16, -3.331e-16, 1]]
|
170 | AiA.tr()=
|
171 | [[ 1, 0, -3.331e-16],
|
172 | [ 1.11e-16, 1, -3.331e-16],
|
173 | [ -1.11e-16, 4.441e-16, 1]]
|
174 | A=
|
175 | [[1.0000,2.0000,3.0000],[4.0000,5.0000,6.0000],[7.0000,3.0000,9.0000]]
|
176 | A.mul(0.1)=
|
177 | [[ 0.1, 0.2, 0.3],
|
178 | [ 0.4, 0.5, 0.6],
|
179 | [ 0.7, 0.3, 0.9]]
|
180 | A.row(1)= [ 4, 5, 6 ]
|
181 | A.col(1)= [ 2, 5, 3 ]
|
182 | A.sumM()= 40
|
183 | A.rowSum(2)= [ 6, 15, 19 ]
|
184 | A.colSum(2)= [ 12, 10, 18 ]
|
185 | A.mean(row)= [2.0000,5.0000,6.3333]
|
186 | A.mean(col)= [4.0000,3.3333,6.0000]
|
187 | D= [ [ 1, 0, 0 ], [ 0, 2, 0 ], [ 0, 0, 3 ] ]
|
188 | E*[λ]*E-1= [[ 1, 2, 3],
|
189 | [ 4, 5, 6],
|
190 | [ 7, 3, 9]]
|
191 | ```
|
192 |
|
193 | file : differentialEx.js
|
194 |
|
195 | ```javascript
|
196 | var R = require("rlab");
|
197 |
|
198 | var d = R.D.d, i=R.D.i, sin=R.sin, PI = R.PI, x2=(x)=>x*x;
|
199 |
|
200 | log('d(x^2,2)=', d(x2, 2));
|
201 | log('d(sin(x/4),pi/4)=', d(sin, PI/4));
|
202 | log('i(x^2,0,1)=', i(x2,0,1));
|
203 | log('i(sin(x),0,pi/2)=', i(sin,0,PI/2));
|
204 |
|
205 | ```
|
206 |
|
207 | run :
|
208 |
|
209 | ```
|
210 | D:\Dropbox\github\rlab\example>node differentialEx.js
|
211 | d(x^2,2)= 4.000999999999699
|
212 | d(sin(x/4),pi/4)= 0.7067531099743674
|
213 | i(x^2,0,1)= 0.33283350000000095
|
214 | i(sin(x),0,pi/2)= 0.9997035898637557
|
215 | ```
|
216 |
|
217 | ## build web version
|
218 |
|
219 | ```
|
220 | $npm run-script build-web
|
221 |
|
222 | > rlab@0.5.4 build-web D:\Dropbox\github\rlab
|
223 | > browserify web/_rlab.js -o web/rlab.js
|
224 | ```
|
225 |
|
226 | ## IDE
|
227 |
|
228 | There is a webIDE for rlab , you may start it by open rlab.html
|
229 |
|
230 | ## Author
|
231 |
|
232 | Author: ccckmit
|
233 |
|
234 | Email : ccckmit@gmail.com
|
235 |
|
236 | ## License
|
237 |
|
238 | The rlab project is licensed in MIT license.
|
239 |
|
240 | Copyright (c) 2013 rlab
|
241 |
|
242 | Permission is hereby granted, free of charge, to any person obtaining a copy
|
243 | of this software and associated documentation files (the "Software"), to deal
|
244 | in the Software without restriction, including without limitation the rights
|
245 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
246 | copies of the Software, and to permit persons to whom the Software is
|
247 | furnished to do so, subject to the following conditions:
|
248 |
|
249 | The above copyright notice and this permission notice shall be included in
|
250 | all copies or substantial portions of the Software.
|
251 |
|
252 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
253 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
254 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
255 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
256 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
257 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
258 | THE SOFTWARE.
|
259 |
|
260 |
|
261 |
|