-
Notifications
You must be signed in to change notification settings - Fork 0
/
search.json
240 lines (240 loc) · 55 KB
/
search.json
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
[
{
"objectID": "index.html",
"href": "index.html",
"title": "Fendi Tsim",
"section": "",
"text": "Welcome to my personal website!\nMy name is Fendi, and I am a Doctoral Researcher at Warwick Business School, University of Warwick. I work in the field of behavioural and economic science.\nDuring my spare time I like to spend time with my family and friends, going outdoors, watching movies and anime (big fan!), taking pictures, going to gym and reading books (currently aiming to read 52 books this year - I read 68 books last year!)"
},
{
"objectID": "projects/creating-a-personal-website-with-quarto/index.html",
"href": "projects/creating-a-personal-website-with-quarto/index.html",
"title": "Creating a personal website with Quarto",
"section": "",
"text": "Having a personal website is ubiquitous and essential these days for professional use. In this project, I am going to share my experience with, creating a personal website with Quarto and R.\nThis project is suitable for beginners who have a little, no prior experience. A few criteria must be met for a beginner to create a personal website:"
},
{
"objectID": "projects/creating-a-personal-website-with-quarto/index.html#render-on-save",
"href": "projects/creating-a-personal-website-with-quarto/index.html#render-on-save",
"title": "Creating a personal website with Quarto",
"section": "Render on Save",
"text": "Render on Save\nOn your index.qmd document tab, there is a checkbox called ‘Render on Save’ - tick it and the website will be rendered whenever you save your current progress!"
},
{
"objectID": "projects/creating-a-personal-website-with-quarto/index.html#install-quarto-on-your-device",
"href": "projects/creating-a-personal-website-with-quarto/index.html#install-quarto-on-your-device",
"title": "Creating a personal website with Quarto",
"section": "Install Quarto on your device",
"text": "Install Quarto on your device\nThis simplifies our experience when we try to render, preview and publish our website. If we want to render our current progress, we can run the following command in terminal (next to Console tab in RStudio):\nquarto render\nOnce our website is rendered, we can preview it with our default browser by running the command in terminal:\nquarto preview\nApart from rendering and previewing our website, we can publish it via Terminal (see below)!"
},
{
"objectID": "projects/creating-a-personal-website-with-quarto/index.html#creating-multiple-pages",
"href": "projects/creating-a-personal-website-with-quarto/index.html#creating-multiple-pages",
"title": "Creating a personal website with Quarto",
"section": "Creating multiple pages",
"text": "Creating multiple pages\nOf course, we would like to have multiple pages for showcasing different contents, rather than a single page about ourselves in our website! Creating another page within our website by simply adding another quarto document is basic. Yet, this creates a problem in the website address. For example, we create an About page with a quarto document about.qmd. After we click that page in our website, the website address ends with ‘about.html’.\nI was inspired by this lovely website built with Quarto for resolving this issue, we can create a folder called ‘About’, and rename that quarto document from about.qmd to index.qmd (Remember to update the relevant href link inside _quarto.yml, such as about/index.qmd!). The new website address ends with /about/ - looks prettier and more advanced!"
},
{
"objectID": "projects/creating-a-personal-website-with-quarto/index.html#uploading-your-site-on-github",
"href": "projects/creating-a-personal-website-with-quarto/index.html#uploading-your-site-on-github",
"title": "Creating a personal website with Quarto",
"section": "Uploading your site on Github",
"text": "Uploading your site on Github\nAfter creating a personal website with Quarto, we need a server, or a place to deploy it! First, we open Terminal tab inside RStudio. We run the following command to check if RStudio connects to our Github repository properly:\ngit remote show origin\nIf the link shown does not match with our Github repository’s, we can remove it with the following command:\ngit remote remove origin\nThen we add our Github repository’s link, and run the previous command again for a second check.\nFor uploading the website, I’d recommend taking the quarto publish approach. Follow steps on this site if you have not created a gh-pages branch in your Github repository.\nYou might want to update your personal website with new content occasionally. First, make sure you are going to make changes of your website in main branch (it should be the name of your default branch) by running the following command in Terminal:\ngit checkout main\nUpload all your recent changes of your website in R.proj into your github repository (main branch). This ensures your Github repository is up-to-date, and thus you can pick it up with another machine if needed.\nNext, in the Terminal tab (which is next to Console tab), type the following command to update your website:\nquarto publish gh-pages\nR then asks if you’d like to update your personal website, and type ‘Y’. It then automatically ‘publish’ the latest version of your page.\nIt’s alright if you ignore the first step and do the second step only. However, only ‘gh-pages’ branch is then up-to-date (with an automatic committed message like ‘Built site for gh-pages’) - it would be better to make sure your main branch is also up-to-date, too!"
},
{
"objectID": "projects/building-a-table-of-multiple-linear-regression-models-with-stargazer/index.html",
"href": "projects/building-a-table-of-multiple-linear-regression-models-with-stargazer/index.html",
"title": "Building A Table of Multiple Linear Regression Models with Stargazer",
"section": "",
"text": "In this post, I present a method to combine results of multiple linear regression models in a latex regression table with stargazer (R package).\nThe aim is to simplify regressions generation processes with a user-defined set of Independent Variables (IVs) for each regression model, and show all results in a regression table with stargazer. This is very helpful when adding (or removing) new IVs in current regression model gradually.\n\n\n\n\n\n\n\n\nrequire(stargazer) # Load stargazer \n\nLoading required package: stargazer\n\n\n\nPlease cite as: \n\n\n Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.\n\n\n R package version 5.2.3. https://CRAN.R-project.org/package=stargazer \n\n\n\n\n\nI created a function called Regress for combining results of all regression models into a single table:\n\nRegress <- function(data, DV, eq.IVs, OutcomeLabel){\n \n equations <- paste0(DV, \" ~ \", eq.IVs) # Create equations \n RegResults <- list() # Create an empty list that stores all regression results\n LogLike <- c(\"Log Likelihood\") # Storing log-likelihood of all regression results\n \n for(i in 1:length(equations)){\n reg <- lm(formula = equations[i], data = data)\n reg$AIC <- AIC(reg) # Include Akaike Inf. Crit.\n reg$BIC <- BIC(reg) # Include Bayesian Inf. Crit.\n RegResults[[paste0(OutcomeLabel, \"_\", ifelse(i<10, paste0(0, i), i))]] <- reg\n LogLike <- append(x = LogLike, values = round(logLik(reg),2))\n }\n \n # Export RegResults as doc \n return(stargazer(RegResults, \n type = 'html', \n out = paste0(\"Regression_Results_\", OutcomeLabel, \".doc\"), add.lines = list(LogLike))\n )\n}\n\nThis function Regress contains multiple inputs:\n\ndata for the set of data used in multiple linear regression models\nDV refers to dependent variable of multiple linear regression models\neq.IVs refers to set of IVs in each multiple linear regression model\nOutcomeLabel refers to the document name of the outcome (user-defined)\n\nNote that this function also includes model results of Akaike Information Criterion (AIC), Bayesian Information Criterion (BIC) and Log likelihood (LogLike) for models comparison.\nThis function returns with the regression table results in word document format.\n\n\n\nHere npk (R Datasets) is used for illustration. Three regressions are generated using lm(), with yield as dependent variable, as well as block and N as independent variables.\nFirst we import the dataset:\n\nnpk <- datasets::npk # Using R Datasets (Classical N, P, K Factorial Experiment)\n\nWe then define the dependent variable, which is yield in this case:\n\nDV = 'yield' # Set dependent variable\n\nNext, we define the set of IVs in each regression model. The first equation has block as IV. The second one has N. The last one has both as IVs:\n\n# Create a list of equations with independent variables\n# Here 1st equation is block, 2nd with N, 3rd with block and N\neq.IVs <- c(\"block\",\n 'N',\n 'block + N'\n )\n\nThen we generate the regression table with the function Regress:\n\nRegressionTable <- Regress(data = npk, DV = DV, eq.IVs = eq.IVs, OutcomeLabel = \"NPK\")\n\nThe result looks like this (here I use htmltools package for showing the result, but it is saved as a .doc file in the current working directory once the function is executed):\n\nhtmltools::knit_print.html(RegressionTable)\n\n\n\n\n\n\n\n\n\n\nDependent variable:\n\n\n\n\n\n\n\nequations\n\n\n\n(1)\n(2)\n(3)\n\n\n\n\n\nblock2\n3.425\n\n3.425\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock3\n6.750*\n\n6.750**\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock4\n-3.900\n\n-3.900\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock5\n-3.500\n\n-3.500\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock6\n2.325\n\n2.325\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nN1\n\n5.617**\n5.617***\n\n\n\n\n(2.281)\n(1.836)\n\n\n\n\n\n\n\n\nConstant\n54.025***\n52.067***\n51.217***\n\n\n\n(2.721)\n(1.613)\n(2.429)\n\n\n\n\n\n\n\n\n\n\n\nLog Likelihood\n-71.26\n-74.31\n-66\n\n\nObservations\n24\n24\n24\n\n\nR2\n0.392\n0.216\n0.608\n\n\nAdjusted R2\n0.223\n0.180\n0.469\n\n\nAkaike Inf. Crit.\n156.523\n154.615\n147.996\n\n\nBayesian Inf. Crit.\n164.770\n158.149\n157.421\n\n\nResidual Std. Error\n5.442 (df = 18)\n5.588 (df = 22)\n4.497 (df = 17)\n\n\nF Statistic\n2.318* (df = 5; 18)\n6.061** (df = 1; 22)\n4.389*** (df = 6; 17)\n\n\n\n\n\nNote:\n*p<0.1; **p<0.05; ***p<0.01\n\n\n\n\n\nThe complete code is shown as follows:\n\nnpk <- datasets::npk # Using R Datasets (Classical N, P, K Factorial Experiment)\nDV = 'yield' # Set dependent variable\n# Create a list of equations with independent variables\n# Here 1st equation is block, 2nd with N, 3rd with block and N\neq.IVs <- c(\"block\",\n 'N',\n 'block + N'\n )\nRegressionTable <- Regress(data = npk, DV = DV, eq.IVs = eq.IVs, OutcomeLabel = \"NPK\")"
},
{
"objectID": "projects/building-a-table-of-multiple-linear-regression-models-with-stargazer/index.html#introduction",
"href": "projects/building-a-table-of-multiple-linear-regression-models-with-stargazer/index.html#introduction",
"title": "Building A Table of Multiple Linear Regression Models with Stargazer",
"section": "",
"text": "In this post, I present a method to combine results of multiple linear regression models in a latex regression table with stargazer (R package).\nThe aim is to simplify regressions generation processes with a user-defined set of Independent Variables (IVs) for each regression model, and show all results in a regression table with stargazer. This is very helpful when adding (or removing) new IVs in current regression model gradually.\n\n\n\n\n\n\n\n\nrequire(stargazer) # Load stargazer \n\nLoading required package: stargazer\n\n\n\nPlease cite as: \n\n\n Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.\n\n\n R package version 5.2.3. https://CRAN.R-project.org/package=stargazer \n\n\n\n\n\nI created a function called Regress for combining results of all regression models into a single table:\n\nRegress <- function(data, DV, eq.IVs, OutcomeLabel){\n \n equations <- paste0(DV, \" ~ \", eq.IVs) # Create equations \n RegResults <- list() # Create an empty list that stores all regression results\n LogLike <- c(\"Log Likelihood\") # Storing log-likelihood of all regression results\n \n for(i in 1:length(equations)){\n reg <- lm(formula = equations[i], data = data)\n reg$AIC <- AIC(reg) # Include Akaike Inf. Crit.\n reg$BIC <- BIC(reg) # Include Bayesian Inf. Crit.\n RegResults[[paste0(OutcomeLabel, \"_\", ifelse(i<10, paste0(0, i), i))]] <- reg\n LogLike <- append(x = LogLike, values = round(logLik(reg),2))\n }\n \n # Export RegResults as doc \n return(stargazer(RegResults, \n type = 'html', \n out = paste0(\"Regression_Results_\", OutcomeLabel, \".doc\"), add.lines = list(LogLike))\n )\n}\n\nThis function Regress contains multiple inputs:\n\ndata for the set of data used in multiple linear regression models\nDV refers to dependent variable of multiple linear regression models\neq.IVs refers to set of IVs in each multiple linear regression model\nOutcomeLabel refers to the document name of the outcome (user-defined)\n\nNote that this function also includes model results of Akaike Information Criterion (AIC), Bayesian Information Criterion (BIC) and Log likelihood (LogLike) for models comparison.\nThis function returns with the regression table results in word document format.\n\n\n\nHere npk (R Datasets) is used for illustration. Three regressions are generated using lm(), with yield as dependent variable, as well as block and N as independent variables.\nFirst we import the dataset:\n\nnpk <- datasets::npk # Using R Datasets (Classical N, P, K Factorial Experiment)\n\nWe then define the dependent variable, which is yield in this case:\n\nDV = 'yield' # Set dependent variable\n\nNext, we define the set of IVs in each regression model. The first equation has block as IV. The second one has N. The last one has both as IVs:\n\n# Create a list of equations with independent variables\n# Here 1st equation is block, 2nd with N, 3rd with block and N\neq.IVs <- c(\"block\",\n 'N',\n 'block + N'\n )\n\nThen we generate the regression table with the function Regress:\n\nRegressionTable <- Regress(data = npk, DV = DV, eq.IVs = eq.IVs, OutcomeLabel = \"NPK\")\n\nThe result looks like this (here I use htmltools package for showing the result, but it is saved as a .doc file in the current working directory once the function is executed):\n\nhtmltools::knit_print.html(RegressionTable)\n\n\n\n\n\n\n\n\n\n\nDependent variable:\n\n\n\n\n\n\n\nequations\n\n\n\n(1)\n(2)\n(3)\n\n\n\n\n\nblock2\n3.425\n\n3.425\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock3\n6.750*\n\n6.750**\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock4\n-3.900\n\n-3.900\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock5\n-3.500\n\n-3.500\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nblock6\n2.325\n\n2.325\n\n\n\n(3.848)\n\n(3.180)\n\n\n\n\n\n\n\n\nN1\n\n5.617**\n5.617***\n\n\n\n\n(2.281)\n(1.836)\n\n\n\n\n\n\n\n\nConstant\n54.025***\n52.067***\n51.217***\n\n\n\n(2.721)\n(1.613)\n(2.429)\n\n\n\n\n\n\n\n\n\n\n\nLog Likelihood\n-71.26\n-74.31\n-66\n\n\nObservations\n24\n24\n24\n\n\nR2\n0.392\n0.216\n0.608\n\n\nAdjusted R2\n0.223\n0.180\n0.469\n\n\nAkaike Inf. Crit.\n156.523\n154.615\n147.996\n\n\nBayesian Inf. Crit.\n164.770\n158.149\n157.421\n\n\nResidual Std. Error\n5.442 (df = 18)\n5.588 (df = 22)\n4.497 (df = 17)\n\n\nF Statistic\n2.318* (df = 5; 18)\n6.061** (df = 1; 22)\n4.389*** (df = 6; 17)\n\n\n\n\n\nNote:\n*p<0.1; **p<0.05; ***p<0.01\n\n\n\n\n\nThe complete code is shown as follows:\n\nnpk <- datasets::npk # Using R Datasets (Classical N, P, K Factorial Experiment)\nDV = 'yield' # Set dependent variable\n# Create a list of equations with independent variables\n# Here 1st equation is block, 2nd with N, 3rd with block and N\neq.IVs <- c(\"block\",\n 'N',\n 'block + N'\n )\nRegressionTable <- Regress(data = npk, DV = DV, eq.IVs = eq.IVs, OutcomeLabel = \"NPK\")"
},
{
"objectID": "projects/building-a-table-of-multiple-linear-regression-models-with-stargazer/index.html#reference",
"href": "projects/building-a-table-of-multiple-linear-regression-models-with-stargazer/index.html#reference",
"title": "Building A Table of Multiple Linear Regression Models with Stargazer",
"section": "Reference",
"text": "Reference\nHlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables. R package version 5.2.3. https://CRAN.R-project.org/package=stargazer"
},
{
"objectID": "projects/index.html",
"href": "projects/index.html",
"title": "What I’ve been working on",
"section": "",
"text": "Building a personal spending dashboard with Shiny\n\n\n\n\n\n\n\n\n\n\n\nNov 3, 2024\n\n\nFendi Tsim\n\n\n\n\n\n\n\n\n\n\n\n\nBuilding a bus timetable app with Shiny\n\n\n\n\n\n\n\n\n\n\n\nAug 1, 2024\n\n\nFendi Tsim\n\n\n\n\n\n\n\n\n\n\n\n\nCreating a personal website with Quarto\n\n\n\n\n\n\n\n\n\n\n\nJun 15, 2024\n\n\nFendi Tsim\n\n\n\n\n\n\n\n\n\n\n\n\nTips on Working with R’s environment\n\n\n\n\n\n\n\n\n\n\n\nMay 16, 2024\n\n\nFendi Tsim\n\n\n\n\n\n\n\n\n\n\n\n\nFunctions, Cleaning, Analysis and Sharing (FxCAs)\n\n\n\n\n\n\n\n\n\n\n\nJul 14, 2023\n\n\nFendi Tsim\n\n\n\n\n\n\n\n\n\n\n\n\nBuilding A Table of Multiple Linear Regression Models with Stargazer\n\n\n\n\n\n\n\n\n\n\n\nMar 28, 2023\n\n\nFendi Tsim\n\n\n\n\n\n\nNo matching items"
},
{
"objectID": "projects/building-a-bus-timetable-app-with-shiny/index.html",
"href": "projects/building-a-bus-timetable-app-with-shiny/index.html",
"title": "Building a bus timetable app with Shiny",
"section": "",
"text": "In this post, I present a bus timetable app (link) for students at the University of Warwick made with Shiny. This Shiny app is for illustration purpose only.\n\n\n\n\n\nI extract daily timetable data (which are downloadable) from NX Bus Coventry.\nNote that this bus timetable app does not produce real-time information; it basically illustrate all timeslots in a timetable provided.\nThis bus timetable app only shows timeslots for buses under NX Bus Coventry. It is possible to shows buses from Stagecoach in future updates (if relevant timetable are downloadable publicly)."
},
{
"objectID": "projects/building-a-bus-timetable-app-with-shiny/index.html#introduction",
"href": "projects/building-a-bus-timetable-app-with-shiny/index.html#introduction",
"title": "Building a bus timetable app with Shiny",
"section": "",
"text": "In this post, I present a bus timetable app (link) for students at the University of Warwick made with Shiny. This Shiny app is for illustration purpose only.\n\n\n\n\n\nI extract daily timetable data (which are downloadable) from NX Bus Coventry.\nNote that this bus timetable app does not produce real-time information; it basically illustrate all timeslots in a timetable provided.\nThis bus timetable app only shows timeslots for buses under NX Bus Coventry. It is possible to shows buses from Stagecoach in future updates (if relevant timetable are downloadable publicly)."
},
{
"objectID": "projects/building-a-bus-timetable-app-with-shiny/index.html#features",
"href": "projects/building-a-bus-timetable-app-with-shiny/index.html#features",
"title": "Building a bus timetable app with Shiny",
"section": "Features",
"text": "Features\nThis bus timetable app has two inputs:\n\nFrom: the starting point\nTo: the destination\n\nThe default option for each of these two inputs are ‘Pool Meadow Bus Station’ and ‘University of Warwick Bus Interchange’ respectively.\nUser can select different starting point (e.g., Coventry Rail Station) with the same destination (‘University of Warwick Bus Interchange’), or different destinations with the same starting point (‘University of Warwick Bus Interchange’).\nUnder these two inputs there are four rows; each row represent a bus and its arrival time, indicated with a color box.\nIf a bus is available, its corresponding color box shows two lines. The first lines shows how many minutes left before it starts from the starting point, while the second line shows its time. User can click into the color box to see the last and upcoming bus arrival times (in terms of time and minutes).\nThere are four possible colors in a color box:\n\nred: less than 5 minutes\nyellow: between 5 and 10 minutes\ngreen: more than 10 minutes\npurple: No information available (shown as NA; ‘Not Applicable’)"
},
{
"objectID": "projects/building-a-bus-timetable-app-with-shiny/index.html#background",
"href": "projects/building-a-bus-timetable-app-with-shiny/index.html#background",
"title": "Building a bus timetable app with Shiny",
"section": "Background",
"text": "Background\nThis project is one of the projects I started paying more attention to recently.\nIt started off during a bus strike in Coventry in March 2023. At that time I was very confused about bus arrivals as Apple Maps, Google Maps and the one inside MyWarwick app did not show real-time information whenever buses worked.\nI then went on official sites and found some useful information. Yet, it is not mobile-browser-friendly as table of the timetable did not adjust to a mobile browser size. Also, it could be frustrating to scroll through the table, when what I really wanted to know from it is when the upcoming bus arrival would be!\nI had an idea of building a bus timetable app with Shiny during Christmas last year. I could not pay a lot of attention due to major issues in my professional and personal lives.\nRecently I picked up from where I left of eight months ago, and started working it extensively. I encountered a number of challenges both in front-end (such as the layout and design) and back-end (how to match with the current time) etc. As for the front-end, I took the traffic light approach - it’s straightforward, and commonly known among us - red is ‘danger’, yellow is ‘mild’ and green is ‘alright’. As for the back-end, it is, in fact, fascinating to learn how to deploy a shiny app that automatically refreshes after a certain time, how to update one input conditionally on another input etc.\nDespite all the challenges I encountered while coding it, I am truly grateful it works the way I envisioned a year ago!\nMost importantly, I hope it ultimately benefits UoW students who commute daily by buses. After staying here for more than six years, I truly understand the frustration when asking ‘when the bus will be here soon?!’.\nIt reminds me of one time I was waiting for 12x (an express bus between university and city centre) with a group of my friends at night in January (very cold!). One of my friends asked if we should wait for 12x though there was 11 (a bus with way more stops than 12x).\nWe started to view it as a decision-making problem - ‘a bet’ between a certain option with 11 (albeit taking more time) or an uncertain option with 12x (who knows when exactly it would arrive at night?).\nI do not remember which option we chose anyway. At that time, of course, it would be way better if we did have an app that shows bus arrival!\nMyWarwick app has a feature of showing bus arrivals time, but it seems to restrict on showing arrivals in some stops. Other alternatives such as Apple Maps and Google Maps work well. Recently I noticed that we can use CityMapper for checking bus arrival - an app I would recommend using as it works in other big cities in UK such as London (can’t live without it as it shows how much a trip would cost for alternatives), Birmingham and Manchester.\nIn the end, I am glad that I’ve made this app the way I envisioned! This bus timetable app is similar to a group of people back home creating a mobile app that shows real-time bus arrival. Honestly, theirs is way more advanced than mine!"
},
{
"objectID": "writings/word-and-its-meaning/index.html",
"href": "writings/word-and-its-meaning/index.html",
"title": "Word and its Meaning",
"section": "",
"text": "Perhaps it’s due to a sheer volume of readings I had to do recently - I became more sensitive on selections of word, and often, wonder its underlying meaning.\nTake ‘miss’ as an example. Growing up, I often used it to refer to a lady I am taking to. Then I realise it also refers to a situation that I fail my aim at - ‘hit or miss’. When a beloved is away from me, ‘miss’ becomes a verb - a way of describing my emotion as a result of being lost and found.\nWhat about ‘remember’? It is, in fact, quite a delicate one. This word is often applied on living objects such as human beings and animals. If we decompose it into two parts: ‘re’ refers to doing an action like the verb it is attached to again. For instance, we have ‘rejoice’, ‘return’, ‘remove’, ‘retake’, ‘recur’, ‘rethink’ etc. The meaning of ‘member’ is a straightforward one: we are social animals, and each of us is a member within this social kingdom. As a result, ‘re-member’ can be interpreted as one of our members who was not a member before, becomes one of us again.\n‘I remember you’, her son a mother who has dementia says to.\nOne last example requires a bit of imagination (which are abundant among us, isn’t it?), and it’s ‘proactive’. We have adjectives in similar forms like ‘active’ (which is an obvious one duh), ‘inactive’ (opposite of ‘active’), ‘reactive’ (a state when making a response). What about ‘proactive’ then?\nWell, one simple way of interpreting it is ‘professionally active’. To me, ‘proactive’ is a cousin of ‘reactive’; it is an old attitude of living one’s life. Being active professionally is to taking matters seriously, as though we were dealing with it in a ‘professional’ setting."
},
{
"objectID": "writings/book-reflection-at-the-existentialist-cafe/index.html",
"href": "writings/book-reflection-at-the-existentialist-cafe/index.html",
"title": "Book Reflection: At the Existentialist Cafe by Sarah Bakewell",
"section": "",
"text": "Eight years ago, my English Literature Lecturer recommended me to read Sartre’s ‘Existentialism is Humanism’. I was fascinated by it and incorporated some of its ideas into my assignment. Later, with my lecturer’s recommendation, my assignment became a chapter in a journal of literature and culture published by my college. \nAt that time, Sartre’s idea offered me, a twenty-year-old guy, some ground-breaking insights on how I think of living my life should be - existence precedes essence. \nDespite my ‘philosophy’ of how to live my life has departed from his idea, I still found myself roaming back to and intoxicating into it occasionally. \nFortunately, I found this book in a public library. All the good old memories of reading Sartre’s paper about ‘Existentialism is Humanism’ over and over come back instantly while reading it. \nI’m glad that I’ve picked up this book, and it definitely inspires me to read some works from Heidegger, Jaspers, Beauvoir, Kierkegaard as well as Merleau-Ponty. \nI’d to read Sartre’s ‘Being and Nothingness’ in a cafe where he and Beauvoir had a profound discussion of their work about Existentialism."
},
{
"objectID": "writings/book-reflection-small-change/index.html",
"href": "writings/book-reflection-small-change/index.html",
"title": "Book Reflection: Small Change by Dan Ariely",
"section": "",
"text": "Been a long time since I read Dan’s book. When I learned Behavioral Economics eight years ago, I was intrigued by his books, as well as from Daniel Kahneman, Richard Thaler.\nI admire the way he provides interesting real-life examples when explaining cognitive biases.\nThis book is, in my opinion, a great one to understand how we make financial decisions with cognitive biases - mental accounting, relativity, sunk cost fallacy etc.\nMy thought on these is whether it would apply in another domain in life: time. As the saying goes: ‘time is money’.\nHow time is framed as our own currency for trading - or a cost for opportunities, is ubiquitous in daily lives.\nOf course, we cannot ‘save’ our time - a minute has gone is gone. It never comes back, and cannot be bought. However, we can make use of some biases in his book as a guidance of time management.\nFor instance, ‘sunk cost fallacy’ - we suffer the cost we paid (sunk cost) when we make a relevant decision. Of course, whatever happened happens - shall I continue on the same path, making a choice based on whatever (good or bad) that happened to me before?"
},
{
"objectID": "writings/reading-a-book-for-a-week-challenge-2023/index.html",
"href": "writings/reading-a-book-for-a-week-challenge-2023/index.html",
"title": "Reading a book for a week challenge in 2023",
"section": "",
"text": "I was not a book worm - I used to pick up manga over non-fictions or even fictions.\nI saw myself struggling a lot when reading a lot of texts at work. Then I thought: ‘why not training myself to reading?’\nIn early 2023 I decided to challenge myself of reading a book for a week, which would be 52 books by the end of 2023.\nBy the end of 2023, I read 68 books - thats not what I expected!\nReading a lot of books might not help my work, as I realised later. However, it does help with my thinking, how I absorb knowledge, and in turn, enriches conversations. I sometimes found myself quoting a few concepts I read from books when I converse.\nMost importantly, it’s not the number of books read that counts; practice deliberately by reading a bit of a book daily, it then becomes a habit, part of ourselves we are reluctant to give away."
},
{
"objectID": "writings/in-the-eye-of-cyclone/index.html",
"href": "writings/in-the-eye-of-cyclone/index.html",
"title": "In The Eye of Cyclone",
"section": "",
"text": "In time, shall we be in the eye of a cyclone - whereby we find a sense of balance and tranquility. Thus, there shall we contemplate, reflect on, and heal ourselves.\nHowever, to become better - the eye, one must step out. One must confront to It-Which-Shall-Not-Be-Named in the rite of passage. Dreadful it does sound, hurtful it can be.\nShall one discover the cornerstone of maturity to step on eventually, and realize that this phoenix-reborn-like moment is just a very part of the many, many cycles in life. Like a beautiful sunset of a day - it is neither the end of a beginning, nor a beginnging of the end."
},
{
"objectID": "writings/index.html",
"href": "writings/index.html",
"title": "What I’ve been thinking lately",
"section": "",
"text": "Order By\n Default\n \n Date - Oldest\n \n \n Date - Newest\n \n \n Title\n \n \n \n \n \n \n \n\n\n\n\n\nDate\n\n\nTitle\n\n\n\n\n\n\nJun 23, 2024\n\n\nSunday Morning Workout\n\n\n\n\nMay 29, 2024\n\n\nIn The Eye of Cyclone\n\n\n\n\nApr 5, 2024\n\n\nBook Reflection: Reasons Not to Worry by Brigid Delaney\n\n\n\n\nMar 15, 2024\n\n\nWord and its Meaning\n\n\n\n\nMar 7, 2024\n\n\nBook Reflection: Small Change by Dan Ariely\n\n\n\n\nMar 2, 2024\n\n\nBook Reflection: At the Existentialist Cafe by Sarah Bakewell\n\n\n\n\nFeb 18, 2024\n\n\nReading a book for a week challenge in 2023\n\n\n\n\n\nNo matching items"
},
{
"objectID": "writings/book-reflection-reasons-not-to-worry/index.html",
"href": "writings/book-reflection-reasons-not-to-worry/index.html",
"title": "Book Reflection: Reasons Not to Worry by Brigid Delaney",
"section": "",
"text": "This book was not in my monthly book list.\nAt the end of every month I made myself a list of books I’d like to read in the following month. I then went to the library and borrowed them.\nWhen I was searching for a book inside a library, I saw this one on the top shelf. Then I thought: why not giving this one a try, despite I’ve got what I want? -\nIt turned out to be one of the best decisions I made last month.\nI was lucky to find this book while going through difficult times. The figure in the second picture demonstrates a simple idea, or a perceptual blindness if you prefer, of dealing with issues in life. This concept links with Alfred Adler’s Separation of Tasks.\nI anticipate myself coming back to this book occasionally in the future. It’s a great one, after all."
},
{
"objectID": "writings/sunday-morning-workout/index.html",
"href": "writings/sunday-morning-workout/index.html",
"title": "Sunday Morning Workout",
"section": "",
"text": "I’ve been enjoying doing workouts on Sunday mornings.\nToday I visited a local 24-7 gym at 5am. This is the first time I went there before 7am - I often wake up at around 5am, and went there at around 7:15am. To my surprise, there were a few people running on treadmills while some lifting up dumbbells.\nInitially I planned to stay in bed, and try to get some rest. I was recovering from an illness, and only slept for four hours yesterday. My body, as well as my mind, kept telling me to stay at home. Yet, I do not want that - I’d rather get myself sweating a lot at the gym, then have some delicious food, and call it a day earlier than normal.\nThe tranquility inside the free weight area was comforting. It was a leg day for me Today. I managed to do a few reps of Barbell Squat, and eventually did heavier than last time. I left the gym with a smiley face - wondering how I could do that despite I was not in the best version I could be physically and mentally, and of course, what if I followed what my body and my mind have said.\nI suspect what motivates me to doing workouts despite adversity is discipline. I’m in a bulking phrase, while I am trying to be active everyday. Sometimes I need to do what I do not want to do - possibly due to my laziness, or my over-thinking mind that persuades me how enormous a task would be and how incapable I was. Doing workouts on Sunday morning can be a haunting task - as most of us would definitely prefer to have a chill, and slow morning. Yet, like what I’ve seen from people around me, sometimes we just need to keep moving, and keep going, possibly due to in a pursuit of life goals, such as getting in shape, being healthier etc.\nKeep going."
},
{
"objectID": "gallery/index.html",
"href": "gallery/index.html",
"title": "October 2024",
"section": "",
"text": "October 2024\n\n\n\n\n\nIrresistible…\n\n\n\n\n\n\n007.\n\n\n\n\n\n\nPrimrose Hill\n\n\n\n\n\n\nChicken Xiao Long Bao!\n\n\n\n\n\n\nSuper Full Moon I.\n\n\n\n\n\n\nWhat a lovely sunset!\n\n\n\n\n\n\nSuper Full Moon II.\n\n\n\n\n\n\nSt Paul’s Cathedral.\n\n\n\n\n\n\nThank God I’m here.\n\n\n\n\n\n\nEve Cafe.\n\n\n\n\n\n\nHome.\n\n\n\n\n\n\nDaunt Books Marylebone\n\n\n\n\n\n\nSeptember 2024\n\n\n\n\n\nBeing a petsitter :) - an unforgettable experience!\n\n\n\n\n\n\nWhat a breathtaking sunset…\n\n\n\n\n\n\nThis is the advice I need right now.\n\n\n\n\n\n\nHappy Mid-Autumn Festival! A lovely full moon!\n\n\n\n\n\n\nFascinating book to read. What he taught is not only applicable for personal finance but other aspects in life as well.\n\n\n\n\n\n\nFeeling so lucky to see this majestic performance in Warner Brothers Harry Potter Studio!!!\n\n\n\n\n\n\nOnce-in-a-lifetime event! Thanks Eve for this valuable opportunity!!!\n\n\n\n\n\n\nReminds me of a cover from the book The Body Keeps The Score.\n\n\n\n\n\n\nAugust 2024\n\n\n\n\n\nGonna miss this KFC.\n\n\n\n\n\n\nA lovely gift for a friend’s birthday\n\n\n\n\n\n\nWhat a wonderful meal!\n\n\n\n\n\n\nA great illustration of two attachment styles from Anxiously Attached.\n\n\n\n\n\n\nTick Tock, Tick Tock…\n\n\n\n\n\n\nLast sunset in Coventry.\n\n\n\n\n\n\nCan’t believe this beach inside London!\n\n\n\n\n\n\nA lovely sunset in Ealing.\n\n\n\n\n\n\n‘When I stare at the darkness, so does the darkness.’\n\n\n\n\n\n\nBig Ben.\n\n\n\n\n\n\nJuly 2024\n\n\n\n\n\nHow to deal with hot weather in London… with gelato!\n\n\n\n\n\n\n\nLucky day!\n\n\n\n\n\n\n\n“What are you looking at?”\n\n\n\n\n\n\n\nAbsolutely breathtaking - reminds me of Harry Potter…\n\n\n\n\n\n\n\nLovely wall inside an Asian restaurant in Oxford.\n\n\n\n\n\n\n\nCongrats to all graduates!\n\n\n\n\n\n\n\nFinally it’s summer time!\n\n\n\n\n\n\n\nFull moon.\n\n\n\n\n\n\n\nOn the move!\n\n\n\n\n\n\n\nTime for a rest.\n\n\n\n\n\n\n\nGlad that my friend and I met a peacock in Kyoto Garden!\n\n\n\n\n\n\n\nWhat a view in Holland Park, London!\n\n\n\n\n\n\nJune 2024\n\n\n\n\n\nHow to deal with hot weather…\n\n\n\n\n\n\n\nSummer is coming!\n\n\n\n\n\n\n\nMeowjesty <3\n\n\n\n\n\n\n\nAbsolutely breathtaking.\n\n\n\n\n\n\n\nYum Cha!\n\n\n\n\n\n\n\nPicnic at St. James Park, London\n\n\n\n\n\n\n\nHats off to these lovely flowers that grows in difficult places.\n\n\n\n\n\n\n\nIn love with Sunday morning workout!\n\n\n\n\n\n\n\nSoon.\n\n\n\n\n\n\nLet’s call it a day, shall we?\nLet’s call it a day, shall we?\n\n\n\n\n\n\nMay 2024\n\n\n\n\n\nGas Street Basin, Birmingham\n\n\n\n\n\n\n\nA lovely sunset!\n\n\n\n\n\n\n\nFlat White from Beans and Leaf Coffee House, Coventry\n\n\n\n\n\n\n\nHappy when attending this exhibition! One of my favorite anime of all time\n\n\n\n\n\n\n\nVictoria Harbour, Hong Kong\n\n\n\n\n\n\n\nMong Kok, Hong Kong\n\n\n\n\n\n\n\nMissing this hot and sunny weather!\n\n\n\n\n\n\n\nMid-Levels (Central, Hong Kong)\n\n\n\n\n\n\nApril 2024\n\n\n\n\n\nLatte from Beans and Leaf Coffee House, Coventry\n\n\n\n\n\n\n\nView at Gas Street Basin, Birmingham\n\n\n\n\n\n\n\n(Almost) full moon :)\n\n\n\n\n\n\n\nNight View of Warwick Business School Building\n\n\n\n\n\n\n\nThe weather is getting better - taken at University of Warwick"
},
{
"objectID": "projects/building-a-personal-spending-dashboard-with-shiny/index.html",
"href": "projects/building-a-personal-spending-dashboard-with-shiny/index.html",
"title": "Building a personal spending dashboard with Shiny",
"section": "",
"text": "In this post, I present a personal spending dashboard (link) that helps visualize and analyse monthly spending. This Shiny app is for illustration purpose only."
},
{
"objectID": "projects/building-a-personal-spending-dashboard-with-shiny/index.html#introduction",
"href": "projects/building-a-personal-spending-dashboard-with-shiny/index.html#introduction",
"title": "Building a personal spending dashboard with Shiny",
"section": "",
"text": "In this post, I present a personal spending dashboard (link) that helps visualize and analyse monthly spending. This Shiny app is for illustration purpose only."
},
{
"objectID": "projects/building-a-personal-spending-dashboard-with-shiny/index.html#features",
"href": "projects/building-a-personal-spending-dashboard-with-shiny/index.html#features",
"title": "Building a personal spending dashboard with Shiny",
"section": "Features",
"text": "Features\nThis spending dashboard allows user to upload a csv file with specific format (for more information, see the Home tab in the dashboard). User is required to provide spending of the past 12 months and current month.\nThis dashboard also provides you valuable information about your spending, such as:\n\nHow does your current month’s spending look like? (distribution)\nHow does your yearly spending trend look like? (trend)\nDoes your spending pattern in current month differ from that of average of last 12 months’? (overall comparison)\nFor each spending category, how does your current month’s improve from average of last 12 months’? (per-category comparison)"
},
{
"objectID": "projects/building-a-personal-spending-dashboard-with-shiny/index.html#background",
"href": "projects/building-a-personal-spending-dashboard-with-shiny/index.html#background",
"title": "Building a personal spending dashboard with Shiny",
"section": "Background",
"text": "Background\nI had a habit of keeping track of my monthly expenses since I moved to UK. Thankfully, my bank’s mobile app categorized my spending each month, which provides some insights on the distribution of my monthly spending.\nYet, I wondered if I could visualize and analyse how spending in each category varies over time, particularly over the last 12 months or so.\nAlso, it would be better to have a comparison in spending between current month and a reference group - which the average spending of the last 12 months (self-referencing) seems to do a pretty good job.\nWith a bit of techniques from Behavioural Science and some questions about monthly spending, I managed to create a draft of this dashboard. I was fortunate to have my friends (Junning and Shantanu) who provided valuable insights in terms of the layout and possibility of how this dashboard could be in the future!\nWith this spending dashboard, I have a few questions about managing personal spending:\n\nHow do users react to absolute amounts vs. percentage changes in spending?\nIt seems to me that these two might produce different results in the overspending and saving up sections (framing effect). The absolute amount would be a more effective tool than percentage changes when alerting how much a user overspent (in a ‘loss’ framing), simply because the latter would require a user to (i) be aware of what the original spending that is compared to, and (ii) perform a mathematical calculation with the information.\nCan this dashboard improve financial literacy?\nThe aim of this dashboard is to provide simple, valuable insights on managing personal spending. Thus, it would be interesting to conduct a within-participant experiment, which is to measure a user’s financial literacy before and after using the dashboard for a period. For instance, we could elicit how well user manages their personal spending with a set of questions before they use this dashboard. We could inform them to use this dashboard weekly, bi-monthly, monthly with reminders. After a period (e.g., three months), we ask them the same set of questions and observe if there are any differences in response.\nWhich is more effective for encouraging savings: personal or community reference points?\nIn this dashboard, I applied self-referencing in the comparison (current month’s spending with average monthly spending of the 12 last months). One of the prevalent effect in reference-point literature is to comparing it with a community (e.g., you used 50% energy more than what your neighbours used in the last month in nudging energy-saving). To create such community-referencing effect, bank could make use of users’ spending (in anonymous way) to nudge for personal spending. Yet, it seems to me that it would be better and beneficial for banks if users could also be nudged to invest more, with the money they could save up from this."
},
{
"objectID": "projects/FxCAs/index.html",
"href": "projects/FxCAs/index.html",
"title": "Functions, Cleaning, Analysis and Sharing (FxCAs)",
"section": "",
"text": "Introduction\nIn this post, I present a multiple-script-interconnected, minimalistic framework that facilitates data cleaning and analysis in R. This framework (which I called ‘Functions, Cleaning, Analysis and Sharing’, or ‘FxCAs’) is based on the idea of ‘Division of Labor’, that is, each of the four R scripts serves one simple purpose (listed below):\n\n\n\nVisualizing FxCAs framework\n\n\nCustom Functions (Fx)\n\nAllow user to load customized functions when separate R scripts (cleaning.R or analysis.R) are used\n\nCleaning\n\nContains codes that serve for data wrangling\nExports data for Analysis\nStores current progress in terms of timestamp for future references\n\nAnalysis\n\nContains codes for analyzing data\nExports data for presentation\nStores current progress in terms of timestamp for future references\n\nSharing\n\nAllow user to share all three R scripts and other files from a local directory to one or more remote directories automatically with custom commands\n\n\n\nFeatures\n\nUser-Friendliness\n\nUser can quickly make modification in one script, instead of one section in a lengthy script\nI use ‘section’ as R’s in-built feature for dividing codes into sections (user can click the option on the bottom left with a brown hashtag to quickly jump from one section to another; user can also fold codes within a section for better viewing and editing)\n\n\n\nAutomatic Update among R scripts and RData\n\nThe lines under ‘prerequisite’ section in Cleaning and Analysis update the prerequisite automatically, such as which operating system it is in currently (here I specify between MacOS and Windows; user need to input them manually for the first time), importing the latest version of fx script, loading the latest version of cleaned data etc\n\n\n\nStorage and Retrieval for Scripts and Data\n\nHere I store Data as .Rdata based on the time it was stored. It allows user to go back easily to previous .RData for references\nFor scripts retrieval, the cleaning and analysis script retrieves the latest version of fx scripts in the directory automatically\n\n\n\n\nSuggestions\n\nUsing R.project when applying this framework for convenience and efficiency\nInclusion of data.table in Cleaning script\nCreating Cleaning and Analysis scripts automatically with user’s prompt\nStoring (generalized) functions as R packages"
},
{
"objectID": "projects/tips-on-working-with-r-environment/index.html",
"href": "projects/tips-on-working-with-r-environment/index.html",
"title": "Tips on Working with R’s environment",
"section": "",
"text": "After working extensively with R in the past few years, I have a few tips that can improve user’s experience while searching within R’s environment (see below)."
},
{
"objectID": "projects/tips-on-working-with-r-environment/index.html#starting-name-of-an-object-according-to-its-type",
"href": "projects/tips-on-working-with-r-environment/index.html#starting-name-of-an-object-according-to-its-type",
"title": "Tips on Working with R’s environment",
"section": "Starting name of an object according to its type",
"text": "Starting name of an object according to its type\nWe often encounter a number of objects when analyzing data with R, such as variable, data (such as data.frame, list), function etc. One trick I often do is to start an object’s name with an abbreviation of its type, or a ‘prefix’. For instance, I would start a function’s name with fx. .\n\nfx.foo <- function(){}\nfx.foo1 <- function(){}\nfx.foo2 <- function(){}\n\nWe can retrieve name of all functions in the environment by typing the following command in R Console:\n\nls(pattern = \"fx.\")\n\n[1] \"fx.foo\" \"fx.foo1\" \"fx.foo2\"\n\n\n\nDifferentiating Raw and Sorted Data\nOften we would like to keep raw and sorted data in the environment, as we might mess up with the sorted one and we would like to create a new sorted one quickly. I often differentiate them by checking the start of their name:\n\n# Suppose mtcars is our raw data (which has 11 columns)\ndata.mtcars <- mtcars\n\n# Suppose our sorted data contains the first five column of our raw data\ndf.mtcars <- data.mtcars[,1:5]\n\ndim(data.mtcars)[2] # No. of columns in our raw data\n\n[1] 11\n\ndim(df.mtcars)[2] # No. of columns in our sorted data\n\n[1] 5\n\n\nHere raw data start with data., while sorted data start with df. - an easy way to distinguish them! This is a nicer (and quicker) way for retrieving a specific data.frame object in R’s environment when I type data. in R’s console, and a small box next to it shows relevant functions and objects. Then I can simply click tab button to select!\nWith this nice way to naming objects in R’s environment, it is thus easier for us to remove unnecessary objects at once. In this example, our R’s environment has:\n\nls()\n\n[1] \"data.mtcars\" \"df.mtcars\" \"fx.foo\" \"fx.foo1\" \"fx.foo2\" \n\n\nSuppose I want to remove all customized functions I’ve imported (those start with fx.). Then I can run the following command:\n\nrm(list=ls(pattern = 'fx.'))\n\nHere I use rm() for removing objects in R’s environment. I specify a character variable called ‘list’, which is a list of object names that has a pattern of ‘fx.’ in R’s environment.\nThen I check how my current R’s environment looks like:\n\nls()\n\n[1] \"data.mtcars\" \"df.mtcars\""
},
{
"objectID": "projects/tips-on-working-with-r-environment/index.html#configurations",
"href": "projects/tips-on-working-with-r-environment/index.html#configurations",
"title": "Tips on Working with R’s environment",
"section": "Configurations",
"text": "Configurations\nWhen cleaning and analyzing data, we create a number of variables that contain elements to be iterated over time. For instance, I might need to clean a dataset based on the set of values (or ‘keys’) in one of its column. In this case, I would create a list variable called configs that stores all the keys (I was inspired by another software I used during data collection).\n\nconfigs <- list('sessions'=c('ABC', 'DEF', 'XYZ'),\n 'conditions'=c('control', 'modified'))\nconfigs\n\n$sessions\n[1] \"ABC\" \"DEF\" \"XYZ\"\n\n$conditions\n[1] \"control\" \"modified\"\n\n\nThe configs contains two sets of keys: sessions for three sessions and conditions for two conditions. Two advantages for storing the keys this way:\n\nEasily traceable: I only search through the key in configs rather than the whole environment\nEasily changeable: if, for some reasons, I would need to change the keys for running the code, I could simply change them here rather than tracing every related part of the code.\n\nNote that I don’t name all keys and its elements with a capital letter - easy to type without pressing the shift key on your keyboard whenever retrieving them!"
},
{
"objectID": "projects/tips-on-working-with-r-environment/index.html#freeing-up-unused-r-memory",
"href": "projects/tips-on-working-with-r-environment/index.html#freeing-up-unused-r-memory",
"title": "Tips on Working with R’s environment",
"section": "Freeing up unused R memory",
"text": "Freeing up unused R memory\nOften I make sure I have sufficient amount of memory in R’s environment. To do so I can either the option next to ‘Import Dataset’ in Environment tab, then select ‘Free unused R memory’, or I can run with gc()."
},
{
"objectID": "projects/tips-on-working-with-r-environment/index.html#backing-up-and-loading-saved-rs-environment",
"href": "projects/tips-on-working-with-r-environment/index.html#backing-up-and-loading-saved-rs-environment",
"title": "Tips on Working with R’s environment",
"section": "Backing up and Loading saved R’s environment",
"text": "Backing up and Loading saved R’s environment\nOften I do some programming with R, I start with a command of loading saved R’s environment as .RData with load() function, and ends with save.image() to save my progress as .RData."
},
{
"objectID": "resume/index.html",
"href": "resume/index.html",
"title": "Education",
"section": "",
"text": "Education\n\n\n\n\n\n\n\nSept 2020 - Jul 2024\nPhD in Behavioural Science\nWarwick Business School, University of Warwick\n\nDesigned lab experiment in oTree with Python to understand coordination in various social interactions such as noncompliance detection and prevention in one-off interactions, as well as turn-taking behavior in repeated interactions\nDiscussed theoretically computation of bargaining power when a bargaining procedure is present based on Virtual Bargaining\nConducted quantitative analysis with R\n\n\n\n\n\n\n\nSept 2019 - Aug 2020\nMPhil in Business and Management\nWarwick Business School, University of Warwick\n\n\n\n\n\n\nSept 2017 - Oct 2018\nMSc in Behavioural and Economic Science\nUniversity of Warwick\n\nDesigned lab experiment in oTree with Python to explore human cooperative behaviour in a two-agent repeated interaction\nConducted quantitative analysis with R\n\n\n\n\n\n\n\nSept 2015 - Aug 2017\nBBA in Applied Economics\nHong Kong Baptist University\n\n\n\n\n\n\nJun 2016 - Aug 2016\nPembroke King’s Programme 2016\nUniversity of Cambridge\n\n\n\n\n\n\nJun 2014 - Jun 2014\nEnglish Immersion Programme\nThe University of Queensland\n\n\n\n\n\n\nSept 2013 - Aug 2015\nAssociate Degree Programme, Associate of Science, Professional Accountancy\nHong Kong Baptist University\n\n\n\n\n\n\n\n\n\nExperience\n\n\n\n\n\n\n\nApr 2024 - Oct 2024\nWebmaster\nEGUK/CGVC\n\n\n\n\n\n\nFeb 2024 - Aug 2024\nCo-President\nWarwick Business School PhD Students Society\n\nAssisted President with strategic goals setting for the society\n\n\n\n\n\n\n\nNov 2022 – Jan 2024\nLab Assistant\nUniversity of Warwick\n\nUndertook teaching tasks within a class, seminar, and tutorial or equivalent context in order to progress the student learning about psychological theories and models with MATLAB\n\n\n\n\n\n\n\nJul 2022 – Sept 2023\nVice President and Experiment Design Advisor\nWarwick Behavioural Insights Team\n\nAssisted President with strategic goals setting for the society\nWorked directly within Heads of both units and members to build better engagement and collaborations\nProvided advice on Intervention Design for Nudge Unit team projects\n\n\n\n\n\n\n\nJan 2020 – Mar 2020\nBehavioural Science: Lab Assistant\nWarwick Business School, University of Warwick\n\nUndertook teaching tasks within a class, seminar, and tutorial or equivalent context in order to progress the student learning about Big Data and R\n\n\n\n\n\n\n\nMay 2019 – Aug 2019\nResearch Assistant\nWarwick Business School, University of Warwick\n\nConducted literature review for a working paper\nDesigned lab experiment code in oTree with Python\n\n\n\n\n\n\n\nOct 2017 – Oct 2018\nBehavioural Nudge Analyst and Founding Member\nWarwick Behavioural Insights Team\n\nConducted qualitative and quantitative research on end-of-term food wastage in a team of 6\nFormulated environmental nudge proposal to reduce food wastage\nPresented proposal to a panel of stakeholders, including lecturers and university estate staff\n\n\n\n\n\n\n\n\n\n\nSkills\n\n\n\n\n\n\n\n\nR\n\n\n\n\n\n\nStatistical Analysis\nTime Series Analysis\nData Visualization with ggplot2, Plotly and Leaflet\nWeb Development with Shiny and Quarto\nWeb scrapping\nCreating package\nData Manipulation with dplyr, data.table\n\n\n\n\n\n\n\n\n\n\n\n\nPython\n\n\n\n\n\n\nConducting web-based interactive tasks with oTree\nData Manipulation with Pandas\nStatistical Analysis\nData Visualization with Matplotlib\nNumPy and SciPy\n\n\n\n\n\n\n\n\n\n\n\n\nGit\n\n\n\n\n\n\nVersion Control with repository\nWebsite Deployment (with Shiny (Shinylive) and Quarto)\n\n\n\n\n\n\n\n\n\n\n\n\nSQL\n\n\n\n\n\n\nData Manipulation\nAggregate Functions\nConnecting Tables\n\n\n\n\n\n\n\n\n\n\n\n\nMatlab\n\n\n\n\n\n\nStatistical Analysis\nData Visualization\nSimulation (Agent-Based Modelling)\n\n\n\n\n\n\n\n\n\n\n\n\nStata\n\n\n\n\n\n\nData Management\nStatistical Analysis\nData Visualization\n\n\n\n\n\n\n\n\n\n\n\n\nMplus\n\n\n\n\n\n\nData Management\nData Analysis such as Structural Equation Modelling\nConnecting with R\n\n\n\n\n\n\n\n\n\n\n\n\nSPSS\n\n\n\n\n\n\nData Management\nStatistical Analysis\nData Visualization\n\n\n\n\n\n\n\n\n\n\n\n\nAstro\n\n\n\n\n\n\nWeb Development with HTML, Javascript and CSS\n\n\n\n\n\n\n\n\n\n\n\n\nMicrosoft software\n\n\n\n\n\n\nWord\nPowerPoint\nExcel"
}
]