A program is only as good as its tests. Accordingly, FixConv comes with a simple command-line test program that can be used for one-off conversions, and also to test it.
To run the test program :-
java -cp target/fixconv-<VERSION>.jar org.fixprotocol.contrib.converter.FixConvTest usage: FixConvTest xmlToTag FixRepository.xml file.fixml [file.tag [extMaj [extMin [extSP [extEP [extCv]]]]]] or: FixConvTest tagToXml FixRepository.xml file.tag [file.fixml [extMaj [extMin [extSP [extEP [extCv]]]]]] or: FixConvTest repair FixRepository.xml file.tag [file2.tag [extMaj [extMin [extSP [extEP [extCv]]]]]] or: FixConvTest pretty FixRepository.xml file.tag [extMaj [extMin [extSP [extEP [extCv]]]]] or: FixConvTest validate file.fixml fixml-main-X-X.xsd
This can be used to convert either way, eg: to convert from FIXML to tag=value :-
java -cp target/fixconv-<VERSION>.jar org.fixprotocol.contrib.converter.FixConvTest \ xmlToTag src/test/resources/FixRepository-2010_Subset.xml file.fixml
To do the same, and keep the result in a file :-
java -cp target/fixconv-<VERSION>.jar org.fixprotocol.contrib.converter.FixConvTest \ xmlToTag src/test/resources/FixRepository-2010_Subset.xml file.fixml file.fixml.tag
If the input FIXML file has a Batch of messages, and it contains
more than one message, then several output files are written, with filenames
ending in -1
, -2
, etc..
To convert back :-
java -cp target/fixconv-<VERSION>.jar org.fixprotocol.contrib.converter.FixConvTest \ tagToXml src/test/resources/FixRepository-2010_Subset.xml file.tag
and keep the result (without overwriting the original) :-
java -cp target/fixconv-<VERSION>.jar org.fixprotocol.contrib.converter.FixConvTest \ tagToXml src/test/resources/FixRepository-2010_Subset.xml file.tag file.tag.fixml
The test program displays the message before translation,
some debug tracing (which isn't normally shown when using the
FixConv
classes), and the output message(s).
tag=value messages are shown in a debug printable form, ie: using the
.toString()
method described earlier, thus resulting
in \xHH
notation in the output.
The repair
command reads a tag=value message and if the
BodyLength (9) field is missing, it inserts and calculates it.
If the CheckSum (10) field is missing, it appends and calculates it.
This is handy because sometimes people write sample test messages
using text editors and omit these fields (or get them wrong).
Some text editors also append newline characters (\n
or
\r\n
) to the end of the line - this test program silently
truncates these unwanted additions.
The pretty
command dumps the fields in a tag=value
message, one to a line, annotating each with the tag name.
If you have the schemas handy, the validate
command
can be used to check your FIXML file for validity.
Validation errors are displayed, and silence is good.
If a FIXML message is valid, this program should be able to convert it
to tag=value.
When tag=value messages are converted to FIXML, they should be valid.
Note that the FIX Converter can convert session tag=value messages
to FIXML, but note that these will fail to validate against the FIXML XSDs.
This is not because there is anything wrong with them structurally,
its just that the folks behind the Unified FIX Repository have decided
that FIX session messages are not requred in FIXML.
Looking at the 2010 Edition of the repository, I can see a problem
in the way the FIX.4.4 Logon
message is defined (it has a
NoMsgTypes
repeatingGroup
directly within the
message
, rather than nested within a component
which is componentRef
d from the message
.
This prevents the correct generation of FIXML for that message.
src/test/resources/FixRepository-2010_Subset.xml
is a stripped down
subset of the 2010 Edition of the Unified FIX Repository,
included for testing purposes.
src/test/resources/messages/
contains
many sample tag=value messages (with .tag
file extension),
and many sample FIXML messages (with .fixml
file extension).
The message filenames typically reflect the nature of their content,
and the problem with the data, and sometimes the expected result.
Sometimes the content itself includes comments regarding the expected result.
eg: fix44-malformed-tag.tag
.
The result of doing a xmlToTag
on a .fixml
file is captured in a corresponding .fixml.tag
file,
and a log of the conversion process (captured from stdout) in a
.fixml.log
file.
If a FIXML file converts to more than one tag=value file, then the
filenames end in -<NUMBER>.fixml.tag
.
The result of doing a tagToXml
on a .tag
file is captured in a corresponding .tag.fixml
file,
and a log of the conversion process (captured from stdout) in a
.tag.log
file.
Test messages have been difficult to source, and in many cases have been created by getting sample or real messages and cleaning them up so that they validate. Some came from the FPL site and some are real messages with names changed to protect the guilty. Some are designed to exercise specific functionality and some are designed to be defective in specific ways.
The test data covers :-
data
fieldsNote that with the encoded data samples, although the data is right in the input and output files, it won't look right on the standard output because the terminal typically doesn't use the right encoding.
The test data described above is what the JUnit tests use.


---
layout: default
---
9 Things I Learned from SVB
April 2023
Silicon Valley Bank (SVB)—the 16th largest bank in the United States—was shut down by federal regulators on March 10, 2023. Here are 9 things I learned from the recent banking crisis.
READ MORE
On Writing (Academic Papers) Well
February 2023
In January 2023, I participated in the EconScribe Research Paper Workshop, an asynchronous session led by Varanya Chaubey. She is also the author of The Little Book of Research Writing, which helps structure your papers. In this post, I summarize the key lessons from the workshop.
READ MORE
When Securitization Met Private Equity
January 2023
Recently, there has been a discussion regarding the rise of collateralized fund obligations (CFOs), which pool together multiple private equity funds and issue securities backed by them. In this post, I summarize my brief investigation of their prevalence, economic motives behind their rise, and future research questions that may be of interest.
READ MORE
Quantifying the Surprise Factor in Paper Titles
December 2022
How should abstracts of papers be written to maximize impact? In this post, I evaluate the abstracts of academic papers written by my friends at graduate school using recent advancements in language models.
READ MORE
Financial Approach to Environmental Sustainability
August 2022
The past few years have seen many actors in the financial system take sustainability into account in their decision-making. In this post, I paint a broad picture of the related efforts and how they interact with one another.
READ MORE
Standard way to cluster standard errors
May 2022
Clustering standard errors can make or break papers. In this post, I discuss what are considered standard approaches to clustering standard errors, particularly focusing on asset pricing and corporate settings. I benefited from discussions with Fulin Li.
READ MORE
Financial Markets in Monetary Policy
March 2022
Central banks already come equipped with the dual goal of price stability and financial stability. In this post, I explore existing literature that explores the role of financial stability considerations in monetary policy, above and beyond its traditional financial stability tools.
READ MORE
Fixing Identification with Fixed Effects
February 2022
With the broader availability of panel data, fixed effects (FE) regression models are becoming important and used widely for identifying causal effects. In this post, I discuss a few papers in which the usage of fixed effects is quite illuminating. I have benefited from discussion with Gurpal S. Sran.
READ MORE
Finance Questions for DeFi
January 2022
The developments in DeFi, or decentralized finance, are much quicker than accompanied advances in academic discourse. In this post, I organize some questions based on my preliminary readings that will help us keep up with the fast-changing landscape. I plan on updating this list as the landscape evolves.
READ MORE
Measurement Matters
December 2021
Much of academic discourse depends on a set of rigorously established “stylized facts.” Providing such facts rely on sound measurement, which is often harder than it seems. I discuss three recent examples that are worth noting.
READ MORE
Elon's Natural Experiment
November 2021
On November 6th, 2021, Elon Musk tweeted that he would sell 10% of his stake in Tesla following the outcome of a Twitter poll. In this post, I use this episode as a lens into theories of asset demand and their role for prices. I have benefited greatly from discussions with Aditya Chaudhry.
READ MORE
Replicating Portfolios
October 2021
A recent body of work extends the replicating portfolio approach to provide insights into valuation and measurement of key assets and entities of interest. In this post, I discuss some innovative examples that are worth noting.
READ MORE
Selection Bias in Finance
September 2021
In this post, I summarize some famous examples of selection bias in finance and economics. Hopefully they serve as a useful reminder that even when identification and estimation are sound, there are always lingering concerns about external validity.
READ MORE
Institutional Details and History for Finance PhDs
August 2021
In this post, I summarize key institutional details and historical episodes that come up consistently in seminars and job talks. For both empirical and theoretical research in finance, a solid understanding of these seems useful.
READ MORE
Skewness Strikes Back
July 2021
Skewness in the distribution of economic outcomes is underappreciated. In this post, I summarize some basic insights regarding skewness in three themes. I also describe why I think now is a particularly interesting time to focus on skewness.
READ MORE
Levels vs. Changes
May 2021
In many empirical models within finance, one needs to decide whether to use variables as their levels or their changes. In this post, I briefly go over reasons why one may chooses one versus the other.
READ MORE
Insurance Frauds Galore
March 2021
In this post, I take a quick look at a new database on insurance frauds and discuss potential research questions related to this topic.
READ MORE
Variations in SVARs
January 2021
In this post, I explore the variations in Structural VARs (SVARs) and their recent applications. This is mostly an amalgam of notes based on my readings of multiple lecture notes, papers, and documentations.
READ MORE
Programming in Stata vs. Python
December 2020
Recently, I've spent some time implementing a particular task in both Stata and in Python. Despite this very useful reference, I've had a lot of struggle getting the output in both platforms exactly identical. Here is a list of things to watch out for when you're puzzled by why the two sets of code yield different output.
READ MORE
Expectation Extraction
September 2020
Asset prices and portfolio holdings encode information about investor beliefs about the future and about investors' concerns for risk. A natural empirical exercise is to use the financial market data to extract such information. In this post, I briefly outline a few approaches that have emerged recently.
READ MORE
Khwaja-Mian (2008) Estimator
July 2020
In this post, I explain the Khwaja-Mian (2008) estimator, which is a technique used to control for credit demand shocks in order to identify credit supply shocks i.e. the "bank lending channel." Authors introduce time-variant firm fixed effects to fully capture the demand for credit by focusing on firms with multiple banking relationships. They actually do more than this, but subsequent papers citing this paper only refer to the inclusion of fixed effects.
Read More


Winning start for SA's Klaasen at ATP Finals
Cape Town - South African tennis star Raven Klaasen and his New Zealand doubles partner Michael Venus made a winning start at the ATP Finals in London on Sunday.
The fifth-seeded pairing beat fourth seeds Rajeev Ram (America) and Joe Salisbury (Great Britain) 6-3, 6-4 in 64 minutes, saving all four break points they faced.
It was Klaasen and Venus' second straight appearance at year-end finals and they improved to a 33-17 win-loss record in 2019.
The SA-Kiwi duo won ATP titles in Halle and Washington DC and also made the semi-finals at Wimbledon.
"We'll take that every day of the week," Klaasen told the ATP Tour's official website. "To be the first match of the Finals is a bit nerve-racking and to get off to a good start certainly puts our minds at ease for the rest of the tournament."
Klaasen and Venus are paired in Group Jonas Bjorkman and will face second seeds Lukasz Kubot (Poland) and Marcelo Melo (Brazil) and eighth seeds Ivan Dodig (Croatia) and Filip Polasek (Slovakia) later in the week.
Results on the first day of the ATP Finals at London's O2 Arena on Sunday (x denotes seeding):
Singles
Group Bjorn Borg
Novak Djokovic (SRB x2) bt Matteo Berrettini (ITA x8) 6-2, 6-1
Dominic Thiem (AUT x5) bt Roger Federer (SUI x3) 7-5, 7-5
Doubles
Group Jonas Bjorkman
Raven Klaasen/Michael Venus (RSA/NZL x5) bt Rajeev Ram/Joe Salisbury (USA/GBR x4) 6-3, 6-4
Lukasz Kubot/Marcelo Melo (POL/BRA x2) bt Ivan Dodig/Filip Polasek (CRO/SVK x8) 4-6, 6-4, 10-5
- Compiled by Herman Mostert


Softbank leads $140 million funding round for Brazil start-up VTEX
SAO PAULO (Reuters) - Softbank Group Corp said on Friday its Latin American fund is investing 580 million reais ($138 million) in e-commerce software provider VTEX, together with Brazilian funds Gavea Investimentos and Constellation Asset Management.
VTEX provides e-commerce support in Latin America for clients including cosmetics brand Boticario, cellphone maker Motorola and appliance maker Electrolux.
Its founder and CEO, Geraldo Thomaz, said in a statement that the proceeds will be used to expand research and development, including new artificial intelligence software for e-commerce.
The investment is the latest in a series of bets on Latin American technology startups from Argentina to Mexico by SoftBank’s $5 billion fund dedicated to the region.
In addition to the three new investors, Riverwood Capital, which first invested in VTEX in 2014, continues to be a shareholder, the companies said.


proprietary
`Prev `__
P
`Next `__
--------------
**proprietary**: adj.
1. In `*marketroid* <../M/marketroid.html>`__-speak, superior; implies a
product imbued with exclusive magic by the unmatched brilliance of the
company's own hardware or software designers.
2. In the language of hackers and users, inferior; implies a product not
conforming to open-systems standards, and thus one that puts the
customer at the mercy of a vendor able to gouge freely on service and
upgrade charges after the initial sale has locked the customer in. Often
used in the phrase “proprietary crap”.
3. Synonym for closed-source or non-free, e.g. software issued without
license rights permitting the public to independently review, develop
and redistribute it.
Proprietary software should be distinguished from commercial software.
It is possible for software to be commercial (that is, intended to make
a profit for the producers) without being proprietary. The reverse is
also possible, for example in binary-only freeware.
--------------
+----------------------------------+----------------------------+-----------------------------+
| `Prev `__ | `Up <../P.html>`__ | `Next `__ |
+----------------------------------+----------------------------+-----------------------------+
| propeller key | `Home <../index.html>`__ | protocol |
+----------------------------------+----------------------------+-----------------------------+


Vindinium is an Artificial Intelligence programming challenge. You have to take the control of a legendary hero using the programming language of your choice. You will fight with other AI for a predetermined number of turns and the hero with the greatest amount of gold will win. Here's a picture of a small map with the four players.
I'll talk about how most of it works on this page.
var Bot = require('bot');
var PF = require('pathfinding');
//var bot = new Bot('upicbbc6', 'training', 'http://vindinium.org'); //Put your bot's code here and change training to Arena when you want to fight others.
var bot = new Bot('3vkjvh9y', 'arena', 'http://<IP_ADDRESS>:9000'); //Put your bot's code here and change training to Arena when you want to fight others.
var goDir;
var Promise = require('bluebird');
Bot.prototype.botBrain = function() {
return new Promise(function(resolve, reject) {
_this = bot;
//////* Write your bot below Here *//////
//////* Set `myDir` in the direction you want to go and then bot.goDir is set to myDir at the bottom *////////
/* *
* This Code is global data! *
* */
// Set myDir to what you want and it will set bot.goDir to that direction at the end. Unless it is "none"
var myDir;
var myPos = [bot.yourBot.pos.x, bot.yourBot.pos.y];
var enemyBots = [];
if(bot.yourBot.id != 1) enemyBots.push(bot.bot1);
if(bot.yourBot.id != 2) enemyBots.push(bot.bot2);
if(bot.yourBot.id != 3) enemyBots.push(bot.bot3);
if(bot.yourBot.id != 4) enemyBots.push(bot.bot4);
//This makes my bot check if a mine is his or someone else's, if it's not his he'll take it.
var notMyMines = [];
notMyMines = notMyMines.concat(bot.freeMines);
if(bot.yourBot.id != 1) notMyMines=notMyMines.concat(bot.bot1mines);
if(bot.yourBot.id != 2) notMyMines=notMyMines.concat(bot.bot2mines);
if(bot.yourBot.id != 3) notMyMines=notMyMines.concat(bot.bot3mines);
if(bot.yourBot.id != 4) notMyMines=notMyMines.concat(bot.bot4mines);
// var openMine = [];
// openMine = openMine.concat(bot.noonesMine);
//if(bot.yourBot.id != 1) bot.freeMines=bot.freeMines.concat(bot.bot1mines);
// if(bot.yourBot.id != 2) openMine=openMine.concat(bot.bot2mines);
// if(bot.yourBot.id != 3) openMine=openMine.concat(bot.bot3mines);
//if(bot.yourBot.id != 4) openMine=openMine.concat(bot.bot4mines);
/* *
* This Code Decides WHAT to do *
* */
var task;
if(bot.yourBot.life < 40){
task = "Taverns"
}
else if(lowHealthCloseTarget()){
task = "murderlowesthealth"
}
else if(bot.freeMines >= 1){
task = "noonesMine"
}
else{
task = "getMines";
}
//This will make the bot scan for enemy bots within 12 blocks, then attack then if they're less than 40 health.
var targetIndex;
function lowHealthCloseTarget(){
for(i = 0; i < enemyBots.length; i++){
if(enemyBots[i].life < 50 && bot.findDistance(myPos, [enemyBots[i].pos.x, enemyBots[i].pos.y]) < 8 ){
targetIndex = i;
console.log("targetIndex in the function: " + targetIndex)
return true
}
}
return false
}
/* *
* This Code Determines HOW to do it *
* */
// This Code find the nearest tavern and sets myDir toward that direction //
if(task === "Taverns") {
var closestTavern = bot.taverns[0];
for(i = 0; i < bot.taverns.length; i++){
if(bot.findDistance(myPos,closestTavern) > bot.findDistance(myPos, bot.taverns[i])) {
closestTavern = bot.taverns[i]
}
}
console.log("Going to the Tavern!");
myDir = bot.findPath(myPos, closestTavern);
}
// This code is telling the bot to take other peoples mines //
if(task === "getMines") {
var closestMine = notMyMines[0];
for(i = 0; i < notMyMines.length; i++){
if(bot.findDistance(myPos, closestMine) > bot.findDistance(myPos, notMyMines[i])) {
closestMine = notMyMines[i];
}
}
console.log("Claiming a Free Mine!");
myDir = bot.findPath(myPos, closestMine);
console.log(myPos, closestMine, myDir);
}
// Calls upon the global variable targetIndex.
if(task === "murderlowesthealth"){
var lowestHealthindex = 0;
console.log("targetIndex: "+targetIndex)
myDir = bot.findPath(myPos, [enemyBots[targetIndex].pos.x, enemyBots[targetIndex].pos.y])
// ^ sends the bot after lower health bots
// Logs it so I can be sure it's working properly.
console.log("Killing my enemies! :D")
}
// Makes the bot go for mines no one has claimed
if(task === "noonesMine") {
var nearestMine = bot.freeMines[0];
for(i = 0; i bot.findDistance(myPos, bot.freeMines[i])) {
nearestMine = bot.freeMines[i];
console.log(myPos, nearestMine, myDir);
}
}
console.log("getting open mines! :D")
myDir = bot.findPath(myPos, nearestMine);
console.log(myPos, nearestMine, myDir);
}
/* *
* This Code Sets your direction based on myDir. If you are trying to go to a place that you can't reach, you move randomly. *
* Otherwise you move in the direction set by your code.  On this page I will break down what each part does.
var enemyBots = [];
if(bot.yourBot.id != 1) enemyBots.push(bot.bot1);
if(bot.yourBot.id != 2) enemyBots.push(bot.bot2);
if(bot.yourBot.id != 3) enemyBots.push(bot.bot3);
if(bot.yourBot.id != 4) enemyBots.push(bot.bot4);
This code checks for what bot I am, if bot.id 1 is taken, then it will push the ID down until it finds an open bot number.
var notMyMines = [];
notMyMines = notMyMines.concat(bot.freeMines);
if(bot.yourBot.id != 1) notMyMines=notMyMines.concat(bot.bot1mines);
if(bot.yourBot.id != 2) notMyMines=notMyMines.concat(bot.bot2mines);
if(bot.yourBot.id != 3) notMyMines=notMyMines.concat(bot.bot3mines);
if(bot.yourBot.id != 4) notMyMines=notMyMines.concat(bot.bot4mines);
this code checks for mines and what bot they belong to. If the code detects a mine that doesn't belong to it it puts it in the global variable "notMyMines."
if(task === "getMines") {
var closestMine = notMyMines[0];
for(i = 0; i < notMyMines.length; i++){
if(bot.findDistance(myPos, closestMine) > bot.findDistance(myPos, notMyMines[i])) {
closestMine = notMyMines[i];
}
}
My bot will find mines that don't belong to it and take them. It finds the nearest ones stored in the notMyMines variable and gets it.
if(bot.yourBot.life < 40){
task = "Taverns"
this says that if my bot's health is less than 40, its task is "Taverns."
if(task === "Taverns") {
var closestTavern = bot.taverns[0];
for(i = 0; i < bot.taverns.length; i++){
if(bot.findDistance(myPos,closestTavern) > bot.findDistance(myPos, bot.taverns[i])) {
closestTavern = bot.taverns[i]
}
}
This piece of code is only called upon if my bots health is less than 40, if it is then the piece of code above this will call upon the task "Taverns." When it does that the bot will drop what its doing and make its way to the nearest tavern.
else if(lowHealthCloseTarget()){
task = "murderlowesthealth"
This bit of code tells the bot to use the task "murderlowesthealth" if my bot has more than 40 health. It won't do the task if it has more than 40 health because of the else if statement, which means the bot will only call on the task if the other "Taverns" statement is false.
if(task === "murderlowesthealth"){
var lowestHealthindex = 0;
console.log("targetIndex: "+targetIndex)
myDir = bot.findPath(myPos, [enemyBots[targetIndex].pos.x, enemyBots[targetIndex].pos.y])
// ^ sends the bot after lower health bots
// Logs it so I can be sure it's working properly.
console.log("Killing my enemies! :D")
}
This chunk of code tells the whole code what the task "murderlowesthealth" is. This tells it that if a bot within 8 units of my own bot has less than 40 health, my bot will pathfind over to it and kill it. The console.log makes the code say "Murdering my enemies!" in the terminal when I run the program. This is so I can check if the code is working.
if(myDir === "none") {
console.log("I have no clue what I'm doing!");
var rand = Math.floor(Math.random() * 4);
var dirs = ["north", "south", "east", "west"];
bot.goDir = dirs[rand];
} else {
bot.goDir = myDir;
}
This piece of code is what my bot will do if it has nothing else to do. If my bot can't find a way to get to its objective or has nothing to do it will "go random." That means the bot will go in random directions and do random things until it has a task again. The console.log "I have no clue what I'm doing!" tells the code to say that in the terminal whenever I run the code so I can easily check when my bot goes random.


Table of Contents
- Biography
- Education
- Career
Bio
I was born in Texas, in 1988, but grew up in Kansas most of my life. I joined the military when I was 17, and went active duty at 19. Consequently, I lived in the Seattle area for several years. After I left, I went to Florida, just north of Orlando, to study theology, then England to study philosophy. My wife and I own a home in Florida and we have three wonderful daughters, with another child on the way soon.
I am the oldest child of two siblings, a brother and sister. Tragically, I lost my sister in February 2019, and flew home from the UK for the funeral. Further, I grew up most of my life without my father, who died when I was about 12. As a child I grew up poor, and had to earn everything I made. But this has worked to a benefit, being able to understand the value of a hard earned dollar, and creating a hard work ethic. Much of my time in my youth was spent reading, but still a healthy amount of playing out doors. In high school, my best friend was Levi, whom I am still in contact with today. During our time at school, we would spend a lot of time fooling around; turning on TV's with PDA's, setting up VNC servers at the schools, and various other things that got me into trouble a few times.
Things I still enjoy to this day, about 15 years later:
- books
- tech
- camping and outdoors
Education
As previously mentioned, I have a few degrees from a few locations. I received an honors degree in theology from a new and local Bible college located in Sanford, FL. This degree entailed history, theology, philosophy, Latin and literature, and that is it. That is, no math--to my great joy and pleasure. Upon graduating, I decided to study a degree in philosophy, a one year research degree under the tutelage of Sir Roger Scruton, at the University of Buckingham. This was great, since there was no homework or tests...just the reading and writing of my giant thesis. Of course, it was coupled with some beautiful seminars, food and even guest lecturers on various topics, all at the Reform Club. However, theology and philosophy are fields that, while fun to learn and study, tend to not pay well. And with that, we have a perfect segway to our next subject.
Work Expirience
I spent 5 years active duty, the better part of that as a bomb technician. This was a wonderful expirience and a great job. I deployed to Iraq, being in charge of over 2.5 million dollars worth of government equipment. However, I deployed in 2010, during the drawdown, and so I did not see nearly as much expirience--or horror--as those who deployed during the surge of 06-08. I had the pleasure of teaching the newer folks, and realized just how much I love teaching, all shortly before I ETS'd out. This lead to a few jobs, such as landscaping I did for a short season, before I was hired by Ligonier Ministries for customer service and donor relations. I stuck with Ligonier for 5 years, transitioning to a few different roles, eventually working the last year and half or so providing Live Chat support, interfacing with hundreds of customers. I know work as an independent web developer, and have a few clients I work with providing monthly maintenance and support. My long term goal is to either continue to grow my clientele, or find a programming job in Javascript, as a full-stack developer.
Favorite books
- Bavinck's Systematic Theology
- Orwell's 1984
- Card's Ender's Shadow
- Douma's Gordon Clark: Presbyterian Philosopher
- Jacques' Redwall
- Austen's Pride and Prejudice
- Scruton's Confessions of a Heretic
- Chesterton's What's wrong with the World
- Lewis' Four Loves
- Augustine's City of God
Bulleted Summary
- Born in 1988
- Born in Texas
- Have one brother
- Joined the military at 17
- Deployed to Iraq
- Graduated with honors
- Studied philosophy in London
- Lost a younger sister
- Born in 1988
- Married
- Expecting 4th child


MaxNumberOfBooleanOperatorsInCondition (FL0054)
Cause
A while/if/assert/match when
condition contains more than a configurable number of boolean operators, for example if maxItems
was set to 4 (the default value)
then the following condition would cause the error: if x && y || q || r && t && w then
Rationale
Can make the control flow become diffcult to understand.
How To Fix
Reduce the number of boolean operators in the while/if/assert/match when
condition, e.g. a simple way to fix the example in the "Cause" section you could name the expression:
1: 2: |
|
Rule Settings
1: 2: 3: 4: 5: 6: 7: 8: |
|
val catIsInBin : bool


Gourmet Buffet
Fine Dining & Gourmet Takeaway
View the Food Menu
Gourmet Buffet
97 Cranbrook Road
Ilford, Greater London, England, IG1 4PG
Phone<PHONE_NUMBER>2
Starter & Main Courses
- *1/4 Aromatic Duck with Salad & Pancake
- *1/2 Aromatic Duck with Salad & Pancake
- Sweet & Sour Chicken
- Chicken Curry
- Chicken & Breadcrumb
- Chicken In Black Bean Sauce
- Satay Chicken
- Chicken Balls
- Salt & Pepper Wings
- Chicken Wings in Honey Sauce
- Salt & Pepper Chicken Fillet
- Prawn & Chicken Fillet
- Prawn & Chicken Sesame Toast
- *Beef in Black Bean Sauce
- *Stir Fried Beef with Mushroom
- *King Prawn Ginger & Spring Onion
- *Salt & Pepper King Prawn
- *Salt & Pepper Squid
- *Mix Seafood in Black Bean Sauce
- *Salt & Pepper Mix Seafood
- *Sweet & Sour King Prawn
Sauces
- Curry Sauce (v)
- Sweet & Sour Sauce (v)
- Sweet Chilli Sauce (v)
- Chilli Oil
- Satay Sauce(v)(peanut)
- *Plum Sauce (v)
Rice & Noodle
- Plain Boiled Rice
- Egg Fried Rice
- Mix Vegetable Fried Rice (egg)(v)
- Chicken & Shrimp Fried Rice
- Singapore Fried Rice (egg)(v)
- *Mix Seafood Fried Rice
- King Prawn Fried Rice
- *Beef Fried Rice
- Mix Vegetable Chow Mein(v)
- Fried Soft Noodle(v)
- Singapore Vermicelli Noodle(egg)(v)
- *Chicken Chow Mein
- *Beef Chow Mein
- King Prawn Chow Mein
- Mix Seafood Chow Mein
- Pineapple Fried Rice(v)
Close
Vegetarian
- Fresh Salad
- Brocolli in Garlic Sauce
- Stir Fried Mushroom
- Seasonal Mix Vegetable
- Tofu in Hot Bean Sauce
- Deep Fried Chip
- Onion Rings
- Mini Spring Roll
- *Mix Vegetable in Black Bean Sauce
- *Sweet & Sour Mix Vegetable
- *Mix Vegetable Curry
- *Salt & Pepper Tofu
Soup
- Chicken Sweet Corn Soup
- Seafood Hot & Sour Soup
- Mix Vegetable Soup (v)
- Chicken & Mushroom Soup
Deserts
- Assorted Jellys
- Fruit Cocktails
- Strawberry Ice Cream
- Chocolate Ice Cream
- Vanilla Ice Cream
Drinks Menu
Gourmet Buffet
Fine Dining & Gourmet Takeaway
View the Drinks Menu
Gourmet Buffet
97 Cranbrook Road
Ilford, Greater London, England, IG1 4PG
Phone<PHONE_NUMBER>2
White Wines
- Gargonega Chardonnay
- Sauvignon Blanc
- Pinoi Grigio (Italy)
Red Wines
- Merlot
- Shiraz
Rose Wines
- Shiraz Rose Foundstone
Oriental Wines
- Sawanotsuro Soke
Champagne and Sparkling
- Tenute San Marco Prosecco
- Moet & Chandon Imperial Brut
Cocktails
- Pina Colada
- Long Island Ice Tea
- Sea Breeze
Non-Alcoholic Cocktails
- Sun Breeze
- Sun Rider
Bottled beers Alcohol Drinks
- Asahi
- Heineken
- Tiger
- Tsing Tao
- Becks
- Budweiser
- WKD Vodka Blue
- Corona Extra
- Peroni
Draught beer
- Cobra Draught Beer
- Carling
- Shandy
Vodka
- Absolute Vodka
- Smirnoff
Gin
- Pimms
Rum
- Bacardi
- Captain Morgan
- Malibu
- Sumbuca
- Jack Daniels
- Bells
- Jameson
- Famous Grouse
- Chivas Regal
- Courvosier
- Hennesy
- Baileys
- Tia Maria
- Archers
- Southern Comfort
- Campari
- Amaretto
Tequila
Whiskey
Cognac / Brandy
Liquor
Close
Mineral Water
- Bottle Still
- Bottle Sparkling
Soft Drinks
- Pepsi
- Diet Pepsi
- Fanta
- Lemonade
- Vimto
- Refill per person
- Ginger Beer
- Tonic Water
- Soda Water
- Bitter Lemon
- Ginger Ale
Fruit Juice
- Orange Juice
- Apple Juice
- Cranberry Juice
- Pineapple Juice
- Lychee Juice
- Mango Juice
- Mixed Juice
- J2o Orange & Passionfruit
- J2o Apple & Mango
Hot Drinks
- English Tea
- Hot Chocolate
- Coffee
- Chinese Tea (per person FREE refill)
- Jasmine Tea (per person FREE refill)
- Mango Juice
- Mixed Juice
- J2o Orange & Passionfruit
- J2o Apple & Mango


Raul, V., Leifsson, L., & Kaleita, A. (2021). System Modeling and Sensitivity Analysis of the Iowa Food-Water-Energy Nexus. Journal of Environmental Informatics Letters, 4(2), 73-79. https://doi.org/10.3808/jeil.202000044
Raul, V., Liu, Y., Leifsson, L., & Kaleita, A. (2021). Modeling the Contribution of Agriculture Towards Soil Nitrogen Surplus in Iowa. Submitted. International Conference on Computational Science, Poland.


R = Frames.from_T_inv(T_inv, w);
This function returns an orientation object R assembled from an inverse transformation matrix T_inv and a correspondent angular velocity vector w. Generally, the transformation matrix T_inv can be gained using a function from the TransformationMatrices package, e.g. using T_inv = inverseRotation(T). Note that the velocity vector w has to be calculated accordingly.
from_T, TransformationMatrices.from_T_inv, Quaternions.from_T_inv.
function from_T_inv extends Modelica.Icons.Function; input Real T_inv[3, 3] "Inverse transformation matrix to transform vector from frame 2 to frame 1 (v1=T_inv*v2)"; input Modelica.SIunits.AngularVelocity w[3] "Angular velocity from frame 1 with respect to frame 2, resolved in frame 1 (skew(w)=T_inv*der(transpose(T_inv)))"; output Orientation R "Orientation object to rotate frame 1 into frame 2"; end from_T_inv;


The goal of the MARC program is to increase the number of students who are traditionally underrepresented in STEM careers that emphasize biomedical research.
Students participating in the program must meet one of three eligibility requirements that are associated with having a background that is traditionally underrepresented among people with STEM careers.
In addition to coming from a background that is traditionally underrepresented in STEM, students must also meet the following additional requirements to be eligible for the WSU-MARC program.


Unit 5: Maximum Likelihood Estimation
In this set of notes, you will learn about the method of maximum likelihood to estimate model parameters.
Preparation
Before class you will need read the following:
- Section 3.1.2: Random Variables in Fox [Required Textbook]
- Myung, J. (2003). Tutorial on maximum likelihood estimation. Journal of Mathematical Psychology, 47, 90–100.
5.1 Dataset and Research Question
In this set of notes, we will not be using a specific dataset.
# Load libraries
library(broom)
library(dplyr)
library(ggplot2)
library(readr)
library(sm)
library(tidyr)
5.2 Joint Probability Density
In the previous set of notes, we discussed the probability density of an observation \(X_i\). Now we will extend this idea to the probability density of a set of observations, say \(x_1\), \(x_2\), AND \(x_k\). The probability density of a set of observations is referred to as the joint probability density, or simply joint density.
If we can make an assumption about INDEPENDENCE, then the joint probability density would be the product of the individual densities:
\[ p(x_1, x_2, x_3, \ldots, x_K) = p(x_1) \times p(x_2) \times p(x_3) \times \ldots \times p(x_k) \]
Say we had three independent observations from our \(\sim\mathcal{N}(50,10)\) distribution, namely \(x =\{60, 65, 67\}\). Then the joint density would be,
dnorm(x = 60, mean = 50, sd = 10) * dnorm(x = 65, mean = 50, sd = 10) * dnorm(x = 67, mean = 50, sd = 10)
[1] 0.000002947
We could also shortcut this computation,
prod(dnorm(x = c(60, 65, 67), mean = 50, sd = 10))
[1] 0.000002947
This value is the joint probability density. The joint probability density indicates the probability of observing the data (\(x =\{60, 65, 67\}\)) GIVEN (1) they are drawn from a normal distribution and (2) the normal distribution has a mean of 50 and a standard deviation of 10. In other words:
The joint probability density is the probability of the data given the distribution and parameters.
Symbolically,
\[ \mathrm{Joint~Density} = P(\mathrm{Data} \mid \mathrm{Distribution~and~Parameters}) \]
5.3 Likelihood
Likelihood is the probability of a particular set of parameters GIVEN (1) the data, and (2) the data are from a particular distribution (e.g., normal). Symbolically,
\[ \mathrm{Likelihood} = P(\mathrm{Parameters} \mid \mathrm{Distribution~and~Data}) \]
Likelihood takes the data as given and computes the probability of a set of parameters. Symbolically we denote likelihood with a scripted letter “L” (\(\mathcal{L}\)). For example, we might ask the question, given the observed data \(x = \{30, 20, 24, 27\}\) come from a normal distribution, what is the likelihood (probability) that the mean is 20 and the standard deviation is 4? We might denote this as,
\[ \mathcal{L}(\mu = 20, \sigma =4 \mid x) \]
Note that although we need to specify the distribution (e.g., normal), this is typically not included in the symbolic notation; instead it is typically included in the assumptions.
The likelihood allows us to answer probability questions about a set of parameters. For example, what is the likelihood (probability) that the data (\(x = \{30, 20, 24, 27\}\)) were generated from a normal distribution with a mean of 20 and standard deviation of 4? To compute the likelihood we compute the joint probability density of the data under that particular set of parameters.
prod(dnorm(x = c(30, 20, 24, 27), mean = 20, sd = 4))
[1] 0.0000005703
What is the likelihood (probability) that the data (\(x = \{30, 20, 24, 27\}\)) were generated from a normal distribution with a mean of 25 and standard deviation of 4?
prod(dnorm(x = c(30, 20, 24, 27), mean = 25, sd = 4))
[1] 0.00001774
It is important to note that although we use the joint probability under a set of parameters to compute the likelihood of those parameters, theoretically joint density and likelihood are very different. Likelihood refers to the probability of the parameters and joint probability density refers to the probability of the data.
5.4 Maximum Likelihood
Which set of parameters,\(\mathcal{N}(20,4)\) or \(\mathcal{N}(25,4)\), was more likely to generate the given data? Since the second set of parameters produced a higher likelihood, the data was more likely to have been generated from the \(\mathcal{N}(25,4)\) distribution that the \(\mathcal{N}(20,4)\) distribution.
So now we come to the crux of Maximum Likelihood Estimation (MLE). The goal of MLE is to find a set of parameters that MAXIMIZES the likelihood given the data and a distribution. For example, given the observed data \(x = \{30, 20, 24, 27\}\) were generated from a normal distribution, what are the values for the parameters of this distribution (mean and standard deviation) that produce the HIGHEST (or maximum) value of the likelihood?
Below, we will examine a couple different methods for determining the parameter values that produce the maximum value of the likelihood.
5.4.1 Method 1: Grid Search
One method for finding the parameters (in our example, the mean and standard deviation) that produce the maximum likelihood, is to substitute several parameter values in the dnorm()
function, compute the likelihood for each set of parameters, and determine which set produces the highest (maximum) likelihood.
In computer science, this method for finding the MLE is referred to as a grid search. Below is some syntax to carry out a grid search. The syntax creates several sets of parameter values (called the search space), computes the likelihood for each combination of parameter values, and then arranges the likelihoods in descending order.
crossing(
mu = seq(from = 10, to = 30, by = 0.1),
sigma = seq(from = 0, to = 10, by = 0.1)
) %>%
rowwise() %>%
mutate(
L = prod(dnorm(c(30, 20, 24, 27), mean = mu, sd = sigma))
) %>%
arrange(desc(L))
Source: local data frame [20,301 x 3]
Groups: <by row>
# A tibble: 20,301 x 3
mu sigma L
<dbl> <dbl> <dbl>
1 25.2 3.7 0.0000183
2 25.3 3.7 0.0000183
3 25.3 3.8 0.0000182
4 25.2 3.8 0.0000182
5 25.4 3.7 0.0000182
6 25.1 3.7 0.0000182
7 25.2 3.6 0.0000182
8 25.3 3.6 0.0000182
9 25.1 3.8 0.0000182
10 25.4 3.8 0.0000182
# … with 20,291 more rows
The parameters that maximize the likelihood (in our search space) are a mean of 25.2 and a standard deviation of 3.7.
5.4.2 Log-Likelihood
The likelihood values are quite small since we are multiplying several probabilities together. We could take the natural logarithm of the likelihood to alleviate this issue. So in our example, \(\mathcal{L} = .00001829129\) and the log-likelihood would be
log(.00001829129)
[1] -10.91
We typically denote log-likelihood using a scripted lower-case “l” (\(\mathcal{l}\)). Going back to how we compute the likelihood, we assumed a set of parameters and then found the joint probability density, which assuming normality and independence is the product of the individual densities.
\[ \mathcal{L}(\mathrm{parameters} | \mathrm{data}) = p(x_1) \times p(x_2) \times \ldots \times p(x_n) \]
If we compute the log of the likelihood instead:
\[ \mathcal{l}(\mathrm{parameters} | \mathrm{data}) = \ln \Bigl(\mathcal{L}(\mathrm{parameters} | \mathrm{data})\Bigr) = \ln \Bigl(p(x_1) \times p(x_2) \times \ldots \times p(x_n)\Bigr) \]
Using the rules of logarithms, the right-hand side of the equation can be manipulated to:
\[ = \ln \Bigl(p(x_1)\Bigr) + \ln \Bigl(p(x_2)\Bigr) + \ldots + \ln \Bigl(p(x_n)\Bigr) \]
The log-likelihood is the sum of the log-transformed densities. This means we could re-write our grid search syntax to compute the log-likelihood. Since finding the log of the densities is so useful, there is even an argument in dnorm()
of log=TRUE
that does this for us. Our revised grid search syntax is:
crossing(
mu = seq(from = 10, to =30, by = 0.1),
sigma = seq(from = 0, to = 10, by = 0.1)
) %>%
rowwise() %>%
mutate(
log_L = sum(dnorm(c(30, 20, 24, 27), mean = mu, sd = sigma, log = TRUE))
) %>%
arrange(desc(log_L))
Source: local data frame [20,301 x 3]
Groups: <by row>
# A tibble: 20,301 x 3
mu sigma log_L
<dbl> <dbl> <dbl>
1 25.2 3.7 -10.9
2 25.3 3.7 -10.9
3 25.3 3.8 -10.9
4 25.2 3.8 -10.9
5 25.1 3.7 -10.9
6 25.4 3.7 -10.9
7 25.3 3.6 -10.9
8 25.2 3.6 -10.9
9 25.1 3.8 -10.9
10 25.4 3.8 -10.9
# … with 20,291 more rows
Maximizing the log-likelihood gives the same parameter values as maximizing the likelihood. Remember that the log computation keeps the same ordination of values as the original data, so maximizing the log-likelihood is the same as maximizing the likelihood.
5.5 Maximum Likelihood Estimation for Regression
In model fitting, the components we care about are the residuals. Those are the things we put distributional assumptions on (e.g., normality, homogeneity of variance, independence). Our goal in regression is to estimate a set of parameters (\(\beta_0\), \(\beta_1\)) that maximize the likelihood for a given set of residuals that come from a normal distribution.
To understand this, let’s use a toy example of \(n=10\) observations.
x y
1 4 53
2 0 56
3 3 37
4 4 55
5 7 50
6 0 36
7 0 22
8 3 75
9 0 37
10 2 42
To begin, we can enter these observations into two vectors, \(x\) and \(y\).
# Enter data into vectors
x = c(4, 0, 3, 4, 7, 0, 0, 3, 0, 2)
y = c(53, 56, 37, 55, 50, 36, 22, 75, 37, 42)
Next, we will write a function to compute the log-likelihood (or likelihood) of the residuals given particular b0
and b1
estimates that will be inputted to the function.
One issue is that in using the dnorm()
function we need to specify the mean and standard deviation. The regression assumptions help with this task. The conditional mean residual value is 0. So we will set the mean value to 0. The assumption about the standard deviation is that the conditional distributions all have the same SD, but it doesn’t specify what that is. However, the SD of the errors seems like a reasonable value, so let’s use that.
Below, we will write a function called log_likelihood()
that takes two arguments as input, b0=
and b1=
, and outputs the log-likelihood.
log_likelihood = function(b0, b1){
# Use the following x and y values
x = c(4, 0, 3, 4, 7, 0, 0, 3, 0, 2)
y = c(53, 56, 37, 55, 50, 36, 22, 75, 37, 42)
# Compute the yhat and residuals based on the two input values
yhats = b0 + b1*x
errors = y - yhats
# Compute the sd of the residuals
sigma = sd(errors)
# Compute the log-likelihood
log_lik = sum(dnorm(errors, mean = 0, sd = sigma, log = TRUE))
# Output the log-likelihood
return(log_lik)
}
Now we read in our function by highlighting the whole thing and running it. Once it has been read in, we can use it just like any other function. For example to find the log-likelihood for the parameters \(\beta_0=10\) and \(\beta_1=3\) we use:
log_likelihood(b0 = 10, b1 = 3)
[1] -64.29
We can also use our function in a grid search.
crossing(
b0 = seq(from = 30, to = 50, by = 0.1),
b1 = seq(from = -5, to = 5, by = 0.1)
) %>%
rowwise() %>%
mutate(
log_L = log_likelihood(b0 = b0, b1 = b1)
) %>%
arrange(desc(log_L))
Source: local data frame [20,301 x 3]
Groups: <by row>
# A tibble: 20,301 x 3
b0 b1 log_L
<dbl> <dbl> <dbl>
1 40.1 2.7 -39.5
2 40 2.7 -39.5
3 40.2 2.7 -39.5
4 39.9 2.8 -39.5
5 39.8 2.8 -39.5
6 40 2.8 -39.5
7 39.9 2.7 -39.5
8 39.7 2.8 -39.5
9 40.3 2.7 -39.5
10 40.1 2.8 -39.5
# … with 20,291 more rows
Here the parameter values that maximize the likelihood are \(\beta_0 = 40.1\) and \(\beta_1=2.7\). We can also compute what the standard deviation for the residual distributions was using the estimated parameter values. Remember, this value is an estimate of the RMSE.
errors = y - 40.1 - 2.7*x
sd(errors)
[1] 13.19
In practice, there are a couple subtle differences, namely that the estimate for the SD value we use in dnorm()
is slightly different. This generally does not have an effect on the coefficient estimates, but does impact the estimate of the RMSE. We will talk more about this when we talk about Restricted Maximum Likelihood Estimation (REML).
5.5.1 Large Search Spaces
So far, we have been using a very finite search space that has been defined for us. For example, we limited the search space to 20,301 combinations of \(\beta_0\) and \(\beta_1\).
nrow(
crossing(
b0 = seq(from = 30, to = 50, by = 0.1),
b1 = seq(from = -5, to = 5, by = 0.1)
)
)
[1] 20301
This allowed us to find the coefficient estimates to the nearest tenth. If we instead needed to find the estimates to the nearest hundredth, we would need to expand the number of combinations:
nrow(
crossing(
b0 = seq(from = 30, to = 50, by = 0.01),
b1 = seq(from = -5, to = 5, by = 0.01)
)
)
[1] 2003001
This leads to a search space of 2,003,001 parameter combinations. If we need them to the nearest thousandth, the search space is 200,030,001 combinations.
Furthermore, in practice you would not have any idea which values of \(\beta_0\) and \(\beta_1\) to limit the search space to. Essentially you would need to search an infinite number of values unless you could limit the search space in some way. For many common methods (e.g., linear regression) finding the ML estimates is mathematically pretty easy (if we know calculus; see the section Way, Way, Way too Much Mathematics). For more complex methods (e.g., mixed-effect models) there is not a mathematical solution. Instead, mathematics is used to help limit the search space and then a grid search is used to hone in on the estimates.
5.6 ML Estimation in Regression Using R
Recall that the lm()
function uses Ordinary Least Squares (OLS) estimation—it finds the coefficient estimates and RMSE that minimize the sum of squared residuals.
lm.1 = lm(y ~ 1 + x)
# Get coefficient estimates
tidy(lm.1)
# A tibble: 2 x 5
term estimate std.error statistic p.value
<chr> <dbl> <dbl> <dbl> <dbl>
1 (Intercept) 40.0 6.34 6.31 0.000231
2 x 2.74 1.98 1.38 0.203
# Get estimate for RMSE
glance(lm.1)
# A tibble: 1 x 11
r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
<dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.193 0.0926 14.0 1.92 0.203 2 -39.5 84.9 85.8
# … with 2 more variables: deviance <dbl>, df.residual <int>
Under OLS estimation:
- \(\hat\beta_0 = 40.01\)
- \(\hat\beta_1 = 2.74\)
- \(\hat\sigma_\epsilon = 13.99\)
To compute ML estimates of the coefficients we will use the mle2()
function from the bbmle package. To use the mle2()
function, we need to provide a user-written function that returns the negative log-likelihood given a set of parameter inputs.
For simple regression, recall that we need to estimate three parameters: \(\beta_0\), \(\beta_1\), and \(\sigma_{\epsilon}\) (RMSE). Below we have a function that inputs values for each of the three parameters, uses the inputted coefficient values to compute the residuals given the data, and returns the negative log-likelihood value assuming normality, independence, and homoscedasticity.
regress.ll = function(b0, b1, rmse) {
# Use the following x and y values
x = c(4, 0, 3, 4, 7, 0, 0, 3, 0, 2)
y = c(53, 56, 37, 55, 50, 36, 22, 75, 37, 42)
# Compute yhats and residuals
yhats = b0 + b1 * x
errors = y - yhats
# Compute the negative log-likelihood
neg_log_L = -sum(dnorm(errors, mean = 0, sd = rmse, log = TRUE))
return(neg_log_L)
}
Now we can implement the mle2()
function. This function requires the argument, minuslogl=
, which takes the user written function returning the negative log-likelihood. It also requires a list of starting values for the input parameters in the user-written function. (Here we give values close to the OLS estimates as starting values.)
# Fit model using ML
library(bbmle)
mle.results = mle2(minuslogl = regress.ll, start = list(b0 = 40.0, b1 = 2.7, rmse = 13.98))
# View results
summary(mle.results)
Maximum likelihood estimation
Call:
mle2(minuslogl = regress.ll, start = list(b0 = 40, b1 = 2.7,
rmse = 13.98))
Coefficients:
Estimate Std. Error z value Pr(z)
b0 40.01 5.67 7.05 1.7e-12 ***
b1 2.74 1.77 1.55 0.12
rmse 12.51 2.80 4.47 7.7e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
-2 log L: 78.91
Under ML estimation:
- \(\hat\beta_0 = 40.01\)
- \(\hat\beta_1 = 2.74\)
- \(\hat\sigma_\epsilon = 12.51\)
Comparing the coefficient estimates (\(\hat\beta_0\) and \(\hat\beta_1\)) between the two methods of estimation, we find they are quite similar. The estimate of \(\sigma_{\epsilon}\) is different between the two estimation methods (although they are somewhat close in value).
Why do the estimates of the RMSE differ depending on the method of estimation? This is because the two methods use different formulas for computing RMSE. In OLS estimation, recall that the estimate of \(\hat\sigma_\epsilon\) was:
\[ \hat\sigma_{\epsilon}=\frac{\left(Y_i - \hat{Y}_i\right)^2}{n-2}, \]
For ML estimation, the estimate for \(\hat\sigma_\epsilon\) is:
\[ \hat\sigma_{\epsilon}=\frac{\left(Y_i - \hat{Y}_i\right)^2}{n}, \]
The smaller denominator in OLS results in a higher estimate of the variation. This, in turn, affects the size of the SE estimates for the coefficients (and thus the \(t\)- and \(p\)-values). When \(n\) is large, the differences in the estimates of \(\hat\sigma_\epsilon\) are minimal and can safely be ignored.
Lastly, we note that the value of \(-2\)(log-likelihood) is the same for both the ML and OLS estimated models. This is a useful result. It allows us to use lm()
to estimate the coefficients from a model and then use its log-likelihood as if we had fitted the model using ML.
5.6.1 Using R to Directly Compute the Likelihood and Log-Likelihood
We can use R to directly compute the log-likelihood after we fit a model using the lm()
function. To do this, we use the logLik()
function.
lm.1 = lm(y ~ 1 + x)
logLik(lm.1)
'log Lik.' -39.45 (df=3)
To compute the likelihood, we can use the exp()
function to back-transform the log-likelihood to the likelihood (although generally we will work with the log-likelihood).
exp(-39.45442)
[1] 7.331e-18
5.7 Way, Way, Way too Much Mathematics
A second, more convenient method to determine the ML estimates of the regression parameters is to use mathematics; specifically calculus. Remember, we can express the likelihood of the regression residuals mathematically as:
\[ \mathcal{L}(\beta_0, \beta_1 | \mathrm{data}) = p(\epsilon_1) \times p(\epsilon_2) \times \ldots \times p(\epsilon_n) \]
where the probability density of each residual (assuming normality) is:
\[ p(\epsilon_i) = \frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{(\epsilon_i-\mu)^2}{2\sigma^2}\right] \]
In addition to normality, which gives us the equation to compute the PDF for each residual, the regression assumptions also specify that each conditional error distribution has a mean of 0 and some variance (that is the same for all conditional error distributions). We can call it \(\sigma^2_{\epsilon}\). Substituting these values into the density function, we get,
\[ \begin{split} p(\epsilon_i) &= \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}}\exp\left[-\frac{(\epsilon_i-0)^2}{2\sigma^2_{\epsilon}}\right] \\[1em] &= \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}}\exp\left[-\frac{(\epsilon_i)^2}{2\sigma^2_{\epsilon}}\right] \end{split} \]
Now we use this expression for each of the \(p(\epsilon_i)\) values in the likelihood computation.
\[ \begin{split} \mathcal{L}(\beta_0, \beta_1 | \mathrm{data}) &= p(\epsilon_1) \times p(\epsilon_2) \times \ldots \times p(\epsilon_n) \\[1em] &= \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}}\exp\left[-\frac{\epsilon_1 ^2}{2\sigma^2_{\epsilon}}\right] \times \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}}\exp\left[-\frac{\epsilon_2^2}{2\sigma^2_{\epsilon}}\right] \times \ldots \times \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}}\exp\left[-\frac{\epsilon_n^2}{2\sigma^2_{\epsilon}}\right] \end{split} \]
We can simplify this:
\[ \begin{split} \mathcal{L}(\beta_0, \beta_1 | \mathrm{data}) &=\left[ \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}} \right]^n \times \exp\left[-\frac{\epsilon_1^2}{2\sigma^2_{\epsilon}}\right] \times \exp\left[-\frac{\epsilon_2^2}{2\sigma^2_{\epsilon}}\right] \times \ldots \times \exp\left[-\frac{\epsilon_n^2}{2\sigma^2_{\epsilon}}\right] \end{split} \]
Now we will take the natural logarithm of both sides of the expression:
\[ \begin{split} \ln \Bigl(\mathcal{L}(\beta_0, \beta_1 | \mathrm{data})\Bigr) &= \ln \Biggl( \left[ \frac{1}{\sigma_{\epsilon}\sqrt{2\pi}} \right]^n \times \exp\left[-\frac{\epsilon_1^2}{2\sigma^2_{\epsilon}}\right] \times \exp\left[-\frac{\epsilon_2^2}{2\sigma^2_{\epsilon}}\right] \times \ldots \times \exp\left[-\frac{\epsilon_n^2}{2\sigma^2_{\epsilon}}\right] \Biggr) \\ \end{split} \]
Using our rules for logarithms and re-arranging gives,
\[ \mathcal{l}(\beta_0, \beta_1 | \mathrm{data}) = -\frac{n}{2} \times \ln (2\pi\sigma^2_{\epsilon}) - \frac{1}{2\sigma^2_{\epsilon}} \times \sum \epsilon_i^2 \]
Examining this equation, we see that the log-likelihood is a function of \(n\), \(\sigma^2_{\epsilon}\) and the sum of squared residuals (SSE). The observed data define \(n\) (the sample size) and the other two components come from the residuals which are a function of the parameters and the data.
Once we have this function, calculus can be used to find the analytic maximum. Typically before we do this, we replace \(\epsilon_i\) with \(Y_i - \hat\beta_0 - \hat\beta_1(X_i)\); writing the residuals as a function of the parameters (which we are solving for) and the data.
\[ \mathcal{l}(\beta_0, \beta_1 | \mathrm{data}) = -\frac{n}{2} \times \ln (2\pi\sigma^2_{\epsilon}) - \frac{1}{2\sigma^2_{\epsilon}} \times \sum \bigg(Y_i - \hat\beta_0 - \hat\beta_1(X_i)\bigg)^2 \]
To find the analytic maximum, we compute the partial derivatives with respect to \(\hat\beta_0\) and \(\hat\beta_1\), and set these equal to zero. This gives us a system of two equations with two unknowns (\(\hat\beta_0\) and \(\hat\beta_1\)). We can then solve this set of equations to obtain each of the parameter estimates. Then, based on these values, we can compute the estimate for the RMSE.


{% extends "layout.html" %}
{% block title %}
Trading History
{% endblock %}
{% block main %}
Trading History
Buys
| Stock Name |
Symbol |
Shares Purchased |
Purchase Date |
Value of Purchase ($) |
{% for buy in buys %}
| {{ buy.stockName }} |
{{ buy.symbol }} |
{{ buy.sharesPurchased }} |
{{ buy.purchaseDate }} |
${{ "{:.2f}".format(buy.valuePurchase|float) }} |
{% endfor %}
Sells
| Stock Name |
Symbol |
Shares Sold |
Date of Sale |
Value of Sale ($) |
Profit/Loss ($) |
{% for sell in sells %}
| {{ sell.stockName }} |
{{ sell.symbol }} |
{{ sell.sharesSold }} |
{{ sell.soldDate }} |
${{ "{:.2f}".format(sell.valueSold|float) }} |
${{ sell.profitLoss }} |
{% endfor %}
{% endblock %}


public static class HeatmapTileProvider.Builder
extends java.lang.Object
| Constructor and Description |
|---|
Builder()
Constructor for builder.
|
| Modifier and Type | Method and Description |
|---|---|
HeatmapTileProvider |
build()
Call when all desired options have been set.
|
HeatmapTileProvider.Builder |
data(java.util.Collection<LatLng> val)
Setter for data in builder.
|
HeatmapTileProvider.Builder |
gradient(Gradient val)
Setter for gradient in builder
|
HeatmapTileProvider.Builder |
opacity(double val)
Setter for opacity in builder
|
HeatmapTileProvider.Builder |
radius(int val)
Setter for radius in builder
|
HeatmapTileProvider.Builder |
weightedData(java.util.Collection<WeightedLatLng> val)
Setter for data in builder.
|
public Builder()
public HeatmapTileProvider build()
public HeatmapTileProvider.Builder data(java.util.Collection<LatLng> val)
val
- Collection of LatLngs to put into quadtree.
Should be non-empty.public HeatmapTileProvider.Builder gradient(Gradient val)
val
- Gradient to color heatmap with.public HeatmapTileProvider.Builder opacity(double val)
val
- Opacity of the entire heatmap in range [0, 1]public HeatmapTileProvider.Builder radius(int val)
val
- Radius of convolution to use, in terms of pixels.
Must be within minimum and maximum values of 10 to 50 inclusive.public HeatmapTileProvider.Builder weightedData(java.util.Collection<WeightedLatLng> val)
val
- Collection of WeightedLatLngs to put into quadtree.
Should be non-empty.


Class: Kanri::RoleDSL Private
- Inherits:
-
Object
- Object
- Kanri::RoleDSL
- Defined in:
- lib/kanri/kanri.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
DSL for defining roles
Class Method Summary collapse
-
.convert(dsl, target) ⇒ void
private
Copies instance variables from the
dsl
to thetarget
.
Instance Method Summary collapse
-
#can(*actions, target) {|user, target| ... } ⇒ void
Adds a permission to the role.
-
#detect {|user, target| ... } ⇒ void
Sets the block used to determine members of the role.
-
#initialize(&actions) ⇒ RoleDSL
constructor
private
A new instance of RoleDSL.
Constructor Details
#initialize(&actions) ⇒ RoleDSL
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of RoleDSL
193 194 195 196 197 |
# File 'lib/kanri/kanri.rb', line 193 def initialize(&actions) @permissions = Hash.new { |h, k| h[k] = [] } @detect = proc { true } instance_eval(&actions) end |
Class Method Details
.convert(dsl, target) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Copies instance variables from the dsl
to the
target
184 185 186 187 188 189 |
# File 'lib/kanri/kanri.rb', line 184 def convert(dsl, target) dsl.instance_variables.each do |var| val = dsl.instance_variable_get var target.instance_variable_set var, val end end |
Instance Method Details
#can(*actions, target) {|user, target| ... } ⇒ void
This method returns an undefined value.
Adds a permission to the role.
219 220 221 222 |
# File 'lib/kanri/kanri.rb', line 219 def can(*actions, target, &condition) perm = Permissions.new(*actions, &condition) @permissions[target].push perm end |
#detect {|user, target| ... } ⇒ void
This method returns an undefined value.
Sets the block used to determine members of the role.
205 206 207 |
# File 'lib/kanri/kanri.rb', line 205 def detect(&condition) @detect = condition end |


These restaurants are honoring vets and active duty by offering a free meal on Veterans Day
by Justin BoggsAs a thank you to veterans and active duty of the U.S. armed forces, dozens of restaurants are offering free meals on Monday, Nov. 11 for Veterans Day. Check out our list below of different offers. Beverages and gratuity are not included, unless noted.
Offers are good for Monday only unless noted. Offers are at participating locations only, and most offers require proof of service
Applebee’s: Veterans and active duty can receive a free dine-in entrée off of Applebee’s special menu. Items include the Bacon Cheeseburger and Fiesta Lime Chicken. Since 2008, Applebee’s has served 9.8 million free meals on Veterans Day. The offer is dine-in only.
California Pizza Kitchen: With proof of service, veterans and active duty are able to select from a limited menu, which includes six pizzas, four full-size salads or three pasta dishes. The offer is dine-in only.
Chili’s: With proof of service, veterans and active duty can enjoy a free entrée from a menu of seven entrees, including the Just Bacon Burger and Chicken Crispers. The offer is dine-in only.
Cracker Barrel: Veterans can enjoy a free double chocolate fudge Coca-Cola cake or a pumpkin pie latte.
Golden Corral: The buffet joint is offering current and active duty military and reservists a free meal at the buffet.
Little Caesars: The pizza joint will offer its typical $5 lunch of four slices and a 20-ounce beverage for free to veterans and active military from 11 a.m. to 2 p.m. Monday.
Logan’s Roadhouse: Logan’s Roadhouse is offering a free entrée to vets and active duty from 3 to 6 p.m. on Monday from its American Roadhouse menu, which features 10 entrees. The offer is dine-in only.
McCormick & Schmick's: The steak and seafood joint is offering free entrees for veterans and gold star honorees (parents and spouse) on Sunday. The restaurant has 10 free entrees available for veterans. The offer is dine-in only.
Red Lobster: Red Lobster is offering a free appetizer or dessert with proof of service. Veterans and active duty can choose from seven appetizers or five desserts.
Red Robin: This burger joint is offering veterans and active duty a free Red’s Tavern Double Burger and bottomless fries all day Monday. The offer is dine-in only.
Check back for more updates as restaurants release their specials for Veterans Day.


Status of Indonesia Multi-sectoral Response Plan
Partners’ Response Overview
The Multi Sectoral Response Plan aims at complementing the efforts of the Government of Indonesia in addressing the direct and indirect impact of the COVID-19 crisis.
To get a comprehensive analysis on the socio-economic impact of community protection programmes, a series of survey are being conducted:
Partners’ COVID-19 response
Vulnerabilities
BAPPENAS has estimated that the unemployment rate in Indonesia will increase by 4 million to 5.5 million people in 2020 (8.1-9.2 percent), and in 2021 by 10.7 million up to 12.7 million people (for a 7.7 to 9.1 percent rate).
In March 2020, BPS (Statistics Indonesia) indicated that the country’s poverty increased by 0.37% compared to last year’s figure, meaning that there are 1.28 million Indonesians that fell into poverty. In rural area, the poverty increases from 12.62% to 12.82%, while in urban area it increased from 6.56% to 7.38%. The trend is expected to increase.
Remittances of Indonesian migrant workers dropped by 10% between the first quarter of 2020 compared to the fourth quarter of 2019. Updated estimates indicate that total remittance receipts for the year will decrease by at least 13% due to reduced opportunities for Indonesian migrant workers to go and maintain their livelihoods abroad.
Partners’ COVID-19 response
Activities
UNDP is mapping the capacity gap in seven provinces on crisis response coordination. The results will trigger the provision of technical personnel and other resources to strengthen cross-sectoral coordination capacity. These activities are conducted between April to July 2020.
UNDP supported the Ministry of Administrative and Bureaucracy Reform to improve its citizen reporting platform, LAPOR! allowing it to support COVID19 awareness and reporting. Currently, UNDP supports the adjustment of the program operation, and development of a framework for synergizing the reporting system between the regional and National Government.
UNDP is supporting big data analysis mechanisms in accordance with the data privacy code of conduct and international standards for ethical use of data. It identifies digital solutions that can help collect and share information, provide telecommunications services and essential public services e.g. telemedicine. These efforts, conducted in May – July, will enable effective response interventions.
Partners’ COVID-19 response
Cont. Activities
To get a comprehensive analysis of the socio-economic impact for the community protection programme, a series of surveys are being conducted:
Partners’ COVID-19 response
Cont. Activities
UNDP, WHO, ILO, and OCHA are working with other clusters to advocate and synchronize the "new normal" guidelines for the private sector:
Partners’ COVID-19 response
Cont. Activities
UNDP and UNICEF are supporting the Ministry of Villages (MoV) and MoSA on data synchronization mechanism for cash assistance schemes provided by both ministries.
UNDP is supporting MoV for the formulation of a monitoring system for the distribution of village funds for labor-intensive activities as part of social protection to strengthen community economic security.
UNDP is supporting MoV to strengthen its socio-economic response to COVID-19 at the subnational level thru an area-based integrated response using a social platform approach. The platform interconnects a wide-range of local stakeholders and initiatives to work on a systematic and comprehensive response to COVID-19.
Wahana Visi Indonesia is supporting 2,557 households through cash and voucher assistance for livelihoods.
UNDP, through its Youth Co Lab, and in partnership with UNICEF's U-Report conducted a survey among 756 young entrepreneurs to identify the challenges and most needed support from all across Indonesia with a majority of respondents coming from West Java, Central Java, East Java, North Sumatera and working in the service, F&B, and retail sector. From the survey results, 79% of youth entrepreneurs reported that COVID-19 brough negative impact to their business where 21% of youth entrepreneurs had to close their business
CARE Indonesia implements four cash-for-work and voucher assistance interventions; 1. for 100 laid-off female garment workers in Sukabumi and Purwakarta Districts of West Java, 2. the Multi-Purpose Cash Assistance for 200 women in the same locations, 3. Cash for Labour Intensive benefitting 160 people in NTT, and 4. Cash Assistance that will target 2,971 low-income households with pregnant and lactating mothers, children under 5 years, person with disability and elderly, in Serang District of Banten and Bone District of South Sulawesi.
Partners’ COVID-19 response
Cont. Activities
Oxfam will start a cash transfer programme in Banten and Bogor in West Java Province, targeting 2,300 beneficiaries, working with the Red Cross Indonesia and PT Pos Indonesia. Main target group is the communities affected by flash floods in early 2020.
UNICEF is providing ongoing support to the government in developing guidelines for increasing coverage and benefits of unconditional cash transfers of a poverty-focused child grant program during COVID-19. UNICEF also provided support on the design of a modified mechanism for a locally controlled ‘village fund’ that has so far benefitted 6.5 million of poor families not currently accessing national social protection programmes. Finally, UNICEF is working with the Ministry of Finance and the National Bureau of Statistics with INDOMOD projections to simulate the impact of government spending on social protection through COVID-19 safety net programmes, and to identify priority programs for children for secured financing in the 2021 Annual Budget.
UNFPA is facilitating a situation analysis on the impact of large scale social distancing measures on the experiences of youth during the COVID-19 pandemic under the leadership of the Coordinating Minister for Human Development and Cultural Affairs (Kemenko PMK), MoH’s Family Health Directorate, the report will be available in September.
UNIDO Indonesia is conducting an online survey on the socio-economic impact of SMEs. Initial findings highlight industrial sector operating at under-capacity and supply chains disrupted, thereby limiting cash flow for the concerned SMEs in the sector.
Partners’ Response Overview
Gaps and Constraints
The Government launched the National Economic Recovery Program (PEN – Pemulihan Ekonomi Nasional) on 11 May. This program includes the fiscal stimuli distributed since the end of February. Currently the program has a total budget of IDR 695 trillion; however, its implementation is challenged by various obstacles that require solution support.
Further augmenting government capacities to support the safe return and stabilization of Indonesian migrant workers – including seafarers and fishers – cut off from their economic livelihoods, including addressing protection needs and strengthening recovery prospects.


The LocalTime
type supports the following patterns:
The following standard patterns are supported:
t
: Short format pattern.
This is the short time pattern as defined by the culture's DateTimeFormatInfo.ShortTimePattern
For example, in the invariant culture this is "HH:mm".
T
: Long format pattern.
This is the long time pattern as defined by the culture's DateTimeFormatInfo.LongTimePattern
For example, in the invariant culture this is "HH:mm:ss".
r
: Round-trip pattern.
This always uses a pattern of "HH:mm:ss.FFFFFFF", but with the culture-specific time separator.
The following custom offset pattern characters are supported for local times. See custom pattern notes for general notes on custom patterns, including characters used for escaping and text literals.
| Character | Meaning | Example |
H or HH |
The hour of day in the 24-hour clock; a value 0-23. |
7.30am: H:mm => 7:30 7.30am: HH:mm => 07:30
|
h or hh |
The hour of day in the 12-hour clock; a value 1-12. When parsing, if no am/pm designator is specified, the parsed value is in the morning. |
8.30pm: H:mm => 7:30 8.30pm: HH:mm => 07:30
|
m or mm |
Number of minutes within the hour. mm is zero-padded; m is not.
|
5 minutes: m:ss => 5:00 5 minutes: mm:ss => 05:00
|
s or ss |
Number of seconds within the minute. ss is zero-padded; s is not.
|
5 seconds: s.fff => 5.000 5 seconds: ss.fff => 05.000
|
f , ff ... up to fffffff |
The fractional second part of the offset, using exactly the specified number of characters (up to 7, for a representation accurate to a tick). |
1 second, 340 milliseconds: s.fff => 340 1 second, 340 milliseconds: s.ff => 34 1 second, 340 milliseconds: s.f => 3 |
F , FF ... up to FFFFFFF |
The fractional second part of the offset, using at most the specified number of characters (up to 7, for a representation accurate to a tick). Trailing digits are truncated towards zero, and trailing insignificant zeroes are truncated. If this comes after a period (".") and the value is zero, the period is also truncated. |
1 second, 340 milliseconds: s.FFF => 1.34 1 second, 340 milliseconds: s.FF => 1.34 1 second, 340 milliseconds: s.F => 1.3 Exactly 1 second: s.F => 1 |
t or tt |
The culture-specific AM/PM designator, either in full (for tt ) or just the first character
(for t ).
|
13:10: h:mm tt => 1:10 PM
13:10: h:mm:sst => 1:10:00P
|
. |
This is *always* a period ("."); not a culture-sensitive decimal separator as one might expect. This follows the example of other standard libraries, however odd it may appear. The only difference between a period and any other literal character is that when followed by a series of "F" characters, the period will be removed if there are no fractional seconds. |
12 seconds, 500 milliseconds (en-US): ss.FFF => 12.5
12 seconds, 500 milliseconds (fr-FR): ss.FFF => 12.5
|
: |
The time separator for the format provider; colon in the invariant colture. | HH:mm => 07:30 |


{% extends "layout.html" %} {% block brand %} {% include "includes/v2/brandChange.html" %} {% endblock %} {% block content %} {% include "includes/v2/navV5.html" %} Name of your queue Name {% endblock %}


I'm a web developer with a passion for learning new things and solving problems. I also enjoy riding and working on motorcycles, making wine, baking bread, all things technology, and am a passionate open source enthusiast and lover.
<EMAIL_ADDRESS>Github
LinkedIn
Resumé


Aquaman
Aquaman is a movie starring Jason Momoa, Amber Heard, and Willem Dafoe. Arthur Curry, the human-born heir to the underwater kingdom of Atlantis, goes on a quest to prevent a war between the worlds of ocean and land.


Home
About Us
Medications
Patients
Options
Family
Prescriptions
Manage payment methods
Welcome to Drone Pharmacy Delivery
Bringing the pharmacy to you!


| Category: |
|
| Category: |
|
| Groups: |
The following project is a visualization designed to give insights on the political leanings of demographic groups by state and the degree of their influence per state relative to the rest of the nation.
Exit polls are designed to capture how demographic groups voted and to gauge their stance on issues important to the election. In 2003 the National Election Pool was formed and is a consortium of the national news networks: ABC, the Associated Press, CBS, CNN, FOX News and NBC. The news networks establish committees that are responsible for formulating the questionnaires and determine the target precincts. The committees pass this information to the NEP, and it handles the logistics of conducting the polls. This includes hiring and training of pollsters, surviving voters, and analyzing the results and adjusting them when necessary. Prior to its founding, each news company was responsible for conducting its own polls.
The map above was designed to visualize how certain demographic groups voted and their distribution of Electoral College Votes. The map has two visualization modes:
- Electoral Votes: Colors the states based on which party has the majority vote. The darker the color the larger the margin of victory.
- Group Influence: Colors the states based on percentage of the overall vote the demographic group carried in that state relative to the other states. The darker the color the larger the turnout of that group.
The data was pulled from CNN exit poll site on 11-13-16.


1 / 3
2 / 3
3 / 3
❮
❯
New Songdo Drugstore
Address
Incheon, Yeonsu-gu, Songdo-dong, Myungin Praza
Call Number
032-831-0881
Distance from your location
2.1 km
Number of masks
13 masks


Scrambled Eggs
Eggs are my favourite food. Here is a recipe for diliciously rich scrambled eggs.
Ingredients
- 2 eggs
- 1tbs butter
- 2tbs cream
Method
- Melt butter in a frying pan over a medeum heat
- Gently mix the eggs and cream in a bowl
- once butter has melted add cream and eggs
- Using a spatula fold the eggs from the heat (it will continue to cook on the plate until served)


Kogi: ‘Frustrated’ Dino Melaye Will Lose Again, APC Tells PDP
by George OgboluThe All Progressives Congress (APC) on Sunday said Senator Dino Melaye and the Peoples Democratic Party (PDP) have already lost the Kogi West supplementary election.
Naija News reports that the Independent National Electoral Commission (INEC) has fixed Saturday, November 30, for the conduct of the Kogi West supplementary rerun election.
Recall that INEC had declared the Kogi West Senatorial Rerun inconclusive.
The senatorial election which was held last Saturday, November 16, 20019, was been contested by twenty-four candidate with Melaye and Smart Adeyemi of the APC leading as the major candidates.
Naija News reports that the election was marred by violence and ballot box snatching.
Announcing results, the returning officer of the election, Olayinde Lawal, said the margin between the two leading candidates is lesser than the cancelled votes.
Lawal said while Adeyemi polled a total of 80,118 votes, Dino Melaye had 59,548, leaving a margin of 20,570.
He said 43,127 votes were cancelled across the seven LGAs where the election held.
In a statement by its National Publicity Secretary, Lanre Issa-Onilu, the APC said Kogi electorate resisted and frustrated Dino Melaye and the PDP’s plan to rig the rerun election for the Senatorial seat.
According to the APC, “The PDP has predictably gone to town with the usual lamentations on the forthcoming supplementary election. The PDP has even threatened to boycott the election. Who is fooling who?
“Nobody is fooled by the PDP’s statement boycotting the supplementary election. The All Progressives Congress (APC) will not drop its guard in our quest to get a clear majority of the remaining votes in the affected units.
“Why should the supplementary election be cancelled as being demanded by the PDP? Is it because the PDP has already lost the election?
“As the wide margin of valid votes from the November 16 exercise show, it is clear that Dino Melaye and the PDP have lost the election. PDP’s doomsday will surely not be postponed a second time. Come November 30, the APC candidate, Senator Smart Adeyemi will reclaim his earlier stolen mandate.
“How many times does the PDP need to be reminded that APC has not and will not copy the PDP’s inglorious tactics of using state institutions, particularly INEC, the judiciary and security agencies to manipulate the electioneering process?”
The nation’s ruling party said Kogi electorate have decidedly rejected individuals who sacrificed national interest to achieve their selfish political agenda.
“Nigerians will recall the lead roles Senator Dino Melaye played in frustrating the 2019 budget, legislative approval for INEC’s election budget, and executive interventions requiring Senate approvals.
“Commendably, those days are gone as the Nigerian electorate have thrown out the unpatriotic and sabotaging legislators.
“The National Assembly and the executive now enjoy a cordial relationship that ensures good governance and brings dividends to the people,” APC added.


{{=it.include("head-css")}} {{=it.include("head-scripts")}}
Home
@DanielLarsenNZ
Technology and Software Blog.
{{= it.document }}
{{= it.include("about-sidebar")}} {{= it.include("posts-sidebar")}}
More
GitHub
Twitter
Linked In
Flickr
{{=it.include("footer-scripts")}}


--- layout: post title: "@Disclosedtech: Edsurge and Bloomboard" date: 2017-05-26 11:00:00 +0000 tags: image: https://s3.amazonaws.com/hackedu/2017-05-26-pigeon.jpg imagecredits: https://www.flickr.com/photos/wildaboutwildlife/6011928100 ---
"Texas Partners With BloomBoard to Bring Competency-Based PD to the State," Edsurge wrote on May 24, 2017. This article fails to disclose that Edsurge and Bloomboard share investors: Imagine K12, Learn Capital, and the Gates Foundation.
I have been tracking these failures to disclose financial relationships because Edsurge has been selling its Concierge service to schools in order to help them buy ed-tech products. The lack of transparency is important, I think. Now Edsurge says it's ending the service, but I'm still going to keep track on the publication's disclosure issues.


THE PERFECT TOUCH
Custom floral arrangements tailored to your style and space. Starting at $75 per delivery. Schedule complimentary design consultation today.
What kind of flowers do you prefer?
 All flowers are beautiful in their own way, and that`s like women too.
HOW IT WORKS
-
DESIGN
Your personal design consultant meets with you to discuss style, preference and space
-
SCHEDULE
We provide a custom proposal for floral based on your schedule (weekly, be-weekly or monthly).
-
ENJOY
We hand deliver your custom arrangement for you to enjoy. It`s that simple.


This Temperament Test is made up of 40 groups of terms, consisting of four choices each. Read the four choices in each group,
and then click the choice that best describes you. When you have chosen a term for each of the 40 groups, click the "See Results" button.
Results
Keyboard Shortcuts: Left & Right arrows to move between questions. 1-4 to select an answer (top to bottom)


Variables
Const array
array: object = predicate("object")(Array.isArray)
Const bigint
bigint: object = of("bigint")
Const boolean
boolean: object = of("boolean")
Const func
func: object = of("function")
Const number
number: object = of("number")
Const object
object: object = chain(of("object") as Parser<object, TypeMismatchError | EqualityError, unknown>, e =>e === null ? fail({ _tag: "NotEqual", to: null, value: e } as EqualityError) : succeed(e))
Const string
string: object = of("string")
Const symbol
symbol: object = of("symbol")
Const undef
undef: object = of("undefined")
Check that the input value is equal to
object
(_.isEqual, works with objects).


%pos = %obj.getPosition();
// this set's the impulse force to 5 in the X velocity and 10 in the Y velocity %obj.setImpulseForce(5, 10);
// this set's the impulse force to 15 in the X velocity and 20 in the Y velocity %obj.setImpulseForce(15, 20);
%obj.setPosition(15, 15);
%obj.setSize(15, 15);


The Big Apple gets a bad rap sometimes but it has more going for it than against. Let's explore why.
(Hint: Some of that is pizza.)
Whether it's the smell or the traffic, people find reasons to complain why New York City is a horrible place to live.
Well, they're wrong. They should start looking at all of the positives that drive people to somehow pay the crazy rent.
For example:
- No car needed
- Most things are within walking distance
- Any type of food you can imagine
The city is made up of 5 boroughs and each has its own attractions. Here are just a few of my favorite:
| Borough | Attraction |
|---|---|
| Manhattan | Grand Central Terminal, The Sheep's Meadow at Central Park, Doyer's Street |
| Brooklyn | Williamsburg, McGlorick Park, DUMBO, Brooklyn Bridge Park |
| Queens | MoMa PS1, Astoria, Chinatown, Ridgewood |
| The Bronx | Arthur Avenue, Yankee Stadium, Woodlawn Cemetary |
| Staten Island | Staten Island Ferry...that's all I can think of |
But the real reason NYC is awesome is...(click here to find out.)


Form Example
First Name
Last Name
I want to order
Coffie
Tea
Select Gender
Male
Female
Other
Quantity
1
2
3


Flireh1291.github.io
View and Download HighGear Duo quick start instructions online. HighGear PulseWare Duo Heart Rate Monitor: User Guide. Duo Heart Rate Monitor pdf manual download.
Highgear Pulseware Duo Handbuch. PulseWare Duo Same size as the Max, the Duo is the deluxe model in the PulseWare line designed with both finger pulse sensor technology for everyday fitness monitoring and chest transmitter technology for strenuous endurable exercise. HighGear Launches PulseWare Line of HR Monitors SGB Online. HIGHGEAR DEBUTS PULSEWARE HEART RATE MONITORS AT SUMMER. HighGear PulseWare Duo Heart Rate Monitor: User Guide. Sportline: Click on the Learn More Sportline: Click on the Learn More link for your model and there is a link to download the manual.
HighGear Duo Quick Start Instructions - ManualsLib.
Heart Rate Monitor Watches - Top Prospect Alert Minor. HighGear PulseWare Duo - Watches: Reviews Outside Online. Find helpful customer reviews and review ratings for Highgear PulseWare Duo Heart Rate Monitor with Fingertip HR Sensors and Wireless Strap at Amazon.com. Read honest and unbiased product reviews from our users.
Highgear Loft Watch, Highgear PulseWare Duo Heart Rate Monitor, Highgear PulseWare Max Heart Rate Monitor, Highgear PulseWare Mini Heart Rate Monitor, Highgear PulseWare Solo Heart Rate Monitor Sportline Duo User Manual - WordPress.com.
Asheville, NC— It has never been easier to keep track of your workouts with the new line of PulseWare electronic fitness products by Highgear. Place two fingers on the Duo s sensors and, seconds later, you ve got your pulse rate. The bargain price also includes a wireless heart-rate strap (for more accurate measurement) and chronograph. Highgear PulseWare Duo Heart Rate Monitor. The Highgear PulseWare Duo Heart Rate Monitor comes with a wireless chest strap and PulseTouch fingertip heart rate sensors; you can use either system to best suit your needs and preference.
When you buy something using the retail links in our stories, we earn an affiliate commission that helps pay for our work. Read more about Outside’s affiliate policy. Amazon.com: Customer reviews: Highgear PulseWare Duo Heart.


How? You need to specify a list of which
methods in which
classes should be compiled. This isn't easy to generate but you can start with:
- -XX:+UnlockDiagnosticVMOptions
- -XX:+LogTouchedMethods
- -XX:+PrintTouchedMethodsAtExit
...then massage this data with grep and/or sed... Then you have to pass this list to jaotc which compiles your bytecodes into a Shared Object file. Not easy, maybe worth it though.
More anec-data: I found that using CDS, AppCDS and AOT all at once cut the startup time for a Clojure application by over 60%. YMMV, of course.


---
---
The Integrated Ph.D. Programme
See also: The Ph.D. Programme
The Department of Mathematics, through its Integrated Ph.D. programme, offers exciting opportunities to talented students holding a Bachelor's degree for acquiring a rigorous and modern education in mathematics, and for pursuing research in both pure and applied mathematics.
Admission to the Integrated Ph.D. (Int. Ph.D.) Programme in the Mathematical Sciences is through the Joint Admission Test for M.Sc. (JAM) followed by an interview (of those candidates who are short-listed) at IISc.
Click here and follow the link that says Information Brochure for the syllabi for the relevant JAM examinations
SEVERAL CHANGES HAVE OCCURRED in the admissions process to the Int. Ph.D. programme in the Mathematical Sciences at IISc. Please read what follows CAREFULLY!
B.Sc. or equivalent degree with Mathematics as one of the subjects (this includes the B.Stat. degree, and a B.A. degree with Mathematics as one of the subjects); OR
B.E./B.Tech. or equivalent degree
Candidates who are yet to complete their examinations for the eligible degree and expect to complete all the requirements for their degree (including all examinations, project dissertations, viva voce, etc.) before July 31, 2016, are eligible to apply.
Please refer to the following web page for further information on the JAM 2016 application process: http://jam.iitm.ac.in/jam2016/
As regards the separate application to IISc: The IISc online portal for 2016 admissions is NOW OPEN. Visit this page for information and instructions on how to access the online admission portal.
| Dates pertaining to JAM 2016 | See http://jam.iitm.ac.in/jam2016/ | |
| Deadline for submitting IISc application | March 21, 2016 | |
| Interviews at IISc | To be announced |
Students admitted to the Integrated Ph.D. programme need to complete 57 credits of course work (typically, a course is worth 3 credits) and 7 credits of project work by the end of the fourth semester of their joining the programme. (View the webpage Courses for more information.)
Visit the webpage Careers in Mathematics.
Question papers of past IISc Int. Ph.D. entrance examinations. NOTE: The IISc entrance examinations have been discontinued. These question papers are only indicative of the problems you might have to solve in the JAM Mathematics (MA) paper.
|
|
||
| Indian Institute of Science | Contact the Administrator | Disclaimer |


Participants asked to stop any harassing behaviour are expected to comply immediately. Sponsors are also subject to the anti-harassment policy.
If a participant engages in harassing behaviour, the organisers may take any action they deem appropriate, including warning the offender or expulsion from the unconference.
If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of conference staff immediately. Organisers and helpers can be identified by t-shirts.
We will be happy to help participants contact venue security or local law enforcement, provide escorts, or otherwise assist those experiencing harassment to feel safe for the duration of the event. We value your attendance.
We expect participants to follow these rules at conference and workshop venues and unconference-related social events.
Participants must respect others' right to be heard.


The tales told by Shahrazad over a thousand and one nights to delay her execution by the vengeful King Shahriyar have become among the most popular in both Eastern and Western literature. From the epic adventures of 'Aladdin and the Enchanted Lamp' to the farcical 'Young Woman and her Five Lovers' and the social criticism of 'The Tale of the Hunchback', the stories depict a fabulous world of all-powerful sorcerers, jinns imprisoned in bottles and enchanting princesses. But despite their imaginative extravagance, the Tales are anchored to everyday life by their realism, providing a full and intimate record of medieval Islam.


PureIt - HCD Based Marketing Plan for a Low Cost Water Purifier
This project was completed for the 2014 Unilever Talent Hunt Business Plan Competition.It was the winner in the PureIt brand category and one of the six finalist ideas submitted to the senior management team of Unilever Pakistan. The project was also featured by Acumen
The Scope of the Project
To devise a 360 degree marketing plan for PureIt, a water purification system catered for low income families from Karachi and Lahore
The Status of Potable Water in Pakistan
Approximately 15.9 million people in Pakistan do not have access to safe drinking water. With more than 200,000 children dying due to water borne diseases annually, there is an urgent need for a hassle free, cheap and safe option for accessing potable water
A Viable Solution - PureIt Excella
PureIt is an affordable solution that, if marketed effectively, can provide potable water to vulnerable communities in the country. The water purifier does not require electricity or gas to operate, and provides safe, drinkable water at a cost of Rs 1 (US $ 0.01) per litre.
Current Status of PureIt in the Consumer Market in Pakistan
To date, PureIt has been unable to gain traction in the Pakistani
market. The following are the two major reasons for this:
-
The lack of incentives for customers to shift from the status quo of using traditional methods like boiling water to buying a water purifier.
-
Trust in the workability of PureIt as an efficient water purifier.
Unilever’s current modus operandi for marketing and selling Pureit is not effective. Sales representatives known as Pureit Water Experts(PWEs) are responsible for listing the potential advantages of PureIt to customers at supermarkets. There is a need for establishing a personalized connection with the target market, since a structural shift of opinion about the workability and advantages of a water purification system needs to be cultivated.
Benchmarking Pureit’s Current Implementation in Pakistan with India
In India,PureIt is one of Unilever’s most successful products. Hindustan Unilever digitized the distribution networks of Pureit via a well maintained online delivery and service portal. The adaption of the product was entirely community driven, and endorsements from the health authorities eased Pureit’s acceptance amongst the consumers.
In comparison, interaction between the product and the customer is missing in Pakistan. The Pureit website is outdated and low in User Experience (UX), while the customer service leaves much to be desired.
Output From the Design Thinking Exercises
The team decided to implemented human centered design (HCD) methodologies to develop the marketing plan for PureIt. A major reason for this was the fact that a successful adoption of the product required a much deeper understanding of the end users, and any solution had to be community driven.
The team engaged in multiple ethnographic studies, interviews and framework mapping exercises in order to understand how best to market the product within urban low income families in Lahore and Karachi. The following was the major output from the design thinking exercise.
Target Customer Analysis
The following was a persona of the typical PureIt customer.
As highlighted by the persona, the basic consumer need was of a cheap, hassle-free and time saving method for obtaining healthy water.
Value Proposition Chart
The following chart mapped out the value proposition that PureIt should be addressing for the customers
The Basic Insights Behind The Marketing Plan
The community in the target group(TG) is the main catalyst for our marketing campaign. We need a more intrinsic, personalized interaction with our TG, hence we need to use internal stakeholders i.e. existing PureIt customers chosen as Pureit ambassadors, and Unilever employees in the communities chosen as Pureit agents. Also, there should be endorsements from doctors and local health officials on the workability of the product.
The Central Idea of the Marketing Strategy
The central idea of the marketing strategy was the Share Water, Create Happiness Campaign. Under the campaign, the following two activities were recommended:
- The Purepoints referral program. A continuous incentivising program which aimed to encourage the adoption of the product. Since customers in Pakistan were more aware about other Unilever products generally, the idea was to offer them discounts on other popular household Unilever products via regular usage of PureIt as well as by referring new customers to use the product.The insight behind this program was that the customers would be more influenced after watching their neighbours, relatives, friends etc. use the product, rather than being convinced about the usability of the product from mere sales representatives.
- The “Saaf Paani, Saaf Samajh” ( Clean Water, Clean Community) Campaign. Access to potable water is a serious issue for communities in Pakistan. It was therefore recommended to launch a community service initiative, under which cleanliness drives were launched in local communities. These drives were augmented by endorsements from local doctors on both,the urgent need of ensuring that family members drink clean water, and also on the workability of PureIt.
The Recommended Distribution Network
The following was the recommended distribution network for PureIt under the marketing plan
The Updated Business Model Canvas for PureIt
Under the revamped marketing strategy, the business model for PureIt was redesigned to be as the following:
The Next Steps
The marketing plan won in the PureIt category, and was one of the 6 final plans presented to Unilever’s senior management team.
Additional Links