Canoemates: A Story of the Florida Reef and Everglades
by Kirk Munroe
Chapter XXXIV: “Hemmed in by a Forest Fire”
Additional Information
- Year Published: 1892
- Language: English
- Country of Origin: United States of America
- Source: Munroe, K. (1892). Canoemates: A Story of the Florida Reef and Everglades. New York, NY: Harper & Brothers.
-
Readability:
- Flesch–Kincaid Level: 9.5
- Word Count: 3,429
- Genre: Adventure
- ✎ Cite This
Downloads
Which way were they to fly? The terrible roar of the burning forest seemed to come from all directions, and the smoke seemed hardly less dense on one side than en another. But there had been no fire where they came from, and they must retrace their steps along the bloodmarked trail that they had followed, of course. Although the body of the deer lay near the spot where it had ended, they were at first too bewildered to discover it, and lost several precious minutes in searching among the palmetto leaves for its crimson signs. At length they found them, and started back on a run.
It was exhausting work trying to run through the thick scrub, ever its leglike roots, and among the rough rock masses strewn in the wildest confusion between them, and their speed was quickly reduced to a walk. Sumner went ahead, and, with arms uplifted to protect his face from the sawlike edges of the stout leaf stems, forced a way through them, with Worth close behind him.
They had not gene far when Sumner suddenly stepped and, with a despairing gesture, pointed ahead. The flames were in front of them, and could be distinctly seen licking the brown tree trunks, and stretching their writhing arms high aloft towards the green tops.
“We are going right into the fire!” the boy exclaimed, hoarsely. “The deer must have seen it, and been curving away from it when we over took him!”
So they turned back, and rushed blindly, without trying to follow the trail, in the opposite direction. Before they had gone half a mile Worth’s strength became exhausted, and he sank down on a palmetto root gasping for breath.
“I can’t go any farther, Sumner! Oh, I can’t!” he cried, piteously.
“But you must!  We are almost certain to find a slough with water in it, or a stream!” and grasping his comrade by the arm, Sumner pulled him again to his feet.
As he did so, the hammers of Worth’s gun became caught in something, and the next instant both barrels were discharged with a startling explosion.
“That’s a good idea!” exclaimed Sumner. “Let’s fire all our cartridges as fast as we can. Perhaps they are out looking for us, and will hear the shots.”
So saying, he fired both barrels of his own gun into the air, and quickly reloading, fired again. Worth followed suit; but just as Sumner was ready to fire for the third time he was startled by a sharp crackling sound close beside him. He turned quickly. There was a bright blaze within ten feet of him. The first accidental discharge of Worth’s gun, as it lay pointed directly into a mass of dry grass and dead palmetto leaves, had set this on fire. Worth instinctively sprang towards it with the intention of trying to stamp it out, but, with a joyful cry, Sumner restrained him.
“It’s the very thing!” he shouted. “A back fire! Why didn’t I think of it before? We must set a line of it as quick as we can!”
Worth did not understand, and hesitated; but seeing Sumner, with a bunch of lighted leaves in his hand, rush from one clump of palmetto to another, touching his blazing torch to their dry, tinderlike stalks, he realized that his companion knew what he was about, and began to follow his example.
Within five minutes a wall of flame a hundred yards in length was roaring and leaping in front of them, fanned into such fury by the high wind that they were obliged to retreat from its blistering breath. They could not retreat far, however, for during their delay the main fire had gained fearfully upon them, and its awful roar seemed one of rage that they should have attempted to escape from it. Mingled with this was the crash of falling trees and the screams of wild animals that now began to rush frantically past the boys. A herd of flying deer nearly trampled them underfoot; and directly afterwards they were confronted with the gleaming eyes of a panther. With an angry snarl he too dashed forward. Great snakes writhed and hissed along the ground, and Worth clutched Sumner’s arm in terror.
Seizing his gun, the latter began shooting at the snakes; nor did he stop until his last cartridge was expended.
It was horrible to stand there helplessly awaiting the result of that life-and-death race between those mighty columns of flame; but they knew not what else to do. Now they could no longer see in which direction to fly. The swirling smoke clouds were closing in on them from all sides, and only by holding their faces close to the earth could they catch occasional breaths of fresh air.
Sumner’s plan was to remain where they were until the last moment, and then rush out over the smoldering embers of the fire they had set. The main body of this was now rapidly retreating from them. At the same time a fringe of flame from it was working backward towards them. Though they made feeble efforts to beat this out, their strength was too nearly exhausted for them to make much headway against it. The heat was now so intense that their skin was blistering and their brains seemed almost ready to burst.
Worth had flung away his gun, just after loading it, when he began to set the back fires, and now the sound of a double report from that direction showed that the flames had found it. The noise of these reports was followed by a loud cry, and out of the smoke clouds a strange, wild figure came leaping. It was a human figure. As the boys recognized it, they echoed its cry. Then by their frantic shouts they guided it to where they were crouching and making ready for their desperate rush into the hot ashes and still blazing remains of the back fire.
The figure that sprang to their side, and, seizing Worth’s arm, uttered the single word “Come!” was that of Ul-we, the young Seminole, though the boys, having never seen him, did not, of course, recognize him.
THE ORDEAL OF FIRE LASTED BUT A MINUTE.
With thankful hearts and implicit faith they followed him as he dashed back into the thickest of the smoke clouds that still hung low over the newly burnt space before them. They choked and gasped, and their feet became blistered with the heat that penetrated through the soles of their boots. Worth would have fallen but for the strong hand that upheld him, and dragged him resistlessly forward. The ordeal of fire lasted but a minute, when they emerged in a grassy glade at one end of the burnt space, and ran to a clump of water-loving shrubs that marked a slough beyond it.
The vanguard of the main fire raced close after them, flashing through the brittle grass as though it were gunpowder; and as they dashed into the bushes, and their feet sank into the mud and water of the slough, its hot breath was mingled with theirs.
In the very centre of the thicket Ul-we threw himself down in water that just covered his body, and held his head a little above its surface. The boys followed his example, and experienced an instant relief from the cool water. In this position they could breathe easily, for the smoke clouds seemed unable to touch the surface of the water, but rolled two or three inches above it.
Here they lay for what seemed an eternity while the fire fiends raged and roared on all sides of them, and in the air above. The heat waves scorched and withered the green thicket, the water of the little slough grew warm and almost hot, the air that they breathed was stifling, and for a time it almost seemed as though they had escaped a roasting only to be boiled alive like lobsters.
After a while, that appeared to the poor boys a long, weary time, the fiercest of the flames swept by, and their roar no longer filled the surrounding space. There were rifts in the smoke clouds, and perceptible intervals of fresh air between them. Finally the boys could sit up, and at length stand, but not until then were they certain that the danger had passed.
Then Sumner grasped the young Indian’s right hand in both of his, and tears stood in the boy’s eyes as he said: “I don’t know as you can understand me; I don’t know who you are, and I don’t care. I only know that you have saved us from a horrible death, and that from this moment I am your friend for life.”
Which way were they to fly? The terrible roar of the burning forest seemed to come from all directions, and the smoke seemed hardly less dense on one side than en another. But there had been no fire where they came from, and they must retrace their steps along the bloodmarked trail that they had followed, of course. Although the body of the deer lay near the spot where it had ended, they were at first too bewildered to discover it, and lost several precious minutes in searching among the palmetto leaves for its crimson signs. At length they found them, and started back on a run.
It was exhausting work trying to run through the thick scrub, ever its leglike roots, and among the rough rock masses strewn in the wildest confusion between them, and their speed was quickly reduced to a walk. Sumner went ahead, and, with arms uplifted to protect his face from the sawlike edges of the stout leaf stems, forced a way through them, with Worth close behind him.
They had not gene far when Sumner suddenly stepped and, with a despairing gesture, pointed ahead. The flames were in front of them, and could be distinctly seen licking the brown tree trunks, and stretching their writhing arms high aloft towards the green tops.
“We are going right into the fire!” the boy exclaimed, hoarsely. “The deer must have seen it, and been curving away from it when we over took him!”
So they turned back, and rushed blindly, without trying to follow the trail, in the opposite direction. Before they had gone half a mile Worth’s strength became exhausted, and he sank down on a palmetto root gasping for breath.
“I can’t go any farther, Sumner! Oh, I can’t!” he cried, piteously.
“But you must!  We are almost certain to find a slough with water in it, or a stream!” and grasping his comrade by the arm, Sumner pulled him again to his feet.
As he did so, the hammers of Worth’s gun became caught in something, and the next instant both barrels were discharged with a startling explosion.
“That’s a good idea!” exclaimed Sumner. “Let’s fire all our cartridges as fast as we can. Perhaps they are out looking for us, and will hear the shots.”
So saying, he fired both barrels of his own gun into the air, and quickly reloading, fired again. Worth followed suit; but just as Sumner was ready to fire for the third time he was startled by a sharp crackling sound close beside him. He turned quickly. There was a bright blaze within ten feet of him. The first accidental discharge of Worth’s gun, as it lay pointed directly into a mass of dry grass and dead palmetto leaves, had set this on fire. Worth instinctively sprang towards it with the intention of trying to stamp it out, but, with a joyful cry, Sumner restrained him.
“It’s the very thing!” he shouted. “A back fire! Why didn’t I think of it before? We must set a line of it as quick as we can!”
Worth did not understand, and hesitated; but seeing Sumner, with a bunch of lighted leaves in his hand, rush from one clump of palmetto to another, touching his blazing torch to their dry, tinderlike stalks, he realized that his companion knew what he was about, and began to follow his example.
Within five minutes a wall of flame a hundred yards in length was roaring and leaping in front of them, fanned into such fury by the high wind that they were obliged to retreat from its blistering breath. They could not retreat far, however, for during their delay the main fire had gained fearfully upon them, and its awful roar seemed one of rage that they should have attempted to escape from it. Mingled with this was the crash of falling trees and the screams of wild animals that now began to rush frantically past the boys. A herd of flying deer nearly trampled them underfoot; and directly afterwards they were confronted with the gleaming eyes of a panther. With an angry snarl he too dashed forward. Great snakes writhed and hissed along the ground, and Worth clutched Sumner’s arm in terror.
Seizing his gun, the latter began shooting at the snakes; nor did he stop until his last cartridge was expended.
It was horrible to stand there helplessly awaiting the result of that life-and-death race between those mighty columns of flame; but they knew not what else to do. Now they could no longer see in which direction to fly. The swirling smoke clouds were closing in on them from all sides, and only by holding their faces close to the earth could they catch occasional breaths of fresh air.
Sumner’s plan was to remain where they were until the last moment, and then rush out over the smoldering embers of the fire they had set. The main body of this was now rapidly retreating from them. At the same time a fringe of flame from it was working backward towards them. Though they made feeble efforts to beat this out, their strength was too nearly exhausted for them to make much headway against it. The heat was now so intense that their skin was blistering and their brains seemed almost ready to burst.
Worth had flung away his gun, just after loading it, when he began to set the back fires, and now the sound of a double report from that direction showed that the flames had found it. The noise of these reports was followed by a loud cry, and out of the smoke clouds a strange, wild figure came leaping. It was a human figure. As the boys recognized it, they echoed its cry. Then by their frantic shouts they guided it to where they were crouching and making ready for their desperate rush into the hot ashes and still blazing remains of the back fire.
The figure that sprang to their side, and, seizing Worth’s arm, uttered the single word “Come!” was that of Ul-we, the young Seminole, though the boys, having never seen him, did not, of course, recognize him.
With thankful hearts and implicit faith they followed him as he dashed back into the thickest of the smoke clouds that still hung low over the newly burnt space before them. They choked and gasped, and their feet became blistered with the heat that penetrated through the soles of their boots. Worth would have fallen but for the strong hand that upheld him, and dragged him resistlessly forward. The ordeal of fire lasted but a minute, when they emerged in a grassy glade at one end of the burnt space, and ran to a clump of water-loving shrubs that marked a slough beyond it.
The vanguard of the main fire raced close after them, flashing through the brittle grass as though it were gunpowder; and as they dashed into the bushes, and their feet sank into the mud and water of the slough, its hot breath was mingled with theirs.
In the very centre of the thicket Ul-we threw himself down in water that just covered his body, and held his head a little above its surface. The boys followed his example, and experienced an instant relief from the cool water. In this position they could breathe easily, for the smoke clouds seemed unable to touch the surface of the water, but rolled two or three inches above it.
Here they lay for what seemed an eternity while the fire fiends raged and roared on all sides of them, and in the air above. The heat waves scorched and withered the green thicket, the water of the little slough grew warm and almost hot, the air that they breathed was stifling, and for a time it almost seemed as though they had escaped a roasting only to be boiled alive like lobsters.
After a while, that appeared to the poor boys a long, weary time, the fiercest of the flames swept by, and their roar no longer filled the surrounding space. There were rifts in the smoke clouds, and perceptible intervals of fresh air between them. Finally the boys could sit up, and at length stand, but not until then were they certain that the danger had passed.
Then Sumner grasped the young Indian’s right hand in both of his, and tears stood in the boy’s eyes as he said: “I don’t know as you can understand me; I don’t know who you are, and I don’t care. I only know that you have saved us from a horrible death, and that from this moment I am your friend for life.”
As for poor Worth, the tears fairly streamed down his smoke-begrimed, blood-stained cheeks, as, in faltering words, he also tried to express his gratitude.
The Indian seemed to understand, for he smiled and said: “Me Ul-we. Quor’m know um. You Summer. You Worf. Me heap glad find um. ’Fraid not. Hunt um; hunt um long time, no find um. Bimeby hear gun, plenty. Hunt um, no find um. Bimeby hear one gun, bang! bang! quick. Then come, find um. Hindleste.  Holewagus! Ul-we feel bad, Quor’m feel bad, all body feel bad. Now all body heap hap, dance, sing, eat ’leap, feel plenty glad.”
All of which may be translated thus: “I am very glad to have found you, for I was afraid I shouldn’t. I hunted and hunted a long time, but couldn’t find you.  Finally I heard both barrels of a gun fired at once, not far from where I was, and then I found you. It is good. If I had not found you just when I did, the fire would have caught you and burned you to death, which would have been terrible. I should have felt very badly. So would Quorum and all your friends. Now everybody will rejoice.”
Ul-we had been ordered to watch the camp of the white men by the river until they left it, but to remain unseen by them. He had noted the departure of the hunting party, and had also been aware of the approach of the forest fire while it was still at a great distance. When, some hours later, the Lieutenant came back full of anxiety concerning the boys, and immediately started off again to hunt for them, Ul-we also started in another direction, with the happy result already described.
They remained in the slough two hours longer, before the surrounding country was sufficiently cooled off for them to travel over it. Then they set out under Ul-we’s guidance, though where he would take them to the boys had not the faintest idea.


And this is how my life started...
Born and raised in Kenya. Lived a normal life just like any other kid in the village.
Jun 23I was taught how to read and write code but i found myself mixing art and science to make beautiful things
1997- PresentFounded Thika Climate Action Team, a youth empowerment program that aimed at providing jobs and creating climate change awareness among the community. The club expanded to various counties then provinces. Some of the counties represented were Nanyuki, Nyahururu and Gilgil
Read more 2008-2011Founded I-Graphics Kenya. A graphic design company based in Thika.
Read more 2011-2013Worked as a UX/UI designer for GiantAppFactory based in London and Jello, a startup my campus collegues and I formed.
Read more June 2015 – April 2016Joined 52 ambitious and driven young Africans with a passion in technology and entrepreneurship and an interest to launch globally successful software companies out of Africa.
August 2016- PresentFeel free to get in touch with me.
juliusngigim@gmail


Last updated by {{dog.lastUpdater}} on {{dog.lastUpdated | date}} at {{dog.lastUpdated | date:'h:mma'}}


Chuckle Brothers star Paul says Barry contacts him from beyond the grave in dreams
One half of the iconic Chuckle Brothers, Paul 'Chuckle' Elliott, 72, talks losing his beloved brother Barry, opening up about his emotions, and hitting the club scene
by Emma Jones, https://www.mirror.co.uk/authors/emma-jones/In the midst of the Yorkshire countryside, in an old farm house filled to the brim with retro games, merchandise and trinkets, Paul Chuckle settles down to chat with us, cosied up in a woolly jumper and a pair of fleeced slippers, while his beloved wife of 31 years, Sue, brings in plates of biscuits and mugs of tea.
It’s a subdued atmosphere at first, as Paul is looking through old photographs of himself with older brother and best friend Barry, his lifelong stage partner, who died 15 months ago from bone cancer.
He is adamant that talking about death has helped with his healing.
‘Over the years, I’ve had quite a bit of practice when it comes to opening up,’ he says earnestly.
‘My wife and I lost a three-month-old baby girl back in 1975, that was absolute agony.'
'Ten years after that I lost my dad, 15 years later my mum passed away, then my sister Shelia, brother Colin, then Barry, and a few months ago [brother and fellow actor] Jimmy Patton.'
'It gets easier to talk about each time, but it’s unbearable if you keep it locked inside.'
'Death is an awful thing.'
'And grief physically hurts.'
'We need to be as open as possible.’
Working solely with his brother Barry for over 50 years, the pair were always in stitches and told each other everything.
But when it came to his illness, Barry decided to make that the one piece of information he didn’t share.
‘I had no idea he was ill until six weeks before he passed.'
'For a few years he had pain down one leg, but he said the doctors had told him it was nothing more than sciatica.'
'I went to pick him up to go and film a sketch, and his wife Ann was helping him out of the door.'
'He had a walking stick and looked 95 years old.'
‘At the station, he couldn’t get out of the car, so I said, “Baz, we better cancel – if the paparazzi get pictures of you like this they’ll have a field day.”'
'He agreed and went home, and the next day Ann called me and said he couldn’t get out of bed.'
'I said sciatica shouldn’t do that, that’s when she said, “I think there’s something he hasn’t told you.”'
'She passed the phone over and he told me he had bone cancer.'
'He never walked again.'
'We filmed a few last voiceover jobs at his home with him in a wheelchair, and within three weeks he was dead,’ Paul says in disbelief.
Despite talking about a heartbreaking loss, Paul is warm, welcoming and continually tries to make us smile throughout our chat.
Everywhere you look is some kind of memory of Barry.
A BAFTA for the brothers’ iconic TV work sits pride of place in the hall, photos of the pair meeting the royals, on holiday as kids and as teens playing football are on every surface – even the coasters in the living room are Chuckle Brothers-themed.
Paul’s beloved brother is cherished every day.
‘He’s been in so many of my dreams since he passed, and I believe in the afterlife – it’s comforting he’s contacting me that way.’
He smiles, ‘I talk about the good times with Sue, so I’m not just being upset, missing him.'
'He wanted to work up until the end and he did it.'
'I just miss those laughs we had on stage.'
'I can’t fathom that we’ll never have that laugh together anymore.'
He had a completely unregrettable life.'
'A brilliant ride.'
'We had a ball.’
It all began for the brothers when Paul was just 15 and Barry 18.
Having dreamt of making it in football, he joined Barry on the comedy circuit following a bad accident aged 14 that wrecked his sporting ambitions.
It was then that they hit the big time, and the pair had to grow up fast.
‘In 1963, when I was 19, we played a show with Dorothy Squires, who was a huge name at the time,’ he says proudly.
‘But I was so young, I’d never even heard a woman swear before.'
'Well, more bad language than you can imagine was pouring out of her mouth,’ Paul explains, shaking his head as wife Sue overhears what he’s said and scolds him.
‘Oh, I can say that, Sue, she’s long gone,’ he laughs.
Fast-forward to many successful years on the club circuit and a long reign as Butlin’s Redcoats, the boys then won Opportunity Knocks in 1967, which put them on the map.
Fast-forward again to 1987 and the now-iconic ChuckleVision started on BBC1, running for 22 years, and at the height of its popularity was shown three times a day.
‘You know what that is?'
Overkill!'
'That’s brainwashing kids,’ laughs Paul.
‘How many “to me, to yous” would that be per day?’ he jokes, referencing the pair’s iconic catchphrase.
The fandom reached an all-time high in the 90s, and with that the brothers’ lives completely changed, leaving them unable to go anywhere without being spotted.
To this day, their legacy lives on, with Paul even having to flee as far as China after Barry’s death to avoid seeing anyone who knew him.
‘We have so many great fans, but the worst thing that can happen when someone close to you dies is somebody putting their arms around you.'
'If they hugged me, it set me off.'
'But Barry was so soft with the fans, he loved them.'
'He’d let them backstage to say hello to everyone in the dressing room,’ he laughs.
‘We had one girl who followed us everywhere.'
'She’d cornered Barry outside and asked if she could come inside to say hello to me.'
'Next thing I know, she’s in my dressing room asking Sue to shift so she can sit next to me.'
'Sue went to the loo and the second she’d gone, she’d pinched her seat and was beside me, filming me on her phone!’
Paul’s become streetwise when it comes to dealing with slightly more obsessive admirers.

‘I mean, John Lennon was shot by one.'
'Some lads got hold of my phone number and were ringing me drunk at four in the morning, shouting, “To me, to you!”'
'I just kept hanging up, but eventually I had to change my number.'
'It was a really good one and easy to remember too.'
'Now I have two phones, like a drug dealer.'
'But you can’t upset these people for fear they’re going to come and shoot you one day.’
Showing us through his photograph collection, we spot some records in his living room.
Paul is thrilled to have found a passion in a new solo venture – DJing.
‘Sue and I have always been clubbers for as long as we’ve been together,’ he explains.
‘I always fancied being in a rock band, and this is the closest thing to it.'
'I love all the club bangers, it’s the music I listen to at home.'
'Fatboy Slim and Dizzee Rascal are favourites.'
'I go and see them live and get down at the front with everybody else.'
'I’ve seen Lily Allen and other stars in the crowds dancing with me and they all act completely starstruck.'
'They call me a legend, it’s mad,’ he adds with a smile.
Some other people who think Paul is a legend are his four sons – one of whom, Paul Jnr, 29, even got a tattoo of his famous dad’s face on his leg last year.
‘I love it, but Sue hates tattoos,’ he smirks.
‘I think I’ve embarrassed them over the years, but I know I’m a great dad.'
'And I’m an even greater grandad,’ he beams, revealing a cushion he’s perched on that says, ‘Reserved for the world’s best grandad’.
‘Sue always wanted a little girl to dress up like a doll and now we have two granddaughters, so she’s very pleased!'
'Harder to bring up than boys, mind you,’ he says, shaking his head.
'But they are lovely and I am officially the world’s best grandad.’
As we get ready to leave, Paul explains he’s in rehearsals for his 52nd panto, and despite absolutely loving performing, Christmas will always be hard without Barry.
‘His birthday is Christmas Eve and every year we did panto together.'
'On his special day, I’d get the whole audience to sing to him.'
'So when it came to last year, on the finale, with no birthday singing, I had a tear in my eye,’ he tells us sadly.
‘Barry wanted to make people laugh until he died – he wanted to die on stage like Tommy Cooper.'
'But he really did bring joy right up until the end, and I’ll do my best to honour him and achieve amazing things – I could even be the next James Bond,’ he exclaims with a grin.
‘And to be honest, although I’ll miss him forever, I’m glad he wasn’t here to see Rotherham FC relegated in April,’ he says, booming with laughter.
And with that, we think the brother’s ability to shine light, even in the darkest times, will never end. ■
How do you spend your Sunday?
■ Lie-in or early riser?
It depends if I’ve been DJing the night before.
I need my eight hours, so if I have to get up at midday, so be it.
I’m grumpy without my sleep.
■ Healthy breakfast or a fry-up?
I have a nice cleansing bacon butty.
Very healthy.
And I like an omelette sandwich.
One egg, whipped up, flip it over, in between bread and butter, heaven.
Very good for you.
■ Lunch out or roast at home?
We don’t usually have lunch.
We have dinner about teatime.
I do most of the cooking, I’m a bit of a chef.
Garlic lamb served on a bed of onions and potatoes is my speciality.
It’s gorgeous with loads of gravy.
■ Chores or relaxing?
I relax after work.
I’ve been very busy with all the Freshers’ Week gigs.
Sue has all the washing and ironing to do when we’re back after DJ tours – she always comes with me, so she’s never resting.
But I do the cooking.
■ TV or papers?
Rubbish TV please.
Gold Rush is my guilty pleasure, and I watch it on an endless loop, which drives Sue mad.
She loves the Women Who Kill series and crime documentaries…
I need to watch my back!
- Marie Curie can help you think, talk and plan for the end of life. It’s never too soon, until it’s too late. Visit Mariecurie.org.uk/talkabout to find ideas and tools to help you get started, or call the Marie Curie Support Line free on 0800 090 2309.


Extension methods marked with an @ExtensionDefinition
annotation contain the logic to be executed by the Rexster. To do anything useful an extension method must have access to the resources that Rexster has to from the context of the request, the general graph configuration and other such parameters. Extension methods access these resources through method parameters that are marked with the @RexsterContext
or @ExtensionRequestParameter
annotations. Rexster will read these marked parameters and try to inject an object based on its type.
Parameters marked with one of these annotation that is not one of an expected type (described more below) will be set to null (unless a default value is specified). Furthermore, parameters that are not marked by annotation at all will be set to null.
The @RexsterContext
annotation tells Rexster to inject resources internal to Rexster to the extension method and can be applied to parameters of the following types:
| type | description |
|---|---|
| Graph | The requested blueprints graph. |
| RexsterApplicationGraph | The requested blueprints graph. |
| ExtensionMethod | Provides access to the reflected Method as well as the ExtensionDefinition and ExtensionDescriptor . It also provides the getExtensionApiAsJson helper method for getting API information to return as JSON. |
| UriInfo | The requested URI. |
| HttpServletRequest | The actual servlet request made. |
| SecurityContext | Allows access to the name of the user who logged in (if authentication services are turned on). |
| RexsterResourceContext | A container for the UriInfo , HttpServletRequest , ExtensionMethod , RexsterApplicationGraph , SecurityContext and two request objects: one that is mapped to JSON and one that just contains the raw values passed to Rexster |
| Edge | The requested edge given a GRAPH or EDGE @ExtensionPoint . |
| Vertex | The requested edge given a GRAPH or EDGE @ExtensionPoint . |
Consider the following example taken from the SimpleRootExtension
extension in the Sample Kibbles project:
public ExtensionResponse doWorkOnGraph(@RexsterContext Graph graph) {
In this example, Rexster will inject the Graph
object from the request into the doWorkOnGraph
method.
The @ExtensionRequestParameter
annotation tells Rexster to inject parameters from the request object into a parameter. This annotation takes several parameters: name
, an optional description
, defaultValue
and parseToJson
. The name
refers to the key in the root of the request object. Rexster will try to coerce values from the request object into the specified type of the parameter. The following types are supported:
The defaultValue
allows specification of a default for that parameter if the parameter is not supplied on the request. This parameter takes a string, but the value will be coerced to the data type of the value to which the annotation is attached. If this value cannot be coerced, then it will be defaulted to null.
It is important to note that defaultValue
parameter takes an array of strings as its value. This is a workaround to a shortcoming of Java that prevents a null
assignment to annotation parameters. If no value, is specified, the defaultValue
is actually an empty array, which Rexster will evaluate to null
. If there is more than one value, only the first value in the array is taken into account.
The parseToJson
parameter is defaulted to true
and when set as such, tells Rexster to inject the value of the parameter as mapped from JSON. When set to false
, Rexster will inject the raw value of the parameter without the mapping. This is especially useful when dealing with parameters that contain characters that incorrectly parse to JSON when a string value is really what is needed.
Consider this snippet from the PingExtension
in the Sample Kibbles project:
@ExtensionDefinition(extensionPoint = ExtensionPoint.GRAPH)
@ExtensionDescriptor(description = "Ping me.")
public ExtensionResponse evaluatePing(@RexsterContext RexsterResourceContext context,
@RexsterContext Graph graph,
@ExtensionRequestParameter(name="reply", description="a value to reply with") String reply) {
Map<String, String> map = new HashMap<String, String>();
map.put("ping", reply);
return ExtensionResponse.ok(map);
}
When accessing this URI:
http://localhost:8182/graphs/mygraph/ex/ping?reply=ping-a-ling
The value of the reply
URI query string parameter, “ping-a-ling” is injected into the reply
method parameter on the extension.
The next example demonstrates usage of the defaultValue
parameter on the ExtensionRequestParameter
. This example is taken from the ParametersExtension
in the Sample Kibbles project.
@ExtensionDefinition(extensionPoint = ExtensionPoint.GRAPH, path = "object-default")
@ExtensionDescriptor(description = "pass an object parameter to be used in the response.")
public ExtensionResponse evaluateSomeObjectWithDefaults(@RexsterContext RexsterResourceContext context,
@RexsterContext Graph graph,
@ExtensionRequestParameter(name = "a", defaultValue = "1", description = "an integer to reply with") Integer reply,
@ExtensionRequestParameter(name = "b", defaultValue = "{ 85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;a85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;:85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;marko85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;,85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;b85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;:true, 85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;c85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;: { 85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;a85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot; : 85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;peter85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot; } }", description = "an object to reply with") JSONObject replyObject,
@ExtensionRequestParameter(name = "c", defaultValue = "[ 85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;marko85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;,85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot;povel85fce56a8c37ac3cacd82b1c0ac804a4755dfacdquot; ]", description = "a list to reply with") JSONArray replyList) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("a", reply);
map.put("b", replyObject);
map.put("c", replyList);
return ExtensionResponse.ok(map);
}
Note that the defaultValue
is specified by a string for all three parameters. Rexster will coerce those values to their appropriate data types. So therefore resolving:
http://localhost:8182/graphs/tinkergraph/tp-sample/parameters/object
will return:
{
"a":1,
"b": {
"a":"marko",
"b":true,
"c": { "a":"peter" }
},
"c": [ "marko", "povel" ]
}
or alternatively, resolving this URI:
http://localhost:8182/graphs/tinkergraph/tp-sample/parameters/object?a=100
will return:
{
"a":100,
"b": {
"a":"marko",
"b":true,
"c": { "a":"peter" }
},
"c": [ "marko", "povel" ]
}


FAQ
Links
probably should never be asked:
About Anole
return home
documentation
select one:
getting started
templates:
basic website
mobile app.
navigation:
.an-anchorpoint
spacing:
.an-spacer
grid system
text formatting:
.an-text
containers
basic
boxes
codeblocks
generic
components
basic
an-reveal family
buttons/menus
labels
sidebars
tips
titles
extend anole
CSS
standard themes
creating themes
css extensions
Javascript
js extensions
"easter eggs"
mobile
---
about anole
choose one
FAQ
why anole?
---
github project
Report bugs, contribute, or just get the code.
visit my website
rolandixor.pro
documentation:
getting started
containers
components
about anole:
FAQ
why anole?
---


Multiple audio players (one track each)
Having multiple players on a single page might be fun for producing on-the-fly mashups. However, only the first player can be operated with keystrokes, which might be confusing for users. Although Able Player supports multiple player instances, they're discouraged. Use playlists instead.


class: center, middle htmlcc ====== `manuel-m
` [https://github.com/manuel-m/htmlcc](https://github.com/manuel-m/htmlcc) --- Overview ======== * Embeddable http server used to display/trigger user commands via a web interface Goals ===== * Micro stand-alone http server * One binary file only, web content (html/javascript/css) is embedded into the code * No dependency required * Linux and windows Build instructions ================== ./bootstrap && ./configure && make test binaries are generated into bin Sample code =========== [test_ahe](https://github.com/manuel-m/htmlcc/blob/master/src/tests/test_ahe.c)


Registration
User
Registration saved! Please check your email for
confirmation.
Registration failed! Please try again later.
Login name already registered! Please choose
another one.
Email is already in use! Please choose another one.
The password
and its confirmation do not match!


Private Data XHTML Messages Message Events Data Forms Multi User Chat Roster Item Exchange Time Exchange Group Chat Invitations Service Discovery File Transfer PubSub


Overview
What is Pebble?
Pebble is a lightweight, open source, Java EE blogging tool. It's small, fast and feature-rich with unrivalled ease of installation and use. Blog content is stored as XML files on disk and served up dynamically, so there's no need to install a database. All maintenance and administration can be performed through your web browser, making Pebble ideal for anybody who is constantly on the move or doesn't have direct access to their host. You can see an example blog here.
Download now and you can be blogging in less than 5 minutes.
Quickstart with Tomcat
- Take the
pebble.war
file from the distribution and deploy it, by copying it to$TOMCAT_HOME/webapps
. - Restart Tomcat and point your browser to
http://localhost:8080/pebble/
. - Start blogging by logging in with a username of
username
and a password ofpassword
.
Minimum requirements
- Java 5.0
- A JSP 2.0/Servlet 2.4 compatible web/application server such as Apache Tomcat 5.5.x
Features
What does it do?
Here is a summary of the key features that are supported by Pebble.
Content
- Posting and management of content through your web browser, including rich text editor support.
- Blogger and MetaWeblog API interface included for posting content via compatible tools.
- Categorisation of content into multiple hierarchical categories.
- Tagging of content and a generation of a tagcloud.
- RSS enclosures for distributing files or podcasting.
- Simple content publication workflow.
- Pinging websites via XML-RPC when new blog entries are added.
- Publication of static content alongside your blog entries.
- Link to your favorite social bookmarking site
Reader responses
- Reader responses, in the form of threaded comments and MovableType TrackBacks.
- E-mail notifications when new responses are received.
- Pluggable moderation, spam detection and CAPTCHA support.
- Bulk response management features to approve/reject/remove comments and TrackBacks.
Web-based Adminstration
- Management of your blog via a web browser.
- File management and the ability to upload arbitary files and images.
- Capture of blog referers, requests and logs for viewing or export.
- Customizable regex based referer filters to combat referer spam.
- Integrated help and documentation.
Newsfeeds
- RSS 2.0, RDF and Atom 1.0 feeds for blog entries and responses.
- Category and tag specific newsfeeds.
- Syndicate external newsfeeds.
Navigation
- View blog entries by permalink, day or month.
- Navigate through your blog entries in several ways, including a locale-aware calendar control.
- Text based and advanced searching.
Team, project, multi-user blogs and security
- Multiple people can contribute to a single blog.
- Host more than a single blog for a project, group or community.
- Integrate Pebble with your existing security infrastructure (e.g. LDAP, Active Directory, RDBMS, etc).
i18n
- Content in international character sets such as UTF-8.
- Publication of content aligned with your timezone, regardless of where your host is based.
- Locale sensitive delivery of dates, times and numbers.
- Translated public-facing text (and partially to the admin interface)
provides a consistent user experience in a single language, including:
- Chinese (Simplified)
- Chinese (Traditional)
- Danish
- Dutch
- English
- Finnish
- French
- German
- Hindi
- Hungarian
- Italian
- Japanese
- Mongolian
- Norwegian
- Russian
- Polish
- Portuguese
- Portuguese/Brazil
- Slovak
- Spanish
- Spanish/Spain
- Swedish
Entries in bold are as-complete-as-possible in version 2.4.0. If you want to provide translations to more languages, please contact the pebble-user mailing list.
Plugin APIs
- Permalink Providers let you customize the format of your permalinks.
- Content Decorators let you customize how blog entries are displayed.
- Blog Listeners let you write Java code that is called when your blog starts up and shuts down.
- Blog Entry Listeners let you write Java code that is called when blog entries are added, removed, published and unpublished.
- Comment Listeners let you write Java code that is called when comments are added, removed, approved and rejected.
- TrackBack Listeners let you write Java code that is called when TrackBacks are added, removed, approved and rejected.
- Confirmation Strategies let you plugin different strategies for readers to confirm their comments/TrackBacks, such as CAPTCHAs.


A little over a year ago I decided to make a huge change in my life and enrolled in a 12-week course at The Iron Yard Academy. The road to code, as I like to call it, was challenging, difficult, and probably the best decision I have ever made. Over the past three months I have been completely immersed in all things code. After graduating the course I’m happy and proud to say I have a solid understanding of web technologies such as HTML, CSS, and Javascript. I plan to continually learn to become the best developer I can be. Onward.


Making neural nets uncool again
Make Deep Learning More accesible
Top down learning
AI,Machine Learning,Deep Learning
Cats vs Dogs
Fine Tuning
Fine tuning is a process to take a network model that has already been trained for a given task, and make it perform a second similar task.
VGG16
Model trained on imagenet.
Won ImageNet Large Scale Visual Recognition Competition in 2014.
Live Demo
Sample notebook
To summarize
- Deep learning Using Keras
- Deep learning methodologies
- Finetuning
- Vgg16
- Imagenet


This directory used to contain the editor's extensions for PRADO.
They have been moved elsewhere; we suggest you to download the most up-to-date versions at PRADO's google code page
Currently we provide extensions for the following editors:


About
Hi, I'm Tom Ahmed! I'm a newly graduated software developer looking to put my newly acquired knowledge to work. So far, my experience has been in web and app development, but I'm always looking to broaden my horizons. On the non-coding side, I have academic experience in everything from requirements engineering to quality assurance


Before Change
// overwrite this since torch MVN uses unbroadcasted_scale_tril for this
diag = self.lazy_covariance_matrix.diag()
diag = diag.view(diag.shape[:-1] + self._event_shape)
return diag.expand(self._batch_shape + self._event_shape)
else:
return super().variance
def __add__(self, other):
After Change
// overwrite this since torch MVN uses unbroadcasted_scale_tril for this
diag = self.lazy_covariance_matrix.diag()
diag = diag.view(diag.shape[:-1] + self._event_shape)
variance = diag.expand(self._batch_shape + self._event_shape)
else:
variance = super().variance
// Check to make sure that variance isn"t lower than minimum allowed value (default 1e-6).
// This ensures that all variances are positive
min_variance = settings.min_variance.value(variance.dtype)
if variance.lt(min_variance).any():
warnings.warn(
f"Negative variance values detected. "
"This is likely due to numerical instabilities. "
f"Rounding negative variances up to {min_variance}."
)
variance = variance.clamp_min(min_variance)
return variance
def __add__(self, other):
if isinstance(other, MultivariateNormal):
return self.__class__(


{% extends "file_uploads/council_user_base.html" %} {% block council_content %}
Welcome to Democracy Club’s new polling station uploader tool! We hope this will streamline the process for providing your lists of polling places to us.
Information on how to export the necessary files can be found on our website. All you need to do is export the polling station data from your EMS, and upload it via the tool.
If you have any questions please get in touch.
That's it! You've sent us your data. We'll provide email confirmation, and will let you know once your stations are live on the finder.
Each time you log in we will email you a new 'magic link'. Check your emails for an email from us that contains the link. Click the link to log in. This link will remain live for two hours.
When you log in, we automatically assign you to the council which relates to your email address. If you are responsible for polling station data for more than one council, please get in touch with the necessary details and we'll give you permission to upload data for them.
Once logged in, you are presented with a page that displays your public contact information (drawn from The Electoral Commission website) and the status of any existing uploads.
If we have upcoming elections in our system for your council then you'll see an upload button. Press this to select and upload the export from your EMS.
Once uploaded, the system performs some automatic checks to make sure the export is in the correct format. Once these checks are complete, the file does not get added to the polling station finder automatically. Our developers will have to process it manually. This could take up to a couple of weeks depending on how busy we are.
When the data is live on the site we will contact you via email to let you know. At that point you can log back in and check an example page for each polling station. If you want to see a map, you will need to add UPRNs or co-ordinates for each station in your EMS before exporting the file.
All data is removed immediately after the election it is assigned to is over. We always err on the side of caution, and will not display information if we are at all unsure about it.
Please note the finder does not at present cover standalone town, parish, or community council elections, or other forms of local polls (eg. planning referendums).
Democracy Club’s WhereDoIVote.co.uk allows voters to find their assigned polling station using nothing more than a postcode. The data you provide also powers the postcode look-up on The Electoral Commission voter pages, and is available for other organisations to use, free of charge.
You can add our polling station widget to your own website for free.
{% endblock %}


Neural Algorithm Selection
Code editor
reachability
Select Dataset
Select Model
Select layer
Prediction is not finished.


EMPLOYEE Add records Update records EQUIPMENT Add records Update records REPORT Add records Update records DELETE


Chicken
Meat is a good source of protein, vitamins and minerals in your diet. However, if you currently eat more than 90g (cooked weight) of red and processed meat a day, the Department of Health advises that you cut down to 70g, which is the average daily consumption in the UK. Making healthier choices can help you eat meat as part of a healthy, balanced diet. But some meats are high in saturated fat, which can raise blood cholesterol levels. If you eat a lot of red and processed meat, it is recommended that you cut down as there is likely to be a link between red and processed meat and bowel cancer. Meats such as chicken, pork, lamb and beef are all rich in protein. A balanced diet can include protein from meat, as well as from non-animal sources such as beans and pulses. Red meat provides us with iron, and meat is also one of the main sources of vitamin B12. Food hygiene is important when storing, preparing and cooking meat.  Eating a lot of saturated fat can raise cholesterol levels in the blood, and having high cholesterol raises your risk of heart disease. The type of meat product you choose and how you cook it can make a big difference to the saturated fat content. Make healthier choices when buying meat When buying meat, go for the leanest option. As a rule, the more white you can see on meat, the more fat it contains.    Red meat (such as beef, lamb and pork) can form part of a healthy diet. But eating a lot of red and processed meat probably increases your risk of bowel (colorectal) cancer. Processed meat refers to meat that has been preserved by smoking, curing, salting or adding preservatives. This includes sausages, bacon, ham, salami and pâtés. If you currently eat more than 90g (cooked weight) of red and processed meat a day, the Department of Health advises that you cut down to 70g, which is the average daily consumption in the UK. Ninety grams is equivalent to around three thinly cut slices of beef, lamb or pork, where each slice is about the size of half a piece of sliced bread. A cooked breakfast containing two typical British sausages and two rashers of bacon is equivalent to 130g. For more information, read Red meat and bowel cancer risk. Storing meat safely It's important to store and prepare meat safely to stop bacteria from spreading and to avoid food poisoning: store raw meat or raw poultry in clean sealed containers on the bottom shelf of the fridge, so the meat can't touch or drip onto other food follow any storage instructions on the label and don't eat meat after its "use by" date if you cook meat that you're not going to eat straight away, cool it as quickly as possible and then put it in the fridge or freezer – remember to keep cooked meat separate from raw meat always thoroughly clean plates, utensils, surfaces and hands straight away after they have touched raw or thawing meat to stop bacteria from spreading.


Your search - "<%= query %>" - did not match any experiments.
Suggestions
- Verify the keywords used. Is it the right accession number, for example?
- Try different keywords. How about words in the experiment's title?
- ">Contact us if the query refers to an experiment that should be included in the database.


A Passionate Full Stack Web Developer with a web development certification from University of Washington, based in Redmond, WA. Graduated with Bachelor of Engineering in Information Technology from JNTU Kakinada, India. Worked as a Junior Software Engineer for 2 years in Steria, India.
Strong ability to design, build, and maintain websites from conception to production. Ability to work in a fast-paced and diverse team environment developing solutions and exceeding expectations.
My portfolio features JavaScript & JQuery, HTML, CSS, SQL / NoSQL Databases, MERN: Mongo, Express, Node, React and polished UI interfaces. My work is available here.


{% extends "wagtailadmin/edit_handlers/field_panel_field.html" %} {% load i18n %} {% comment %} Either the chosen or unchosen div will be shown, depending on the presence of the 'blank' class on the container. Any element with the 'action-choose' class will open the page chooser modal when clicked. {% endcomment %} {% block form_field %}


Psalms 55:20
He hath put forth his hands against such as be at peace with him: he hath broken his covenant.


Popup window Example
Put the mouse over and out from the download image to see the popup fade in and out of view.
File:
Javascript lections 1.1.zip
Date:
11/30/17
Size:
17 MB
Req:
Windows 10.4+


This web site allows you to automatically, and provably, pray.
Copies of prayers are cryptographically hashed, together with unique information provided by you, to produce a hash value. This hash value, together with the specification of what hashing was done to produce it, can be used by anyone to mathematically verify that the given number of copies of the given prayer were run through the hash function.
Fill out the form below to pray. The prayer you select will be prayed in your name, by computer, the number of times you select.
You will receive a proof-of-prayer that you can copy and paste, for later verification.
Click in the box below to select and copy your proof.
If you have received a proof-of-prayer, you can use the form below to verify that the corresponding number of prayers were indeed prayed.
Simply paste the proof into the box below, and click on "Verify".


{% load static %} {% load compress %}
If your native app is intended for broad UW use, consider publication in the UW Developer App Store.


Train a superpixel CRF from validation images. If validation images are not available, uses training images.
BK = BLOCK_TRAIN_CRF() Initializes the block with the default options.
BK = BLOCK_TRAIN_CRF(BK) Executes the block with options and inputs BK.
Required inputs:
- db
The database.
- segloc
The unary potentials, in the form output by BLOCK_TEST_SEGLOC()
- histq
Superpixel histograms.
- qseg
Quick shift superpixels.
Options:
- bk.method
The training method. Valid methods are: static, gridsearch. Default 'gridsearch'.
- bk.goal
The training goal to optimize. Valid goals are: meanacc, intersection-union. Default 'intersection-union'.
- bk.luv
Should the color difference be in the LUV space? Default 1.
- bk.max_images
If there are more than max_images in the validation or training data, select max_images and use those. Default 1000.
Fetchable attributes:
- params
The learned parameters of the CRF.
- paramspace
A structure containing the parameters tried at each iteration.


When using graphql-tools
, you have to create a resolvers map manually.
The following example is copied & pasted from the Apollo documentation where you can read more about it:
{{ resolversMapExample }}
With the @nestjs/graphql
package, the resolvers map is generated automatically using the metadata.
Let's rewrite the above example with the equivalent Nest-way code.
{{ resolvers }}
The @Resolver()
decorator doesn't affect queries and mutations.
It only tells Nest that each @ResolveProperty()
has a parent, which is an Author
in this case.
Hint If you use the@Resolver()
decorator, you don't have to mark a class as a@Injectable()
, otherwise, it's necessary.
Conventionally, we would use something like a getAuthor()
or getPosts()
as a method names.
We can do that easily as well:
{{ resolversWithNames }}
Hint The @Resolver()
decorator can be used at the method-level as well.
The idea behind the above code is to show the differences between the Apollo and the Nest-way to allow for a simple transition of your code. Right now, we're gonna do a small refactor to take advantages of the Nest architecture, to make it a real-world example.
{{ realWorldExample }}
{{ realWorldExampleJs }}
Now we have to register the AuthorResolver
somewhere, for example inside the newly created AuthorsModule
.
{{ authorsModule }}
The GraphQLModule
will take care of reflecting the metadata and transforming class into the correct resolvers map automatically.
The only thing you have to do is to import this module somewhere, therefore Nest will know that AuthorsModule
exists.
The last missing piece is a type definitions (read more) file. Let's create it near to the resolver class.
author-types.graphql{{ typeDefs }}
That's all. We created a single author(id: Int!)
query.
Hint Learn more about GraphQL queries here.


Pure CSS Circle Layout
Please modify the SCSS file ./src/components/circle-layout/scss/_style.scss
to change the size and display number.
JavaScript Circle Layout
Properties data-circle-layout-display
, data-circle-layout-radius
, data-circle-layout-radius-c
and data-circle-layout-rotation
are used to set the display number, size and rotation angle. Support dynamically adding elements.


The following document contains the results of FindBugs
FindBugs Version is 3.0.0
Threshold is
Effort is max
| Class | Bugs |
|---|---|
| com.google.zxing.common.DefaultGridSampler | 1 |
| com.google.zxing.pdf417.PDF417Common | 1 |
| Bug | Category | Details | Line | Priority |
|---|---|---|---|---|
| Integral division result cast to double or float in com.google.zxing.common.DefaultGridSampler.sampleGrid(BitMatrix, int, int, PerspectiveTransform) | STYLE | ICAST_IDIV_CAST_TO_DOUBLE | 60 | Medium |
| Bug | Category | Details | Line | Priority |
|---|---|---|---|---|
| com.google.zxing.pdf417.PDF417Common.SYMBOL_TABLE is a mutable array | MALICIOUS_CODE | MS_MUTABLE_ARRAY | 80 | Medium |


Chapter 12 Linear model 3
12.1 Learning goals
- Linear model with one multi-level categorical predictor (One-way ANOVA).
- Linear model with multiple categorical predictors (N-way ANOVA).
- dummy-coding vs. effect-coding
- planned contrasts
- ANOVA with unbalanced designs
12.2 Load packages and set plotting theme
library("knitr") # for knitting RMarkdown
library("kableExtra") # for making nice tables
library("janitor") # for cleaning column names
library("broom") # for tidying up linear models
library("car") # for running ANOVAs
library("afex") # also for running ANOVAs
library("emmeans") # for calculating constrasts
library("tidyverse") # for wrangling, plotting, etc.
12.3 Load data sets
df.poker = read_csv("data/poker.csv") %>%
mutate(skill = factor(skill,
levels = 1:2,
labels = c("expert", "average")),
skill = fct_relevel(skill, "average", "expert"),
hand = factor(hand,
levels = 1:3,
labels = c("bad", "neutral", "good")),
limit = factor(limit,
levels = 1:2,
labels = c("fixed", "none")),
participant = 1:n()) %>%
select(participant, everything())
df.poker.unbalanced = df.poker %>%
filter(!participant %in% 1:10)
Selection of the data:
df.poker %>%
group_by(skill, hand, limit) %>%
filter(row_number() < 3) %>%
head(10) %>%
kable(digits = 2) %>%
kable_styling(bootstrap_options = "striped",
full_width = F)
| participant | skill | hand | limit | balance |
|---|---|---|---|---|
| 1 | expert | bad | fixed | 4.00 |
| 2 | expert | bad | fixed | 5.55 |
| 26 | expert | bad | none | 5.52 |
| 27 | expert | bad | none | 8.28 |
| 51 | expert | neutral | fixed | 11.74 |
| 52 | expert | neutral | fixed | 10.04 |
| 76 | expert | neutral | none | 21.55 |
| 77 | expert | neutral | none | 3.12 |
| 101 | expert | good | fixed | 10.86 |
| 102 | expert | good | fixed | 8.68 |
12.4 One-way ANOVA
12.4.1 Visualization
df.poker %>%
ggplot(mapping = aes(x = hand,
y = balance,
fill = hand)) +
geom_point(alpha = 0.2,
position = position_jitter(height = 0, width = 0.1)) +
stat_summary(fun.data = "mean_cl_boot",
geom = "linerange",
size = 1) +
stat_summary(fun = "mean",
geom = "point",
shape = 21,
size = 4) +
labs(y = "final balance (in Euros)") +
scale_fill_manual(values = c("red", "orange", "green")) +
theme(legend.position = "none")
12.4.2 Model fitting
We pass the result of the lm()
function to anova()
to calculate an analysis of variance like so:
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## hand 2 2559.4 1279.7 75.703 < 2.2e-16 ***
## Residuals 297 5020.6 16.9
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
12.4.3 Hypothesis test
The F-test reported by the ANOVA compares the fitted model with a compact model that only predicts the grand mean:
# fit the models
fit_c = lm(formula = balance ~ 1, data = df.poker)
fit_a = lm(formula = balance ~ hand, data = df.poker)
# compare via F-test
anova(fit_c, fit_a)
## Analysis of Variance Table
##
## Model 1: balance ~ 1
## Model 2: balance ~ hand
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 299 7580.0
## 2 297 5020.6 2 2559.4 75.703 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
12.4.4 Visualize the model’s predictions
Here is the model prediction of the compact model:
set.seed(1)
df.plot = df.poker %>%
mutate(hand_jitter = 1 + runif(n(), min = -0.25, max = 0.25))
df.augment = fit_c %>%
augment() %>%
clean_names() %>%
bind_cols(df.plot %>% select(balance, hand, hand_jitter))
ggplot(data = df.plot,
mapping = aes(x = hand_jitter,
y = balance,
fill = hand)) +
geom_hline(yintercept = mean(df.poker$balance)) +
geom_point(alpha = 0.5) +
geom_segment(data = df.augment,
aes(xend = hand_jitter,
yend = fitted),
alpha = 0.2) +
labs(y = "balance") +
theme(legend.position = "none",
axis.text.x = element_blank(),
axis.title.x = element_blank())
Note that since we have a categorical variable here, we don’t really have a continuous x-axis. I’ve just jittered the values so it’s easier to show the residuals.
And here is the prediction of the augmented model (which predicts different means for each group).
set.seed(1)
df.plot = df.poker %>%
mutate(hand_jitter = hand %>% as.numeric(),
hand_jitter = hand_jitter + runif(n(), min = -0.4, max = 0.4))
df.tidy = fit_a %>%
tidy() %>%
select_if(is.numeric) %>%
mutate_all(~ round(., digits = 2))
df.augment = fit_a %>%
augment() %>%
clean_names() %>%
bind_cols(df.plot %>% select(hand_jitter))
ggplot(data = df.plot,
mapping = aes(x = hand_jitter,
y = balance,
color = hand)) +
geom_point(alpha = 0.8) +
geom_segment(data = NULL,
aes(x = 0.6,
xend = 1.4,
y = df.tidy$estimate[1],
yend = df.tidy$estimate[1]
),
color = "red",
size = 1) +
geom_segment(data = NULL,
aes(x = 1.6,
xend = 2.4,
y = df.tidy$estimate[1] + df.tidy$estimate[2],
yend = df.tidy$estimate[1] + df.tidy$estimate[2]
),
color = "orange",
size = 1) +
geom_segment(data = NULL,
aes(x = 2.6,
xend = 3.4,
y = df.tidy$estimate[1] + df.tidy$estimate[3],
yend = df.tidy$estimate[1] + df.tidy$estimate[3]
),
color = "green",
size = 1) +
geom_segment(data = df.augment,
aes(xend = hand_jitter,
y = balance,
yend = fitted),
alpha = 0.3) +
labs(y = "balance") +
scale_color_manual(values = c("red", "orange", "green")) +
scale_x_continuous(breaks = 1:3, labels = c("bad", "neutral", "good")) +
theme(legend.position = "none",
axis.title.x = element_blank())
The vertical lines illustrate the residual sum of squares.
We can illustrate the model sum of squares like so:
set.seed(1)
df.plot = df.poker %>%
mutate(hand_jitter = hand %>% as.numeric(),
hand_jitter = hand_jitter + runif(n(), min = -0.4, max = 0.4)) %>%
group_by(hand) %>%
mutate(mean_group = mean(balance)) %>%
ungroup() %>%
mutate(mean_grand = mean(balance))
df.means = df.poker %>%
group_by(hand) %>%
summarize(mean = mean(balance)) %>%
pivot_wider(names_from = hand,
values_from = mean)
ggplot(data = df.plot,
mapping = aes(x = hand_jitter,
y = mean_group,
color = hand)) +
geom_point(alpha = 0.8) +
geom_segment(data = NULL,
mapping = aes(x = 0.6,
xend = 1.4,
y = df.means$bad,
yend = df.means$bad),
color = "red",
size = 1) +
geom_segment(data = NULL,
mapping = aes(x = 1.6,
xend = 2.4,
y = df.means$neutral,
yend = df.means$neutral),
color = "orange",
size = 1) +
geom_segment(data = NULL,
mapping = aes(x = 2.6,
xend = 3.4,
y = df.means$good,
yend = df.means$good),
color = "green",
size = 1) +
geom_segment(mapping = aes(xend = hand_jitter,
y = mean_group,
yend = mean_grand),
alpha = 0.3) +
geom_hline(yintercept = mean(df.poker$balance),
size = 1) +
labs(y = "balance") +
scale_color_manual(values = c("red", "orange", "green")) +
scale_x_continuous(breaks = 1:3, labels = c("bad", "neutral", "good")) +
scale_y_continuous(breaks = c(0, 10, 20), labels = c(0, 10, 20), limits = c(0, 25)) +
theme(legend.position = "none",
axis.title.x = element_blank())
This captures the variance in the data that is accounted for by the hand
variable.
Just for kicks, let’s calculate our cherished proportion of reduction in error PRE:
df.c = fit_c %>%
augment() %>%
clean_names() %>%
summarize(sse = sum(resid^2) %>% round)
df.a = fit_a %>%
augment() %>%
clean_names() %>%
summarize(sse = sum(resid^2) %>% round)
pre = 1 - df.a$sse/df.c$sse
print(pre %>% round(2))
## [1] 0.34
Note that this is the same as the \(R^2\) for the augmented model:
##
## Call:
## lm(formula = balance ~ hand, data = df.poker)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.9264 -2.5902 -0.0115 2.6573 15.2834
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.9415 0.4111 14.451 < 2e-16 ***
## handneutral 4.4051 0.5815 7.576 4.55e-13 ***
## handgood 7.0849 0.5815 12.185 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.111 on 297 degrees of freedom
## Multiple R-squared: 0.3377, Adjusted R-squared: 0.3332
## F-statistic: 75.7 on 2 and 297 DF, p-value: < 2.2e-16
12.4.5 Dummy coding
Let’s check that we understand how dummy-coding works for a variable with more than 2 levels:
# dummy code the hand variable
df.poker = df.poker %>%
mutate(hand_neutral = ifelse(hand == "neutral", 1, 0),
hand_good = ifelse(hand == "good", 1, 0))
# show the dummy coded variables
df.poker %>%
select(participant, contains("hand"), balance) %>%
group_by(hand) %>%
top_n(3) %>%
head(10) %>%
kable(digits = 3) %>%
kable_styling(bootstrap_options = "striped",
full_width = F)
## Selecting by balance
| participant | hand | hand_neutral | hand_good | balance |
|---|---|---|---|---|
| 31 | bad | 0 | 0 | 12.22 |
| 46 | bad | 0 | 0 | 12.06 |
| 50 | bad | 0 | 0 | 16.68 |
| 76 | neutral | 1 | 0 | 21.55 |
| 87 | neutral | 1 | 0 | 20.89 |
| 89 | neutral | 1 | 0 | 25.63 |
| 127 | good | 0 | 1 | 26.99 |
| 129 | good | 0 | 1 | 21.36 |
| 283 | good | 0 | 1 | 22.48 |
# fit the model
fit.tmp = lm(balance ~ 1 + hand_neutral + hand_good, df.poker)
# show the model summary
fit.tmp %>%
summary()
##
## Call:
## lm(formula = balance ~ 1 + hand_neutral + hand_good, data = df.poker)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.9264 -2.5902 -0.0115 2.6573 15.2834
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.9415 0.4111 14.451 < 2e-16 ***
## hand_neutral 4.4051 0.5815 7.576 4.55e-13 ***
## hand_good 7.0849 0.5815 12.185 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.111 on 297 degrees of freedom
## Multiple R-squared: 0.3377, Adjusted R-squared: 0.3332
## F-statistic: 75.7 on 2 and 297 DF, p-value: < 2.2e-16
Here, I’ve directly put the dummy-coded variables as predictors into the lm()
. We get the same model as if we used the hand
variable instead.
12.4.6 Follow up questions
Here are some follow up questions we may ask about the data.
Are bad hands different from neutral hands?
df.poker %>%
filter(hand %in% c("bad", "neutral")) %>%
lm(formula = balance ~ hand,
data = .) %>%
summary()
##
## Call:
## lm(formula = balance ~ hand, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.9566 -2.5078 -0.2365 2.4410 15.2834
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.9415 0.3816 15.570 < 2e-16 ***
## handneutral 4.4051 0.5397 8.163 3.76e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.816 on 198 degrees of freedom
## Multiple R-squared: 0.2518, Adjusted R-squared: 0.248
## F-statistic: 66.63 on 1 and 198 DF, p-value: 3.758e-14
Are neutral hands different from good hands?
df.poker %>%
filter(hand %in% c("neutral", "good")) %>%
lm(formula = balance ~ hand,
data = .) %>%
summary()
##
## Call:
## lm(formula = balance ~ hand, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.9264 -2.7141 0.2585 2.7184 15.2834
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.3466 0.4448 23.26 < 2e-16 ***
## handgood 2.6798 0.6291 4.26 3.16e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.448 on 198 degrees of freedom
## Multiple R-squared: 0.08396, Adjusted R-squared: 0.07933
## F-statistic: 18.15 on 1 and 198 DF, p-value: 3.158e-05
Doing the same thing by recoding our hand factor and taking “neutral” to be the reference category:
df.poker %>%
mutate(hand = fct_relevel(hand, "neutral")) %>%
lm(formula = balance ~ hand,
data = .) %>%
summary()
##
## Call:
## lm(formula = balance ~ hand, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.9264 -2.5902 -0.0115 2.6573 15.2834
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.3466 0.4111 25.165 < 2e-16 ***
## handbad -4.4051 0.5815 -7.576 4.55e-13 ***
## handgood 2.6798 0.5815 4.609 6.02e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.111 on 297 degrees of freedom
## Multiple R-squared: 0.3377, Adjusted R-squared: 0.3332
## F-statistic: 75.7 on 2 and 297 DF, p-value: < 2.2e-16
12.4.7 Variance decomposition
Let’s first run the model
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## hand 2 2559.4 1279.7 75.703 < 2.2e-16 ***
## Residuals 297 5020.6 16.9
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
<IP_ADDRESS> Calculate sums of squares
And then let’s make sure that we understand how the variance is broken down:
df.poker %>%
mutate(mean_grand = mean(balance)) %>%
group_by(hand) %>%
mutate(mean_group = mean(balance)) %>%
ungroup() %>%
summarize(variance_total = sum((balance - mean_grand)^2),
variance_model = sum((mean_group - mean_grand)^2),
variance_residual = variance_total - variance_model)
## # A tibble: 1 x 3
## variance_total variance_model variance_residual
## <dbl> <dbl> <dbl>
## 1 7580. 2559. 5021.
<IP_ADDRESS> Visualize model predictions
<IP_ADDRESS>.1 Total variance
set.seed(1)
fit_c = lm(formula = balance ~ 1,
data = df.poker)
df.plot = df.poker %>%
mutate(hand_jitter = 1 + runif(n(), min = -0.25, max = 0.25))
df.augment = fit_c %>%
augment() %>%
clean_names() %>%
bind_cols(df.plot %>% select(balance, hand, hand_jitter))
ggplot(data = df.plot,
mapping = aes(x = hand_jitter,
y = balance,
fill = hand)) +
geom_hline(yintercept = mean(df.poker$balance)) +
geom_point(alpha = 0.5) +
geom_segment(data = df.augment,
aes(xend = hand_jitter,
yend = fitted),
alpha = 0.2) +
labs(y = "balance") +
theme(legend.position = "none",
axis.text.x = element_blank(),
axis.title.x = element_blank())
<IP_ADDRESS>.2 Model variance
set.seed(1)
df.plot = df.poker %>%
mutate(hand_jitter = hand %>% as.numeric(),
hand_jitter = hand_jitter + runif(n(), min = -0.4, max = 0.4)) %>%
group_by(hand) %>%
mutate(mean_group = mean(balance)) %>%
ungroup() %>%
mutate(mean_grand = mean(balance))
df.means = df.poker %>%
group_by(hand) %>%
summarize(mean = mean(balance)) %>%
pivot_wider(names_from = hand,
values_from = mean)
ggplot(data = df.plot,
mapping = aes(x = hand_jitter,
y = mean_group,
color = hand)) +
geom_point(alpha = 0.8) +
geom_segment(data = NULL,
aes(x = 0.6,
xend = 1.4,
y = df.means$bad,
yend = df.means$bad),
color = "red",
size = 1) +
geom_segment(data = NULL,
aes(x = 1.6,
xend = 2.4,
y = df.means$neutral,
yend = df.means$neutral),
color = "orange",
size = 1) +
geom_segment(data = NULL,
aes(x = 2.6,
xend = 3.4,
y = df.means$good,
yend = df.means$good),
color = "green",
size = 1) +
geom_segment(aes(xend = hand_jitter,
y = mean_group,
yend = mean_grand),
alpha = 0.3) +
geom_hline(yintercept = mean(df.poker$balance),
size = 1) +
labs(y = "balance") +
scale_color_manual(values = c("red", "orange", "green")) +
scale_x_continuous(breaks = 1:3, labels = c("bad", "neutral", "good")) +
scale_y_continuous(breaks = c(0, 10, 20), labels = c(0, 10, 20), limits = c(0, 25)) +
theme(legend.position = "none",
axis.title.x = element_blank())
<IP_ADDRESS>.3 Residual variance
set.seed(1)
fit_a = lm(formula = balance ~ hand,
data = df.poker)
df.plot = df.poker %>%
mutate(hand_jitter = hand %>% as.numeric(),
hand_jitter = hand_jitter + runif(n(), min = -0.4, max = 0.4))
df.tidy = fit_a %>%
tidy() %>%
select_if(is.numeric) %>%
mutate_all(~ round(., digits = 2))
df.augment = fit_a %>%
augment() %>%
clean_names() %>%
bind_cols(df.plot %>% select(hand_jitter))
ggplot(data = df.plot,
mapping = aes(x = hand_jitter,
y = balance,
color = hand)) +
geom_point(alpha = 0.8) +
geom_segment(data = NULL,
aes(x = 0.6,
xend = 1.4,
y = df.tidy$estimate[1],
yend = df.tidy$estimate[1]),
color = "red",
size = 1) +
geom_segment(data = NULL,
aes(x = 1.6,
xend = 2.4,
y = df.tidy$estimate[1] + df.tidy$estimate[2],
yend = df.tidy$estimate[1] + df.tidy$estimate[2]),
color = "orange",
size = 1) +
geom_segment(data = NULL,
aes(x = 2.6,
xend = 3.4,
y = df.tidy$estimate[1] + df.tidy$estimate[3],
yend = df.tidy$estimate[1] + df.tidy$estimate[3]),
color = "green",
size = 1) +
geom_segment(data = df.augment,
aes(xend = hand_jitter,
y = balance,
yend = fitted),
alpha = 0.3) +
labs(y = "balance") +
scale_color_manual(values = c("red", "orange", "green")) +
scale_x_continuous(breaks = 1:3, labels = c("bad", "neutral", "good")) +
theme(legend.position = "none",
axis.title.x = element_blank())
12.5 Two-way ANOVA
Now let’s take a look at a case where we have multiple categorical predictors.
12.5.1 Visualization
Let’s look at the overall effect of skill:
ggplot(data = df.poker,
mapping = aes(x = skill,
y = balance)) +
geom_point(position = position_jitter(width = 0.2,
height = 0),
alpha = 0.2) +
stat_summary(fun.data = "mean_cl_boot",
geom = "linerange",
color = "black",
position = position_dodge(0.9)) +
stat_summary(fun = "mean",
geom = "point",
color = "black",
position = position_dodge(0.9),
aes(shape = skill),
size = 3,
fill = "black") +
scale_shape_manual(values = c(21, 22)) +
guides(shape = F)
And now let’s take a look at the means for the full the 3 (hand) x 2 (skill) design:
ggplot(data = df.poker,
mapping = aes(x = hand,
y = balance,
group = skill,
fill = hand)) +
geom_point(position = position_jitterdodge(jitter.width = 0.3,
jitter.height = 0,
dodge.width = 0.9),
alpha = 0.2) +
stat_summary(fun.data = "mean_cl_boot",
geom = "linerange",
color = "black",
position = position_dodge(0.9)) +
stat_summary(fun = "mean",
geom = "point",
aes(shape = skill),
color = "black",
position = position_dodge(0.9),
size = 3) +
scale_fill_manual(values = c("red", "orange", "green")) +
scale_shape_manual(values = c(21, 22)) +
guides(fill = F)
12.5.2 Model fitting
For N-way ANOVAs, we need to be careful about what sums of squares we are using. The standard (based on the SPSS output) is to use type III sums of squares. We set this up in the following way:
lm(formula = balance ~ hand * skill,
data = df.poker,
contrasts = list(hand = "contr.sum",
skill = "contr.sum")) %>%
Anova(type = 3)
## Anova Table (Type III tests)
##
## Response: balance
## Sum Sq Df F value Pr(>F)
## (Intercept) 28644.7 1 1772.1137 < 2.2e-16 ***
## hand 2559.4 2 79.1692 < 2.2e-16 ***
## skill 39.3 1 2.4344 0.1197776
## hand:skill 229.0 2 7.0830 0.0009901 ***
## Residuals 4752.3 294
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
So, we fit our linear model, but set the contrasts to “contr.sum” (which yields effect coding instead of dummy coding), and then specify the desired type of sums of squares in the Anova()
function call.
Alternatively, we could use the afex
package and specify the ANOVA like so:
## Contrasts set to contr.sum for the following variables: hand, skill
## Anova Table (Type 3 tests)
##
## Response: balance
## Effect df MSE F ges p.value
## 1 hand 2, 294 16.16 79.17 *** .35 <.0001
## 2 skill 1, 294 16.16 2.43 .008 .12
## 3 hand:skill 2, 294 16.16 7.08 *** .05 .0010
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
The afex
package uses effect coding and type 3 sums of squares by default.
12.5.3 Interpreting interactions
Code I’ve used to generate the different plots in the competition:
set.seed(1)
b0 = 15
nsamples = 30
sd = 5
# simple effect of condition
b1 = 10
b2 = 1
b1_2 = 1
# two simple effects
# b1 = 5
# b2 = -5
# b1_2 = 0
# interaction effect
# b1 = 10
# b2 = 10
# b1_2 = -20
# interaction and simple effect
# b1 = 10
# b2 = 0
# b1_2 = -20
# all three
# b1 = 2
# b2 = 2
# b1_2 = 10
df.data = tibble(
condition = rep(c(0, 1), each = nsamples),
treatment = rep(c(0, 1), nsamples),
rating = b0 + b1 * condition + b2 * treatment + (b1_2 * condition * treatment) + rnorm(nsamples, sd = sd)) %>%
mutate(condition = factor(condition, labels = c("A", "B")),
treatment = factor(treatment, labels = c("1", "2")))
ggplot(df.data,
aes(x = condition,
y = rating,
group = treatment,
fill = treatment)) +
stat_summary(fun = "mean",
geom = "bar",
color = "black",
position = position_dodge(0.9)) +
stat_summary(fun.data = "mean_cl_boot",
geom = "linerange",
size = 1,
position = position_dodge(0.9)) +
scale_fill_brewer(palette = "Set1")
And here is one specific example. Let’s generate the data first:
# make example reproducible
set.seed(1)
# set parameters
nsamples = 30
b0 = 15
b1 = 10 # simple effect of condition
b2 = 0 # simple effect of treatment
b1_2 = -20 # interaction effect
sd = 5
# generate data
df.data = tibble(
condition = rep(c(0, 1), each = nsamples),
treatment = rep(c(0, 1), nsamples),
rating = b0 +
b1 * condition +
b2 * treatment + (b1_2 * condition * treatment) +
rnorm(nsamples, sd = sd)) %>%
mutate(condition = factor(condition, labels = c("A", "B")),
treatment = factor(treatment, labels = c("1", "2")))
Show part of the generated data frame:
# show data frame
df.data %>%
group_by(condition, treatment) %>%
filter(row_number() < 3) %>%
ungroup() %>%
kable(digits = 2) %>%
kable_styling(bootstrap_options = "striped",
full_width = F)
| condition | treatment | rating |
|---|---|---|
| A | 1 | 11.87 |
| A | 2 | 15.92 |
| A | 1 | 10.82 |
| A | 2 | 22.98 |
| B | 1 | 21.87 |
| B | 2 | 5.92 |
| B | 1 | 20.82 |
| B | 2 | 12.98 |
Plot the data:
# plot data
ggplot(df.data,
aes(x = condition,
y = rating,
group = treatment,
fill = treatment)) +
stat_summary(fun = "mean",
geom = "bar",
color = "black",
position = position_dodge(0.9)) +
stat_summary(fun.data = "mean_cl_boot",
geom = "linerange",
size = 1,
position = position_dodge(0.9)) +
scale_fill_brewer(palette = "Set1")
And check whether we can successfully infer the parameters that we used to generate the data:
# infer parameters
lm(formula = rating ~ 1 + condition + treatment + condition:treatment,
data = df.data) %>%
summary()
##
## Call:
## lm(formula = rating ~ 1 + condition + treatment + condition:treatment,
## data = df.data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.6546 -3.6343 0.7988 3.3514 8.3953
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.244 1.194 13.608 < 2e-16 ***
## conditionB 10.000 1.688 5.924 2.02e-07 ***
## treatment2 -1.662 1.688 -0.985 0.329
## conditionB:treatment2 -20.000 2.387 -8.378 1.86e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.623 on 56 degrees of freedom
## Multiple R-squared: 0.7473, Adjusted R-squared: 0.7338
## F-statistic: 55.21 on 3 and 56 DF, p-value: < 2.2e-16
12.5.4 Variance decomposition
Let’s fit the model first:
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## hand 2 2559.4 1279.70 76.0437 <2e-16 ***
## skill 1 39.3 39.35 2.3383 0.1273
## Residuals 296 4981.2 16.83
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
<IP_ADDRESS> Calculate sums of squares
df.poker %>%
mutate(mean_grand = mean(balance)) %>%
group_by(skill) %>%
mutate(mean_skill = mean(balance)) %>%
group_by(hand) %>%
mutate(mean_hand = mean(balance)) %>%
ungroup() %>%
summarize(variance_total = sum((balance - mean_grand)^2),
variance_skill = sum((mean_skill - mean_grand)^2),
variance_hand = sum((mean_hand - mean_grand)^2),
variance_residual = variance_total - variance_skill - variance_hand)
## # A tibble: 1 x 4
## variance_total variance_skill variance_hand variance_residual
## <dbl> <dbl> <dbl> <dbl>
## 1 7580. 39.3 2559. 4981.
<IP_ADDRESS> Visualize model predictions
<IP_ADDRESS>.1 Skill
factor
set.seed(1)
df.plot = df.poker %>%
mutate(skill_jitter = skill %>% as.numeric(),
skill_jitter = skill_jitter + runif(n(), min = -0.4, max = 0.4)) %>%
group_by(skill) %>%
mutate(mean_group = mean(balance)) %>%
ungroup() %>%
mutate(mean_grand = mean(balance))
df.means = df.poker %>%
group_by(skill) %>%
summarize(mean = mean(balance)) %>%
pivot_wider(names_from = skill,
values_from = mean)
ggplot(data = df.plot,
mapping = aes(x = skill_jitter,
y = mean_group,
color = skill)) +
geom_point(alpha = 0.8) +
geom_segment(data = NULL,
aes(x = 0.6,
xend = 1.4,
y = df.means$average,
yend = df.means$average),
color = "black",
size = 1) +
geom_segment(data = NULL,
aes(x = 1.6,
xend = 2.4,
y = df.means$expert,
yend = df.means$expert),
color = "gray50",
size = 1) +
geom_segment(aes(xend = skill_jitter,
y = mean_group,
yend = mean_grand),
alpha = 0.3) +
geom_hline(yintercept = mean(df.poker$balance),
size = 1) +
labs(y = "balance") +
scale_color_manual(values = c("black", "gray50")) +
scale_x_continuous(breaks = 1:2, labels = c("average", "expert")) +
scale_y_continuous(breaks = c(0, 10, 20), labels = c(0, 10, 20), limits = c(0, 25)) +
theme(legend.position = "none",
axis.title.x = element_blank())
12.5.5 Two-way ANOVA (with interaction)
Let’s firt a two-way ANOVA with the interaction term.
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## hand 2 2559.4 1279.70 79.1692 < 2.2e-16 ***
## skill 1 39.3 39.35 2.4344 0.1197776
## hand:skill 2 229.0 114.49 7.0830 0.0009901 ***
## Residuals 294 4752.3 16.16
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
And let’s compute how the the sums of squares are decomposed:
df.poker %>%
mutate(mean_grand = mean(balance)) %>%
group_by(skill) %>%
mutate(mean_skill = mean(balance)) %>%
group_by(hand) %>%
mutate(mean_hand = mean(balance)) %>%
group_by(hand, skill) %>%
mutate(mean_hand_skill = mean(balance)) %>%
ungroup() %>%
summarize(variance_total = sum((balance - mean_grand)^2),
variance_skill = sum((mean_skill - mean_grand)^2),
variance_hand = sum((mean_hand - mean_grand)^2),
variance_hand_skill = sum((mean_hand_skill - mean_skill - mean_hand +
mean_grand)^2),
variance_residual = variance_total - variance_skill - variance_hand -
variance_hand_skill)
## # A tibble: 1 x 5
## variance_total variance_skill variance_hand variance_hand_sk… variance_residu…
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 7580. 39.3 2559. 229. 4752.
12.6 ANOVA with unbalanced design
For the standard anova()
function, the order of the independent predictors matters when the design is unbalanced.
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## skill 1 74.3 74.28 4.2904 0.03922 *
## hand 2 2385.1 1192.57 68.8827 < 2e-16 ***
## Residuals 286 4951.5 17.31
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Analysis of Variance Table
##
## Response: balance
## Df Sum Sq Mean Sq F value Pr(>F)
## hand 2 2419.8 1209.92 69.8845 <2e-16 ***
## skill 1 39.6 39.59 2.2867 0.1316
## Residuals 286 4951.5 17.31
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
For unbalanced designs, we should compute an ANOVA with type 3 sums of squares.
# one order
lm(formula = balance ~ hand + skill,
data = df.poker,
contrasts = list(hand = "contr.sum",
skill = "contr.sum")) %>%
Anova(type = "3")
## Anova Table (Type III tests)
##
## Response: balance
## Sum Sq Df F value Pr(>F)
## (Intercept) 28644.7 1 1702.1527 <2e-16 ***
## hand 2559.4 2 76.0437 <2e-16 ***
## skill 39.3 1 2.3383 0.1273
## Residuals 4981.2 296
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# another order
lm(formula = balance ~ skill + hand,
data = df.poker,
contrasts = list(hand = "contr.sum",
skill = "contr.sum")) %>%
Anova(type = "3")
## Anova Table (Type III tests)
##
## Response: balance
## Sum Sq Df F value Pr(>F)
## (Intercept) 28644.7 1 1702.1527 <2e-16 ***
## skill 39.3 1 2.3383 0.1273
## hand 2559.4 2 76.0437 <2e-16 ***
## Residuals 4981.2 296
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Now, the order of the independent variables doesn’t matter anymore.
We can also use the aov_ez()
function from the afex
package.
## Contrasts set to contr.sum for the following variables: hand, skill
## Anova Table (Type III tests)
##
## Response: dv
## Sum Sq Df F value Pr(>F)
## (Intercept) 28644.7 1 1772.1137 < 2.2e-16 ***
## hand 2559.4 2 79.1692 < 2.2e-16 ***
## skill 39.3 1 2.4344 0.1197776
## hand:skill 229.0 2 7.0830 0.0009901 ***
## Residuals 4752.3 294
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
12.7 Additional resources
12.7.1 Datacamp
12.8 Session info
Information about this R session including which version of R was used, and what packages were loaded.
## R version 3.6.2 (2019-12-12)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Mojave 10.14.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] forcats_0.5.0 stringr_1.4.0 dplyr_0.8.4 purrr_0.3.3
## [5] readr_1.3.1 tidyr_1.0.2 tibble_2.1.3 ggplot2_3.3.0
## [9] tidyverse_1.3.0 emmeans_1.4.5 afex_0.26-0 lme4_1.1-21
## [13] Matrix_1.2-18 car_3.0-6 carData_3.0-3 broom_0.5.5
## [17] janitor_1.2.1 kableExtra_1.1.0 knitr_1.28
##
## loaded via a namespace (and not attached):
## [1] TH.data_1.0-10 minqa_1.2.4 colorspace_1.4-1
## [4] rio_0.5.16 snakecase_0.11.0 htmlTable_1.13.3
## [7] estimability_1.3 base64enc_0.1-3 fs_1.3.2
## [10] rstudioapi_0.11 farver_2.0.3 fansi_0.4.1
## [13] mvtnorm_1.1-0 lubridate_1.7.4 xml2_1.2.2
## [16] codetools_0.2-16 splines_3.6.2 Formula_1.2-3
## [19] jsonlite_1.6.1 nloptr_1.2.1 cluster_2.1.0
## [22] dbplyr_1.4.2 png_0.1-7 compiler_3.6.2
## [25] httr_1.4.1 backports_1.1.5 assertthat_0.2.1
## [28] cli_2.0.2 acepack_1.4.1 htmltools_0.4.0
## [31] tools_3.6.2 lmerTest_3.1-1 coda_0.19-3
## [34] gtable_0.3.0 glue_1.3.1 reshape2_1.4.3
## [37] Rcpp_1.0.3 cellranger_1.1.0 vctrs_0.2.3
## [40] nlme_3.1-145 xfun_0.12 openxlsx_4.1.4
## [43] rvest_0.3.5 lifecycle_0.1.0 MASS_7.3-51.5
## [46] zoo_1.8-7 scales_1.1.0 hms_0.5.3
## [49] parallel_3.6.2 sandwich_2.5-1 RColorBrewer_1.1-2
## [52] yaml_2.2.1 curl_4.3 gridExtra_2.3
## [55] rpart_4.1-15 latticeExtra_0.6-29 stringi_1.4.6
## [58] highr_0.8 checkmate_2.0.0 boot_1.3-24
## [61] zip_2.0.4 rlang_0.4.5 pkgconfig_2.0.3
## [64] evaluate_0.14 lattice_0.20-40 labeling_0.3
## [67] htmlwidgets_1.5.1 tidyselect_1.0.0 plyr_1.8.6
## [70] magrittr_1.5 bookdown_0.18 R6_2.4.1
## [73] generics_0.0.2 Hmisc_4.3-1 multcomp_1.4-12
## [76] DBI_1.1.0 pillar_1.4.3 haven_2.2.0
## [79] foreign_0.8-76 withr_2.1.2 survival_3.1-8
## [82] abind_1.4-5 nnet_7.3-13 modelr_0.1.6
## [85] crayon_1.3.4 utf8_1.1.4 rmarkdown_2.1
## [88] jpeg_0.1-8.1 grid_3.6.2 readxl_1.3.1
## [91] data.table_1.12.8 reprex_0.3.0 digest_0.6.25
## [94] webshot_0.5.2 xtable_1.8-4 numDeriv_2016.8-1.1
## [97] munsell_0.5.0 viridisLite_0.3.0


Toggle sidebar
angularStartKit Admin
4
4 Tasks to complete
Software Update
65%
Hardware Upgrade
35%
Unit Testing
15%
Bug Fixes
90%
See tasks with details
8
8 Notifications
New Comments
+12
Bob just signed up as an editor ...
New Orders
+8
Followers
+11
See all notifications
5
5 Messages
Alex:
Ciao sociis natoque penatibus et auctor ...
a moment ago
Susan:
Vestibulum id ligula porta felis euismod ...
20 minutes ago
Bob:
Nullam quis risus eget urna mollis ornare ...
3:15 pm
Kate:
Ciao sociis natoque eget urna mollis ornare ...
1:33 pm
Fred:
Vestibulum id penatibus et auctor ...
10:09 am
See all messages
Welcome,
Mohamed,
Settings
Profile
Logout
Dashboard
UI & Elements
Layouts
Top Menu
Two Menus 1
Two Menus 2
Default Mobile Menu
Mobile Menu 2
Mobile Menu 3
Typography
Elements
Buttons & Icons
Content Sliders
Treeview
jQuery UI
Nestable Lists
Three Level Menu
Item #1
4th level
Add Product
View Products
Home
Dashboard
#438EB9
#222A2D
#C6487E
#D0D0D0
Choose Skin
Fixed Navbar
Fixed Sidebar
Fixed Breadcrumbs
Right To Left (rtl)
Inside
.container
Submenu on Hover
Compact Sidebar
Alt. Active Item
Dashboard
overview & stats
Main contents!


This is the information area. I will place text here.
Whatever happens in the Navigation bar should not affect this section.


Six-car collision causes two-mile tailbacks on A12
by Matthew EarthA six-car collision caused one carriageway of the A12 to be partially blocked, leading to traffic queueing back two miles.
The crash happened at 9.30am this morning on the southbound carriageway between junctions 26 and 27, just outside of Colchester.
The congestion affected London-bound traffic from Suffolk and north Essex.
Essex Police confirmed none of the drivers involved had suffered any injuries and no arrests had been made.
The police added that the road was cleared shortly after 10am.


Giadi1833.github.io
Page 1. Operation Manual / Bedienungsanleitung English / Deutsch SX Series S3X-H S3X-V S4X-H S4X-V S5X-H S5X-V. Page 2: Safety Instructions. Safety Instructions Please read the following safety instructions before setting up your system. ADAM S1X OPERATION MANUAL Pdf Download.
Adam S4X-H Bedienungsanleitung.


Development-only error handler middleware.
This middleware is only intended to be used in a development environment, as the full error stack traces and internal details of any object passed to this module will be sent back to the client when an error occurs.
When an object is provided to Express as an error, this module will display as much about this object as possible, and will do so by using content negotiation for the response between HTML, JSON, and plain text.
Error
object, the string
provided by the stack
property will be returned in
HTML/text responses.
Error
object, the result of
util.inspect
will be returned in HTML/text responses.
This is a Node.js module available
through the npm registry.
Installation is done using the
npm install
command:
Create new middleware to handle errors and respond with content negotiation.
Error handler accepts these properties in the options object.
Provide a function to be called with the error and a string representation
of the error. Can be used to write the error to any desired location, or
set to false
to only send the error back in the response.
Called as log(err, str, req, res)
where err
is
the Error
object, str
is a string representation
of the error, req
is the request object and
res
is the response object (note, this function is invoked
after the response has been written).
The default value for this option is true
unless
process.env.NODE_ENV === 'test'
.
Possible values:
true
: Log errors using console.error(str)
.
false
: Only send the error back in the response.
Basic example of adding this middleware as the error handler only in
development with connect
(express
also can be
used in this example).
var connect = require('connect')
var errorhandler = require('errorhandler')
var app = connect()
if (process.env.NODE_ENV === 'development') {
// only use in development
app.use(errorhandler())
}
Sometimes you may want to output the errors to a different location than STDERR during development, like a system notification, for example.
var connect = require('connect')
var errorhandler = require('errorhandler')
var notifier = require('node-notifier')
var app = connect()
if (process.env.NODE_ENV === 'development') {
// only use in development
app.use(errorhandler({ log: errorNotification }))
}
function errorNotification (err, str, req) {
var title = 'Error in ' + req.method + ' ' + req.url
notifier.notify({
title: title,
message: str
})
}


ABOUT US
The 'Ghosts and Supernatural' website was created in October 2014 to explore the mysterious and creepy things on Earth. This was created to comply with the requirements for the CCT 431 - 1S of Prof. Bon Jorelle Domingo.
The group V started this website to give viewers goosebumps as they visit this page. But this is not all, this was also created to further give the viewers knowledge about supernatural beings on Earth. This website provides different articles and studies about how ghosts and supernatural beings behave and why many people believe in it.
The group V was led by:
Jenefer A. Alvior
With the members:
CRUZ, AUDREE ANNE P.
RANOLA, JOLINA
SOLIDARIOS, JUNERI MAE I.


Buses make it easy to share effects across many instruments.
send
audio to a named bus from an instrument and then
receive
that channel on your effect. The gain values are all in decibels.
Docs on
send
and
receive
.