Commit d94f86b8 authored by Jamal KHAN's avatar Jamal KHAN

Submit exercise 1

parent 3a44b2aa
module2/exo1/cars.png

17.8 KB | W: | H:

module2/exo1/cars.png

17.7 KB | W: | H:

module2/exo1/cars.png
module2/exo1/cars.png
module2/exo1/cars.png
module2/exo1/cars.png
  • 2-up
  • Swipe
  • Onion skin
#+TITLE: Your title
#+AUTHOR: Your name
#+DATE: Today's date
#+TITLE: On the computation of pi
#+AUTHOR: Jamal KHAN
#+DATE: 2020-09-13
#+LANGUAGE: en
# #+PROPERTY: header-args :eval never-export
......@@ -11,97 +11,51 @@
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* Some explanations
This is an org-mode document with code examples in R. Once opened in
Emacs, this document can easily be exported to HTML, PDF, and Office
formats. For more information on org-mode, see
https://orgmode.org/guide/.
When you type the shortcut =C-c C-e h o=, this document will be
exported as HTML. All the code in it will be re-executed, and the
results will be retrieved and included into the exported document. If
you do not want to re-execute all code each time, you can delete the #
and the space before ~#+PROPERTY:~ in the header of this document.
Like we showed in the video, R code is included as follows <r tab (and is
exxecuted by typing ~C-c C-c~):
#+begin_src R :results output :exports both
print("Hello world!")
* Asking the maths library
My computer tells me that \pi is approximattively
#+begin_src R :results output :session *R* :exports both
pi
#+end_src
#+RESULTS:
: [1] "Hello world!"
And now the same but in an R session. This is the most frequent
situation, because R is really an interactive language. With a
session, R's state, i.e. the values of all the variables, remains
persistent from one code block to the next. The code is still executed
using ~C-c C-c~.
: [1] 3.141593
* Buffon;s needle
Applying the method of [[https://en.wikipedia.org/wiki/Buffon's_needle_problem][Buffon's needle]], we get the **approximation**
#+begin_src R :results output :session *R* :exports both
summary(mtcars)
set.seed(42)
N = 100000
x = runif(N)
theta = pi/2*runif(N)
2/(mean(x+sin(theta)>1))
#+end_src
#+RESULTS:
#+begin_example
mpg cyl disp hp
Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
Median :19.20 Median :6.000 Median :196.3 Median :123.0
Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
drat wt qsec vs
Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
Median :3.695 Median :3.325 Median :17.71 Median :0.0000
Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
am gear carb
Min. :0.0000 Min. :3.000 Min. :1.000
1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
Median :0.0000 Median :4.000 Median :2.000
Mean :0.4062 Mean :3.688 Mean :2.812
3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
Max. :1.0000 Max. :5.000 Max. :8.000
#+end_example
Finally, an example for graphical output:
#+begin_src R :results output graphics :file "./cars.png" :exports results :width 600 :height 400 :session *R*
:
: [1] 3.14327
* Using a surface fraction argument
A method that is easier to understand and does not make use of the sin
function is based on the fact that if $X\simU(0,1)$ and $Y\simU(0,1)$, then
$P[X^2+Y^2 \le1]=\pi/4$ (see [[https://en.wikipedia.org/wiki/Monte_Carlo_method]["Monte Carlo method" on Wikipedia]]). The
following code uses this approach:
#+begin_src R :results output graphics :file (org-babel-temp-file "figure" ".png") :exports both :width 600 :height 400 :session *R*
set.seed(42)
N = 1000
df = data.frame(X = runif(N), Y = runif(N))
df$Accept = (df$X**2 + df$Y**2 <=1)
library(ggplot2)
ggplot() +
geom_point(data=mtcars, mapping=aes(x=wt, y=mpg, color=factor(gear))) +
scale_x_continuous("Weight") +
scale_y_continuous("Milage") +
scale_color_discrete("Gear") +
theme_bw()
ggsave('./cars.png', width=5, height=2.5, units="in", dpi=120)
ggplot(df, aes(x=X, y=Y, color=Accept)) + geom_point(alpha=.2) + coord_fixed() + theme_bw()
#+end_src
#+RESULTS:
[[file:./cars.png]]
Note the parameter ~:exports results~, which indicates that the code
will not appear in the exported document. We recommend that in the
context of this MOOC, you always leave this parameter setting as
~:exports both~, because we want your analyses to be perfectly
transparent and reproducible.
Watch out: the figure generated by the code block is /not/ stored in
the org document. It's a plain file, here named ~cars.png~. You have
to commit it explicitly if you want your analysis to be legible and
understandable on GitLab.
[[file:/tmp/babel-9oTMJE/figure0FnJcH.png]]
Finally, don't forget that we provide in the resource section of this
MOOC a configuration with a few keyboard shortcuts that allow you to
quickly create code blocks in R by typing ~<r~ or ~<R~ followed by
~Tab~.
It is then straightforward to obtain a (not really good) approximation
to \pi by counting how many times, on average, $X^2+Y^2$is smaller than 1:
#+begin_src R :results output :session *R* :exports both
4*mean(df$Accept)
#+end_src
Now it's your turn! You can delete all this information and replace it
by your computational document.
#+RESULTS:
: [1] 3.156
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment