{% extends "page_with_title_and_lede.html" %} {% load i18n %} {% block head_title %}Making a Day Trip to North Bay Python{% endblock %} {% block heading %}Making a Day Trip to North Bay Python{% endblock %} {% block body_class %}attend{% endblock %} {% block lede %} Boldly go where many have gone before: you can commute to North Bay Python each day, though you'll probably have to drive. Public transit is an option, but it's not great. You won't be able to spend as much time with fellow attendees, but you'll still have a great time! {% endblock %} {% block content %}
How you get here depends, naturally, on where you're coming from. Broadly, your options are: flying, cab rides, public transit, ride sharing apps, or renting a car.
Public transit to Petaluma is currently not great. You can take the 101 bus operated by Golden Gate Transit from downtown San Francisco, or south from Santa Rosa. Depending on sponsorship, we hope to run a free shuttle with BART and Caltrain connections for people from further out of town.
SMART, the new train service that runs along the 101 corridor, recently started operations. SMART is not suitable for getting to North Bay Python if you travel on weekends, as the first train leaves after proceedings start. SMART may be a better option than taking the bus between San Rafael and Petaluma if you travel up on weekdays.
If you're driving up, downtown Petaluma is at exit 472A on Highway 101, 35 miles north of the Golden Gate Bridge.
All parking is free in Petaluma, however near the Mystic, street-level parking is time-limited. All-day parking is available at street level west of 5th St (towards 6th St), and at the the undercover garages at Theatre Square and at Keller St. Both garages are in short walking distance of the Mystic.
All the official events will take place on Friday, Saturday, and Sunday, from November 1st to 3rd. On Friday, we'll only have events in the evening. On Saturday and Sunday, events will run morning through evening, with the core conference going from 10:00am to 6:00pm.
If you live in the North Bay, we encourage you to join us for events all three days. If you live further afield, you may want to skip Friday and only join us on Saturday and Sunday.
Petaluma is right at the intersection of Sonoma, Napa, and Marin Counties. This three county region, which makes up the North Bay, is famous for its parkland, forests, agriculture, fine food, wine, beer, and spirits.
We've prepared a food guide which will help you find good eats in Petaluma, but if you're sticking around beyond the conference, you'll want to check out your favorite food or restaurant guide. We've also put together a transit guide to help you get around town once you're here.
From family-friendly hikes to museums, wine tours to wind swept beaches, and lots of kid-friendly attractions, we encourage folks to bring their families along! We will offer free childcare for kids from 6 months to 12 years of age during the conference.
If your employer isn't paying for you to attend North Bay Python, then you should apply for financial aid. If money is the reason you're considering day tripping to North Bay Python, rather than staying at one of the hotels, then you should definitely apply for financial aid.
We're a 501(c)(3) nonprofit and our priority is accessibility. Our goal is for attending North Bay Python to cost about as much as staying home. Learn more about our financial aid program, including application process, timelines, and policies. Don't worry, it's easier than it sounds!
{% endblock %}


Getting Started¶
This documentation describes how to get started with SocialEngine 4.
Requirements¶
Minimum¶
- Apache-based shared web server
- Apache mod_rewrite (only for Apache v2.0.29 or below)
- MySQL 4.1
- PHP 5.12
- PHP safe mode: OFF
- PHP extensions: gd2, curl
- PHP memory limit: 32M+
- Sendmail
Recommended¶
- Apache-based VPS or dedicated web server
- PHP 5.26 or newer
- MySQL 5.0 or newer
- crontab
Optional¶
- memcached (speed boost)
- PHP extensions: apc (speed boost), bcmath (speed boost), json (speed boost), mbstring (required for non-English support)
- Apache mod_rewrite (for SEO-friendly URLs)
Optional Requirements for Video Plugin¶
- ffmpeg (for encoding video) - without ffmpeg, users can still post YouTube and Vimeo videos.
Optional Requirements for Chat Plugin¶
- VPS or dedicated server - budget/shared servers may not handle a high volume of users chatting at the same time
How do I check if my host is compatible with SocialEngine4?¶
Most modern hosting providers are compatible with SocialEngine4 but if in doubt you can contact them directly and refer them to this page.
Installing SocialEngine¶
Installation Instructions¶
- In order to install SocialEngine4, you need four pieces of information. If you don't have any of these, please contact your hosting provider and ask them for assistance.
- MySQL Server Address (often "localhost", "<IP_ADDRESS>", or the server IP address)
- MySQL Database Name
- MySQL Username
- MySQL Password
- Download the SocialEngine4 ZIP file and extract it to your computer.
- Upload all of the files to your hosting account (it can exist either in the root HTML directory, or a subdirectory).
- If you are using a Unix server (or Unix variant, like Linux, OS X, FreeBSD, etc.) you must set the permissions (CHMOD) of the following directories and files to 777:
/install/config/
(recursively; all directories and files contained within this must also be changed)/temporary/
(recursively; all directories and files contained within this must also be changed)/public/
(recursively; all directories and files contained within this must also be changed)/application/themes/
(recursively; all directories and files contained within this should also be changed)/application/packages/
(recursively; all directories and files contained within this should also be changed)/application/languages/
(recursively; all directories and files contained within this must also be changed)/application/settings/
(recursively; all files contained within this must also be changed)
- If you are using a Unix server (or Unix variant, like Linux, OS X, FreeBSD, etc.) you must set the permissions (CHMOD) of the following directories and files to 777:
- Access the SocialEngine installer by accessing your website; the installer wizard will automatically begin.
- Upload all the files to a hosting account. These files should be uploaded to a web-accessible directory.
Plugin Installation¶
Plugin installation will function very similarly to the SocialEngine upgrade process.
- Download each of the plugin TAR files you wish to install.
- Log into your SocialEngine 4 site and access the Admin area.
- Access the Manage menu and click on Packages & Plugins.
- Click on the Install New Packages link, then on the Add Packages link.
- Select the TAR files you download in step 1
- Follow the step-by-step wizard to complete the installation of the plugin files.
Signing In¶
Member and Admin accounts are unified in SocialEngine, so you as the site owner can use the same username and password to access the website. A user account with super-admin privileges is created for you during the installation process. Additional user accounts can be created via the signup process, and specific privileges can be assigned by you, the admin, after the account has been created.
Upgrading SocialEngine¶
As of SocialEngine 4 (Release Candidate 1) we now support upgrades via our package manager.
Upgrading from SE4 Beta3¶
- Download the Package Manager from the SocialEngine Clients area.
- Decompress the upgrade files, then upload them to the root of your SocialEngine 4 website. You'll notice the directories will be similar; overwrite any existing files with the uploaded ones.
- Change the permission of
/application/packages/
to (CHMOD) 777, as well as all the files within that directory. - Log into the Admin area of your SocialEngine 4 website, then click Manage > Plugins, or on the Upgrade to RC1 link.
- Follow the step-by-step wizard to upgrade the core components of SocialEngine 4.
- If you have any plugins installed, please see the instructions below on upgrading plugins.
Upgrading SocialEngine 4¶
- Download the latest Core available from your SocialEngine Clients area.
- Log into your SocialEngine 4 site and access the Admin area.
- Access the Manage menu and click on Packages & Plugins.
- Click on the Install New Packages link, then on the Add Packages link.
- Select the Core file you download in step 1. After the file is uploaded, a Continue button will appear at the bototm of the page.
Note: if you have trouble uploading the files using the uploader tool, you can also upload the TAR file manually over FTP to the/temporary/package/archive/
directory. - Follow the step-by-step wizard to complete the installation of the Core.
Developers Guide¶
Tools¶
While the following are not necessary for modifying SocialEngine 4, we recommend the following tools for your development environment.- Netbeans IDE ( http://netbeans.org/features/php/ )
- Set SocialEngine4 to be in "Development" mode (see
Admin > Settings > General Settings
). This prevents the use of caching, while also enables error messages to be displayed to the front-end interface.
Structure¶
SocialEngine4 is based on the Zend Framework, and is built in an MVC (Model-View-Controller) structure. It is also built with modularity in mind.
The directory structure is as follows:/application/
This directory contains the majority of SocialEngine files./application/languages/
See the section below on Languages/application/libraries/
Third party PHP libraries are typically contained in here. For example, Zend Framework and CSS Scaffold both live in this directory, as does our extensions to Zend Framework (called Engine)./application/modules/
See the section below on Plugins/application/settings/
These files contain configurations that typically will not be modified after your initial installation. Things like your database username/password, cache settings, mail settings, etc are stored in here./application/themes/
See the section below on Themes
/development/
Various tools that we have used during development are contained in this directory. You can mostly ignore this hodge-podge of files./externals/
Most of our images, javascript libraries, and flash applications that are used globally are retained in this directory. These should contain trusted (i.e. not user-uploaded) content./public/
User-uploaded content is always contained in here. This directory should be both web-accessible and writable by the web server (chmod 777 recursively)./temporary/
Various temporary files, such as cache files, logs, session files, etc are stored in this directory. It should not be web-accessible, but must be writable by the web server (chmod 777 recursively). We provide an ".htaccess" file to block access to this directory from the web browser, but if you are using a web server other than Apache, we recommend you configure the web server accordingly to prevent view access.
Plugins¶
/application/modules/*
Most of SocialEngine's functionality resides here. Each module contains within it the MVC structure, where the "Model", "views", and "controllers" directories correspond to the MVC paths. Please see our included skeleton module "HelloWorld" for more information on this.
Languages¶
/application/languages/*
Each language gets its own two-letter (or 5-character with localization support) directory in this sub-directory. The language files are in multiple CSV files, though they are concatenated into one large CSV file (in no particular order, except that "custom.csv" is the last). One important point to keep in mind is that duplicate keys override previously defined keys. So, for example, if you have a key "Turtles are fast!" in both core.csv and custom.csv, since custom.csv is loaded last, the value set to "Turtles run fast!" in custom.csv will be the one used.
The CSV files have several requirements:- Each line has at minimum two columns, and can contain more for different pluralizations.
- Each column is separated using a semi-colon, and is enclosed in "double-quotes" if it contains any sort of white-space (we recommend wrapping your values in quotes in all cases just to be safe).
- The first column is always going to be the
key
. This is the English word or phrase that exists in the view script, controller, or other portion of the code. - The second column is always going to be the default translation of the
key
. - If there is an subsequent columns after the second column, it will be for various pluralizations of the
key
. - Untranslated variables can be contained within a translation
key
and translations. Variable replacement is done using the PHP function sprintf , and so the same rules apply. When only one variable is being injected into a translation, typically "%s" is the placeholder for that variable. If multiple variables are being injected, you can use "%1$s", "%2$s", "%3$s" etc to put the variables in their proper positions for your translation. - If your translation has double-quotes in it, you must use two double-quotes. So as an example, the sentence 'He said "wow".' would appear in a CSV files as:
"He said ""wow"".";"He said ""wow""."
Themes¶
/application/themes/*
We utilize a framework called "CSS Scaffold" which makes editing your community's theme a simple process. Each theme is stored in its own directory within /applications/themes/
. A default theme is automatically loaded when you first install SocialEngine. Each theme contains two files: constants.css and theme.css.
At the top of constants.css, you'll find a series of global CSS settings (called "constants"). You can edit these to adjust the colors, fonts, and other styles throughout your entire community.
The other file, theme.css, contains more specific styles that are used throughout your community. Many of these styles inherit values from constants.css. If you want to override any of the default styles on your community, you can edit them here. If they aren't present in theme.css (and are being loaded from outside the theme itself), you can override them by adding new styles to the bottom of theme.css.
More information about how to work with CSS Scaffold is available here: http://github.com/sunny/csscaffold or Google for CSScaffold for videos and tutorials.


Constructor
new Store(base, configopt)
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
base |
base url for data | ||
config |
<optional> |
configuration options, unused so far |
Methods
delete(type, query) → {promise}
delete data
Parameters:
| Name | Type | Description |
|---|---|---|
type |
string | the datatype to get |
query |
object | the query of url parameters |
Returns:
- promise which resolves with data
- Type
- promise
findCollection(nameopt, typeopt) → {promise}
find collections matching name and/or type
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
name |
string |
<optional> |
the collection name, supporting regex match |
type |
string |
<optional> |
the collection type, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
findMark(nameopt, slideopt) → {promise}
find marks matching slide and/or marktype
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
name |
string |
<optional> |
the associated slide name, supporting regex match |
slide |
string |
<optional> |
the associated marktype name, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
findMarkSpatial(x, y, nameopt, slideopt) → {promise}
find marks which contain a given point
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
x |
number | x position to search for | |
y |
number | y position to search for | |
name |
string |
<optional> |
the associated slide name, supporting regex match |
slide |
string |
<optional> |
the associated marktype name, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
findMarkTypes(nameopt, slideopt) → {promise}
find marktypes given slide and name
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
name |
string |
<optional> |
the associated slide name, supporting regex match |
slide |
string |
<optional> |
the marktype name, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
findOverlay(nameopt, slideopt) → {promise}
find overlays matching name and/or type
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
name |
string |
<optional> |
the overlay, supporting regex match |
slide |
string |
<optional> |
the collection type, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
findSlide(nameopt, locationopt) → {promise}
find overlays matching name and/or type
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
name |
string |
<optional> |
the slide name, supporting regex match |
location |
string |
<optional> |
the slide location, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
findTemplate(nameopt, typeopt) → {promise}
find templates matching name and/or type
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
name |
string |
<optional> |
the template name, supporting regex match |
type |
string |
<optional> |
the tmplate type, supporting regex match |
Returns:
- promise which resolves with data
- Type
- promise
getCollection(id) → {promise}
get collection by id
Parameters:
| Name | Type | Description |
|---|---|---|
id |
string | the collection id |
Returns:
- promise which resolves with data
- Type
- promise
getMark(id) → {promise}
get mark by id
Parameters:
| Name | Type | Description |
|---|---|---|
id |
string | the collection id |
Returns:
- promise which resolves with data
- Type
- promise
getOverlay(id) → {promise}
get overlay by id
Parameters:
| Name | Type | Description |
|---|---|---|
id |
string | the overlay id |
Returns:
- promise which resolves with data
- Type
- promise
getSlide(id) → {promise}
get slide by id
Parameters:
| Name | Type | Description |
|---|---|---|
id |
string | the slide id |
Returns:
- promise which resolves with data
- Type
- promise
getTemplate(id) → {promise}
get template by id
Parameters:
| Name | Type | Description |
|---|---|---|
id |
string | the template id |
Returns:
- promise which resolves with data
- Type
- promise
post(type, data, queryopt) → {promise}
post data
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
type |
string | the datatype to post | |
data |
object | the data to post | |
query |
object |
<optional> |
the query of url parameters |
Returns:
- promise which resolves with data
- Type
- promise
update(type, query, data) → {promise}
update data
Parameters:
| Name | Type | Description |
|---|---|---|
type |
string | the datatype to get |
query |
object | the query of url parameters |
data |
object | the data to update |
Returns:
- promise which resolves with data
- Type
- promise


Putin says he has no relationship with Zelensky
Putin describes Zelensky as a nice, sincere person.
Russian President Vladimir Putin says he has no relationship with Ukrainian President Volodymyr Zelensky.
"What is my relationship with Zelensky? None. I have never seen him, I don't know him, but we talked on the phone several times... It seems to me he is a nice person, sincere, in my opinion, he really wants to change the situation for the better, including in Donbas," he said during the annual VTB Capital "Russia Calling" Investment Forum in Moscow on November 20, 2019, according to an UNIAN correspondent in Russia.
At the same time, Putin emphasized he did not know how Zelensky was able to do that.
According to him, Zelensky took positive steps, in particular, the disengagement of forces and weapons in two settlements in Donbas.


There is a problem
The knowledge base partner chooses a project manager who is responsible for setting up the project, and a finance contact to answer finance queries.
Each team member can view everything in the project setup section.
When a new person is invited to the team, their status will show as 'pending' until they create an Innovation Funding Service account. Their role can only be assigned after they have created an account.
The lead partner must choose a project manager who will be responsible for setting up the project. Each partner must provide a finance contact. We will contact the assigned person with any finance queries.
Everyone below can view all of project setup. If they add a new person they will show as pending until they register for the website.
Everyone below can view all of project setup. If you add a new person they will show as pending until they register for the website. Once they register you can assign them a role.
The organisation must choose a project manager who is responsible for setting up the project and a finance contact to answer finance queries.
The team can view all of project setup. If a new person is added to the team, they are shown as pending until they register for the service.
You must choose:
- a project manager, who will be responsible for setting up the project
- a finance contact we can approach for queries
All members of your team can view all of project setup. If you add a new person they will show as pending until they register for the website. Once they register you can assign them a role.


A small stand-up for a big impact
In my time as a student, an IT professional as well as a teaching assistant, I often came across a very small yet important concept of project management - a stand-up meeting. While I enjoyed having it, I observed that most of the students as well as IT professionals working in the industry find it either a waste of time or think of it as a redundant act of a typical meeting with just one difference - standing up. Through this article, I try to break these misconceptions. I also noticed that even if they knew what a stand-up meeting is, they never practised it correctly. Maybe it is because there is not a single correct way of doing things when it comes to project management but we can always understand and practise the ‘most correct way’.
Let’s begin with understanding what exactly a stand-up meeting is. A major point here, we will be understanding this concept in terms of a typical ‘software development’ environment. One of the most widely trusted sources in the world - Wikipedia (sarcasm intended) defines stand-up as ‘a meeting in which attendees typically participate while standing. The discomfort of standing for long periods is intended to keep the meetings short.’ This is a very generic definition. When it comes to a software development environment, I define it simply as “a short and regularly held meeting in which all attendees stand up and update each other on what they did since the last stand-up meeting, what they are currently working on, what they intend to accomplish till the next stand-up meeting and if anything is blocking their workflow”. It’s as simple as that. It is not complicated at all.
Importance of Stand-ups#
Although their are small in size but they have a big impact on the overall project management. Here are a few reasons they are so important:
- As a member of a software development team, imagine yourself chasing almost every team member to know the status of their task since your work depends on it. First of all, you will need to figure out who is doing what. Once you know that, contacting that person for a while just to a quick update.
- Members might be unaware of their dependencies or the risks to their tasks till they hear someone else highlighting their respective tasks. Things can skip form our mind from time to time as nobody is perfect.
- The team leader comes to know exactly how much more time is required and what tasks, if necessary, need to be shifted to the next iteration. All this, in a very short period of time.
- Regularly conducting this meeting enables all team members to be on the same page.
- External dependencies of tasks can be highlighted and addressed early and appropriate actions can be done before it explodes into a risk or poor product delivery.
- Each team member gets to see and talk to other team members when they attend this meeting. There are less chances of conflicts due to regular communication.
- Based on the amount of time each member is taking to complete each task, a correction in the effort and resource estimation can be done at an early stage.
- Attendees can quickly ask for help from other teammates if they are stuck somewhere in their task. This will provide the team leader with an idea as to how much buffer time needs to be allocated to the helping member.
The Stand-up#
Stand-up meetings are usually done in an Agile work/project environment. Let’s break this definition to understand how it’s done.
“A short -”
A stand-up meeting has to be short. If you are wondering how long should a stand-up meeting last, my suggestion would be to multiply the number of attendees by 2 minutes and add 2 minutes to the total. For example, if there are 5 members attending the stand-up, the ideal time should be 12 to 13 minutes. The reason why I suggest to add two minutes in the end is for the team leader to summarise and conclude the meeting.
“- regularly held meeting -”
This meeting should be held regularly. A common practice in the industry is daily. If you don’t meet this often then make sure that you have it at least thrice a week. If in an academic environment all team members are not present, conduct this meeting virtually over tools such as Skype or Google Hangout, but you must make sure everyone stands up even on a video conference call. Regularly conducting this meeting will help you estimate the work which needs to be done and the time that needs to be invested more accurately. It will help the team keep their work and deliverables balanced and organised.
“- in which all attendees stand up -”
The intention of making everyone stand-up is to make sure that no one speaks more than required and that the meeting doesn’t go on for a long time. Remember, in a work environment, time is money and in an academic environment, time is precious since you can use the extra time for playing or finishing other assignments.
“- and update each other on what they did since the last stand-up meeting -”
Each attendee has to give an update about what they did since the last stand-up meeting and not provide a detailed explanation on what they have been working on since the beginning of the project. Remember, every member has up to only 2 minutes each to speak.
“- what they are currently working on -”
Each attendee needs to speak about what they are working on at the moment. For example, if you have picked up a Trello card a moment ago or have run your code to compile, mention that. Just mention and do not try to explain everything. Other types of meetings can be arranged specially for that.
“- what they intend to accomplish till the next stand-up meeting -”
Once each member has given an update about what they have completed since the last stand-up and what they are working on at the moment, it’s time to speak about what they intend to achieve till the next stand-up. Do not explain on how you plan to achieve it or what your end goals for the whole project are.
“- and if anything is blocking their workflow.”
While giving a brief about what they are working on right now and what their next action is, each attendee must also mention if something or someone else’s is block them to do their work. This is quiet common in a team project environment. Usually when user stories and product features are inter-dependent, there are high chances that one member’s work needs some of other member’s tasks to finish before he can continue working. There can also be things which are not under the team’s control for example a situation where the client needs to respond to your important request but he is on a vacation at a remote location where there is no access to the internet or cellular network. This is the perfect time to mention that. The team leader must quickly make notes of these dependencies and maintain a temporary list of them. A detailed discussion regarding that should be held outside the stand-up meeting between the team leader and the members involved in the dependency.
In the end#
The team leader now has two minutes to quickly summarise what the current status of the project is, how are the tasks looking and if any improvements are required. That’s it! The end! The meeting is successfully over! Not the team leader must call the members whose tasks are facing some delays due to inter-dependency or an external factor. This can be a detailed, “normal”, “sit-down” meeting.
Some important rules#
- The sequence of members speaking must be in one direction. It can be clockwise or anti-clockwise.
- All members must be standing till the meeting is over. You should not sit down as soon as your turn is over.
- Only one person should speak at a time.
- This meeting is not meant for internal conflict resolution. So no such issues must be raised during this meeting.
- Members should update their Trello tasks before coming to the meeting. They can then refer to it during the meeting.
- All topics which might take a while to discuss must be taken outside of the meeting and not discussed at that moment.
- The meeting must be held regularly. If some member is unable to attend it, they must update their Trello tasks and inform the team leader about it prior to the meeting.


Caddyshack A review by Joe Chamberlain
Starring Chevy Chase; Rodney Dangerfield; Ted Knight; Michael O'Keefe & Bill Murray
I remember really enjoying this movie when I saw it years ago.  There is very, very little that is funny in Caddyshack. The laughs are few, and far between, and what there are really aren't that great.
Caddyshack, as the name implies, more or less centers on one young caddy working at an exclusive country club. Michael O'Keefe plays said caddy. Why they cast this unknown, fairly untalented actor in the lead role is completely beyond me. The movie doesn't seem to have a real plot, just a series of scenes that are little more than opportunities for the rest of the cast to mug at the camera.
Most of the marginal laughs come from Rodney Dangerfield and Ted Knight mugging and overacting for the camera -- with painfully limited success. Bill Murray is slightly amusing in places, but fairly wasted.  There are a few decent scenes involving the interaction between Dangerfield and Knight, but they are far too infrequent to carry the movie.
I guess that's what you get for basing a story around an unknown kid. I'm not sure what the writers of this thing were thinking of, but I really think it was something far removed from comedy as they were putting pen to paper. Nothing about this movie works. It wouldn't have taken a genius to figure out that this thing wasn't going to fly. Most of the scenes just couldn't possibly be funny.  I'm sure scenes involving Chevy Chase and his oneness with the golf ball were supposed to be funny. In reality, they were painfully embarrassing to watch. There is a scene at the club pool where all the caddies go wild for the "hot babe" of the movie walking by in her bikini. Olive Oil would have filled out this swimsuit better than this girl. Everything about this movie was just completely implausible as far as the comedy was concerned. Maybe if you were drunk out of you mind or high off some sort of illegal narcotic this thing might be funny. But for the rest of us, stay the hell away from Caddyshack.
3/10
Visit The Movie Guy http://movieguy.tripod.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


This is content inside the parent window.
Click a button to communicate with the child frames.
Frame 1
Frame 2


ValueAxis3D QML Type
Manipulates an axis of a graph. More...
| Import Statement: | import QtDataVisualization 1.2 |
| Since: | QtDataVisualization 1.0 |
| Instantiates: | QValue3DAxis |
| Inherits: |
Properties
- formatter : ValueAxis3DFormatter
- labelFormat : string
- reversed : bool
- segmentCount : int
- subSegmentCount : int
Detailed Description
This type provides an axis that can be given a range of values and segment and subsegment counts to divide the range into.
Property Documentation
formatter : ValueAxis3DFormatter |
The axis formatter to be used. Any existing formatter is deleted when a new formatter is set.
This QML property was introduced in QtDataVisualization 1.1.
The label format to be used for the labels on this axis.
The format string supports the following conversion specifiers, length modifiers, and flags provided by printf()
in the standard C++ library: d, i, o, x, X, f, F, e, E, g, G, c.
If AbstractGraph3D::locale is anything else than "C"
, the supported specifiers are limited to: d, e, E, f, g, G, and i. Also, only the precision modifier is supported. The rest of the formatting comes from the default Locale of the application.
See also AbstractGraph3D::locale.
If true
, the axis will be rendered in reverse. That is, the positions of the minimum and maximum values are swapped when the graph is rendered. This property does not affect the actual minimum and maximum values of the axis.
This QML property was introduced in QtDataVisualization 1.1.
The number of segments on the axis. This indicates how many labels are drawn. The number of grid lines to be drawn is calculated with the following formula: segments * subsegments + 1
. The preset default is 5
. The value cannot be below 1
.
The number of subsegments inside each segment on the axis. Grid lines are drawn between each subsegment, in addition to each segment. The preset default is 1
. The value cannot be below 1
.


We repair and service all brands home appliance products like A.C., Fridge, Microwave, Washing Machine, Refrigerator and other. Bala ji Service Centre provide home appliances repair and service in Varanasi. It is provide various type of appliance products which include repair & service that takes care of any appliances installation or repairs annual maintenance contract plans any brand any type air conditioner (AC), Washing Machine, Refrigerator, Microwave Oven Geyser, RO in Varanasi and Customer satisfaction is our priority.
We help you get trusted professionals for all your Home Appliance needs. We connect you to punctual and hardworking experts who work towards customer satisfaction and meet all your appliance needs. On demand we also provide parts of the the machines and we have sufficiant number of machanics who work with 24X7.
Every summer is hot and every day you dip into sweat. You know while you enter your bedroom or office room, you will be in heaven.
Bala Ji Service Center provide all brands home appliances service center and repair in Varanasi Uttar Pradesh. Our services include AC Repair & Installation, washing machine, refrigerator, microwave repair and more.
Suscribe our news latter for futher updates from us.
Contact Details
Near HARISH CHANDRA MAIDAGIN Crossing, DARA NAGAR KOTWALI, VARANASI (221001), UTTAR PRADESH, INDIA


Data Fields | |
| int | sflag |
| int | xflag |
| int | do_loop |
| int | do_print |
| int | do_line |
| int | do_split |
| int | do_search |
| unsigned int | disable |
| int | verbose |
| int | safe_level |
| unsigned int | setids |
| unsigned int | dump |
| const char * | script |
| VALUE | script_name |
| VALUE | e_script |
| struct { | |
| struct { | |
| VALUE name | |
| int index | |
| } enc | |
| } | src |
| struct { | |
| struct { | |
| VALUE name | |
| int index | |
| } enc | |
| } | ext |
| struct { | |
| struct { | |
| VALUE name | |
| int index | |
| } enc | |
| } | intern |
| VALUE | req_list |
Definition at line 75 of file ruby.c.
| unsigned int cmdline_options::disable |
Definition at line 80 of file ruby.c.
Referenced by cmdline_options_init(), proc_options(), and process_options().
Definition at line 78 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 77 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 77 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 79 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 78 of file ruby.c.
Referenced by proc_options(), and process_options().
| unsigned int cmdline_options::dump |
Definition at line 84 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 87 of file ruby.c.
Referenced by proc_options(), and process_options().
| struct { ... } cmdline_options::enc |
Referenced by cmdline_options_init(), load_file_internal(), proc_options(), and process_options().
| struct { ... } cmdline_options::ext |
Referenced by cmdline_options_init(), load_file_internal(), proc_options(), and process_options().
| struct { ... } cmdline_options::intern |
Referenced by cmdline_options_init(), load_file_internal(), and process_options().
Definition at line 94 of file ruby.c.
Referenced by load_file_internal(), proc_options(), and process_options().
Definition at line 82 of file ruby.c.
Referenced by forbid_setid(), init_ids(), proc_options(), and process_options().
| const char* cmdline_options::script |
Definition at line 85 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 86 of file ruby.c.
Referenced by load_file_internal(), and process_options().
| unsigned int cmdline_options::setids |
Definition at line 83 of file ruby.c.
Referenced by forbid_setid(), and init_ids().
Definition at line 76 of file ruby.c.
Referenced by proc_options(), and process_options().
| struct { ... } cmdline_options::src |
Referenced by cmdline_options_init(), load_file_internal(), proc_options(), and process_options().
Definition at line 81 of file ruby.c.
Referenced by proc_options(), and process_options().
Definition at line 76 of file ruby.c.
Referenced by load_file_internal(), proc_options(), and process_options().


g-linear_reg_diagnostics.Rmd
A fitted regression model can be thought of as producing several things.
These products of the regression model are all dependent on the data fed into the model. Different data will often result in different estimates for the regression parameters, different p-values, and different predicted values and their confidence intervals. In particular, outliers can sometimes dramatically change regression parameters.
Similarly, results can be dependent the intricacies of the structure of the data and, if multiple predictor variables are being used (multiple regression) inter-relationships among the variables are important. For example, if two predictor variables are highly correlated ( collinear ) and both are included in a multiple regression model then their slopes can be highly biased even if the overall regression model fits the data well. (want to mention Anscombe’s quartet here but don’t know how to fit it in)
Finally, the validity of inference based on p-values and confidence intervals can be contingent on how well the data meet certain assumptions about its normality and the constancy of its variance.
The first part of this tutorial looks into the assumptions that must be reasonably met by the data in order for p-values and confidence intervals to be meaningful and the diagnostics tools we use to assess this. The second part looks into how outliers and influential points can impact regression models. Issues of collinearity will be addressed (hopefully) in a subsequent tutorial.
In order for inference from a regression model to be valid several assumptions need to be reasonably met. These assumptions are best framed in terms of the residuals of a model: the vertical distance between the regression line and each data point. In this tutorial I’ll first review key regression assumptions, illustrate what residuals are, and discuss various types of regression diagnostics based on outlier anlaysis. I’ll also discuss related diagnostic considerations that are not strictly linked to regression assumptions but which need to be considered, in particular outlier analysis.
The key assumptions of regression are:
These are in approximate order of increasing importance (Gelman and Hill 2007). Historically, biologists have been very concerned with normality, perhaps because it’s the easiest to attempt to test, but its frequently not a big deal because violations of this assumption tend not to throw of regression results; this is because linear models tend to be very robust to violations of the normality assumption. Normality can often be improved using a log transformation; it never hurts to do this as long as you keep in mind that you are working on a log-transformed scale.
The assumption of constant variance is more important. This is the same assumption as in t-tests and ANOVA of homogenous variances in each group. My impression is that biologists have typically thought about this more for t-tests and ANOVA, and less for regression, but don’t quote me on that. Log transformation can improve homoskedasticity. When this doesn’t help enough, it can be useful to fit a more complex regression or ANOVA model which can explicitly accommodate changes in variances.
Independence is a big deal, and can only be addressed using more advanced models *or by re-doing an experiment with a different design!). The other assumptions can be probed using graphical displays (favored by most) or statistical tests (still used by some). The impacts of some forms of non-independence can be explored in the data (temporal and spatial correlations) but others might only be apparent from the design of the study (grouping, clustering).
Non-independence of data points can occur due to things being grouped physically together, such as mice sharing a cage, or otherwise sharing a related condition, such as patients who were all treated by the same doctor or students who all have the same professor. Things that are otherwise independent, such as two trees of different species growing in a forest, might experience similar environmental conditions if they are close to each other, or could experience very different conditions if they are far apart. Spatial autocorrelation is a non-independence that occurs due to spatial proximity, while temporal autocorrelation occurs due to proximity in time.
There are several common misconceptions about assumptions. Probably the most serious one is that if you violate an assumption that you must defer to non-parametric statistical test which makes fewer assumptions. This often involves using a rank based method. This is often unnecessary because regression and other linear models (t-tests, ANOVA) are very robust to violations of the normality assumption, and somewhat robust to the others. Also, rank-based non-parametric methods involve converting your previous numeric data to just their relative ranks, which tosses out much of the information content of the data.
The second most serious misconception is that the normality assumption relates to the raw data. This only applies to t-tests and ANOVA if you first divide the data up into each group being tested for differences; it is never true for regression data. The normality assumption is in regards to the residuals of the model, not the raw data. The residuals can be thought of as what’s left of the data after the proposed treatment effects (t-tests, ANOVA) or effect of a continuous predictor (regression) are removed. Splitting data to be analyzed by a t-test or ANOVA up into groups then looking for normality is therefore mathematically equivalent to fitting the model and then looking at the residuals.
The third misconception is one that isn’t well known, and is minor: the term kurtosis is often used as a technical term for how peaked a distribution is. In actuality, kurtosis only relates to the tails of the distribution (Westfall 2014: Kurtosis as Peakedness, 1905–2014. R.I.P. Am. Stat.). I wasn’t aware of this until I was doing some research for this lesson!
In this tutorial we’ll look at our model of milk fat versus female (maternal) body size and examine if these data meet these assumptions.
Install the mammals milk package if needed.
# install_github("brouwern/mammalsmilk")
You can then load the package with library()
library(mammalsmilk)
The example data is milk_primates
data("milk_primates")
Log transformation of the predictor makes things more linear.
#this could be done with dplyr::mutate() too
milk_primates$mass.fem.log <- log(milk_primates$mass.fem)
Load the standard libraries
library(ggplot2)
library(ggpubr)
#> Loading required package: magrittr
library(cowplot)
#>
#> Attaching package: 'cowplot'
#> The following object is masked from 'package:ggpubr':
#>
#> get_legend
#> The following object is masked from 'package:ggplot2':
#>
#> ggsave
Load some you might not have downloaded
library(arm)
#> Loading required package: MASS
#> Loading required package: Matrix
#> Loading required package: lme4
#>
#> arm (Version 1.10-1, built: 2018-4-12)
#> Working directory is C:/Users/lisanjie/Documents/1_R/git/mammalsmilk/vignettes
library(ggfortify)
Note that library() won’t load a package that you haven’t previously downloaded!
Recall that our data look like this
gg.milk <- ggscatter(data = milk_primates,
y = "fat",
x = "mass.fem.log",
add = "reg.line")
gg.milk
We can fit a model with lm()
lm.mass <- lm(fat ~ mass.fem.log,
data = milk_primates)
We can get the intercept and slope of the model using the coef() function
coef(lm.mass)
#> (Intercept) mass.fem.log
#> 20.514997 -1.751746
This indicates that the line through the data points is described by the equation
fat = 20.51 + -1.75*log(female mass)
If we want to estimate the fat content of a primate with a body mass of 65kg grams we first need to get the mass in grams.
mass.grams <- (65*1000)
mass.grams
#> [1] 65000
Then plug this into the regression equation
20.51 + -1.75*log(mass.grams)
#> [1] 1.116251
[To add: show how to write a function for the equation]
We would predict that a primate weighting 65 kg (65000 grams; or a rodent of unusual size, since we included them in our data too) would have a milk fat content of 1.12 %.
We can find where our x value intercepts the regression line, and then trace it back to the y axis. We can draw lines on our graph using ggplot’s geom_hline() and geom_vline() (h=horizontal, v = vertical)
We can see where our 65kg mammal would be along the x axis like this
gg.milk +
geom_vline(xintercept = log(mass.grams),
color = "red")
Then trace back to the y axis like this
gg.milk +
geom_vline(xintercept = log(mass.grams),
color = "red") +
geom_hline(yintercept = 20.51 + -1.75*log(mass.grams),
color = "red")
Residuals are the difference between an observed y value and what is predicted by the equation estimated using regression. (Technically, if you plug and observed x value into a regression, what you get out is a fitted y value; if you put in a novel x value not in your data, what you get out is predicted value).
Let’s plug in our smallest observed x value and check out its residual.
Our smallest x variable can be found like this. First, sort the masses in order using the order() command
i <- order(milk_primates$mass.fem)
Then get just the first value, which is the smallest (default is to sort into increasing order). This is done using square brackets [..]
i1 <- i[1]
To make things easy to look at I’ll pick some focal columns and put them into a vector called j.
j <- c("fat","mass.fem","mass.fem.log","spp")
Now, look at the data associated with the smallest x value
milk_primates[i1,j]
#> fat mass.fem mass.fem.log spp
#> 34 27 16 2.772589 Mus musculus
The smallest animal is the mouse Mus musculus, which has a milk fat of 27%. If we take its log(mass.fem) and plug it into our equation we get a prediction of its milk fat based on its mass:
First, pull out mass.
mass.mouse <- milk_primates[i1,"mass.fem"]
Then plug this in to the equation
20.51 + -1.75*log(mass.mouse)
#> [1] 15.65797
The prediction from the equation is 15.67%, over 11% percentage points lower than what was observed. The difference between the observed y value (27%) and the predicted value (15.7%) is the residual or error. In this case, 27-15.7 = 11.34.
We get residuals in R using the resid() command called on a fitted model object.
r.i <- resid(lm.mass)
We can use our index (i1) from above to see what R calculates the residual as
r.i[i1]
#> 34
#> 11.34188
R says the residual is 11.34, same as we calculated above.
We can visualize this residual using geom_segment() (sorry, the syntax for geom_segment is a bit dense because we have to specify the x and y coordinates of both ends of the line, and wrap it in ggplot’s aes() command)
gg.milk +geom_segment(aes(y = 27,
yend = 15.7 ,
x = log(16),
xend = log(16)),
color = "red")
We can visualize all of the residuals if we want. First, get the data that was fed into the model from the lm.mass object
#all the data
model.dat <- lm.mass$model
#just the fat column
fat <-model.dat$fat
#just the log of mass column
mass.fem.log <- model.dat$mass.fem.log
Then plot all of the residuals
gg.milk +geom_segment(aes(y = fat,
yend = fat- r.i,
x = mass.fem.log,
xend = mass.fem.log,
color = "red"))
This isn’t a really diagnostic, but something to think about with regards to why everything gets squared in statistics (“sum of squares”, “least squares”)
sum(r.i)
#> [1] -3.885781e-15
This is very very very very close to zero. This is because a consequence of fitting a regression line properly is that all of the residuals above the line are balanced by residuals below the line.
The mean is also close to zero for the same reasons.
mean(r.i)
#> [1] -9.254569e-17
In order for p-values, confidence intervals etc to be correct the data should be normal. In practice this isn’t a huge deal but its good to check.
hist(r.i)
These residuals aren’t particularly normal. In the original paper, the author’s log transformed fat to improve normality.
#transform
milk_primates <- milk_primates %>%
mutate(fat.log = log(fat))
#refit model
lm.mass.log.fat <- lm(fat.log ~ mass.fem.log,
data = milk_primates)
We can check the residuals again
hist(resid(lm.mass.log.fat))
This is maybe a bit better.
One problem with a log transformation is that we are working with a percentage, and so that natural transformation is actually the logit transformation. Previously the arcsine transformation was used for percentages, but this less than ideal for several reasons. (Warton and Hui 2011. The arcsine is asinine: the analysis of proportions in ecology. Ecology; see also “The Arcsine Transformation: Has the time come for retirement?”)
The arm package has a handy logit() function. Note that we have to divide fat by 100 because the original data was expressed as a percentage, and arm::logit() wants a fractional value.
#recalculate as a proportion
milk_primates <- milk_primates%>%
mutate(fat.proportion = fat/100)
#logit transform
milk_primates <- milk_primates %>%
mutate(fat.logit = arm::logit(fat.proportion))
Refit the model
lm.mass.logit.fat <- lm(fat.logit ~ mass.fem.log,
data = milk_primates)
This is maybe a little more symmetrical, but still pretty pointy.
hist(resid(lm.mass.logit.fat))
Some people like to do a test for normality. One option is The Shapiro-Wilk normality test. This can be done with shapiro.test(). Its interesting to compare the results of this test for the three models we’ve run.
Below, I run the model and add “$p” to the outside of the call to the model to get just the p-value.
shapiro.test(resid(lm.mass))$p
#> [1] 0.004082116
shapiro.test(resid(lm.mass.log.fat))$p
#> [1] 0.1935287
shapiro.test(resid(lm.mass.logit.fat))$p
#> [1] 0.3969284
The first, untransformed model, has a low p-value, meaning we would reject the hypothesis of normality. For both of the transformations, we cannot reject the null of normality.
There are 2 general problems with testing for assumptions like this
Most people seem to advocate assessing normality using something called a normal qqplot, which stands for normal quantile-quantile plot (usually just called a qqplot).
The ggfotify augments ggplot2 and allows you to use the autoplot command to generate diagnostics plots. Setting which = 2 gives you a qqnormal plot.
There’s some math behind how it works, but basically you want to see the datapoints of the plot fall along the 1:1 line.
For our original model, the points drift off of the 1:1 line a lot, which isn’t good.
autoplot(lm.mass, which = 2)
Let’s look at the logit model
autoplot(lm.mass.logit.fat, which = 2)
Not perfect, but overall better.
Note that the qqplot can potentially give you more information than a test for normality. As we saw above, the log and logit transform had high p-values for the Shapiro-wilkes test, but the qqplot indicates some lack of normality. When you have a lot of data that is truly normal, the dots will all fall almost exactly on the line.
This code is a bit dense but it shows what 100 data points with completely normal x and y variables look like. Trying running the code several times to see how far the points stray from the 1:1 line.
s <- matrix(c(10,3,3,2),2,2)
norm.dat <- mvrnorm(n = 100, rep(0, 2), s)
norm.dat <- data.frame(norm.dat)
names(norm.dat) <- c("y","x")
lm.norm <- lm(y ~ x, data = norm.dat)
autoplot(lm.norm, which = 2)
If the assumption of constant variance is violated you might be able to see it in the raw data because points on one of the graph will be close to the regression line fan out on both sides on the other. This needs to be formally assessed by plotting residuals.
One way to do this is to plot the residuals of the model against the predictions from the model (what R calls fitted values). We can get the fitted values with the fitted command
milk_primates$f.i <- fitted(lm.mass)
milk_primates$r.i <- resid(lm.mass)
Then plot them.
ggscatter(y = "r.i", x = "f.i",
data = milk_primates) +
geom_hline(yintercept = 0,
col = "red")
If the data points fan out away from a horizontal line at zero, you have a problem.
The autoplot can generate this plot automatically
autoplot(lm.mass, which = 1)
Some people like to take the absolute value of the residuals for this type of plot and add a trend line
milk_primates$r.i.abs <- abs(milk_primates$r.i)
ggscatter(y = "r.i", x = "f.i",
data = milk_primates,
add = "loess") +
geom_hline(yintercept = 0,
col = "red")
A similar plot is the scale-location plot. I am not sure how this information is different or complementary to the previous plots. A trend in the residuals is not good, though.
autoplot(lm.mass, which = 3)
We can plot multiple plots at the same time by passing which = a vector of multiple numbers.
Let’s look at our logit transformed model
autoplot(lm.mass.logit.fat,
which = c(1,2,3))
Go back and forth between the lm.mass and lm.mass.logit.fat models to look for differences. For lm.mass, the residuals vs. fitted plot has a fan shape, and the scale-location plot trends upwards. In contrast, lm.mass.logit.fat has a residual vs. fitted plot with a triangle shape which actually isn’t so bad; a long diamond or oval shape is usually what we are shooting for, and the ends are always points because there is less data there.
The lm.mass.logit.fat scale-location plot looks a bit funny, with an initial upward trend. Most of the line is flat, though, which is good.
Now let’s turn to thinking about how unusual data points might impact our regression coefficients.
High leverage points are those with x values that are much higher than other data point. In our analysis, if we added a whale to our primate data, it would have a mass much much higher than all the primates. This would be a high leverage point that would necessarily pull the regression line towards it.
High leverage data point aren’t necessarily outliers; they simply are data points for which there is a gap between them and the rest of your data.
The primate data we have been working with actually initially had a very high leverage point. We’ve mostly been working with the data on the log-transformed scale for the x axis (log(female mass)) If we plot the data on the original scale we get this:
ggscatter(y = "fat",
x = "mass.fem",
data = milk_primates,
add = "reg")
The largest primate is almost 3 times bigger than the next largest. Notice how the regression lines passes near the point on the far right. High leverage points do this as part of the process of minimizing the sum of squares. This can cause distortion.
For comparison, let’s fit a model where mass isn’t transformed.
lm.mass.no.log <- lm(fat ~ mass.fem, data = milk_primates)
Leverage is quantified by something called the hat matrix. If you take a stats class that uses matrix algebra you’ll probably learn how to do the calculations for this. We’ll just use the hatvalues() function.
We can make a histogram of the hat values and see that our largest primate has a hat value much larger than all the others.
hist(hatvalues(lm.mass.no.log))
The magic of data transformation, however, re-scales things and makes this far right point no longer have such high leverage. Let’s take a look at our model where female body mass was transformed:
hist(hatvalues(lm.mass))
We now have a much smoother distribution of hat values; transformation has reduced the leverage of the largest species.
Note that the leverage values depend only on the predictors. If we compare the leverage values for our model with log transformed and logit transformed fat there is no difference
summary(hatvalues(lm.mass.log.fat))
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.02381 0.02569 0.03511 0.04762 0.06417 0.14811
summary(hatvalues(lm.mass.logit.fat))
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.02381 0.02569 0.03511 0.04762 0.06417 0.14811
A common plot is residuals versus leverage. A high residual and high leverage can be problematic. In these graphs.
We could make this plot by hand
plot(resid(lm.mass.logit.fat) ~ hatvalues(lm.mass.logit.fat))
abline(h = 0, col = 2)
Actually, the residuals are technically a thing called “standardized residuals”, we we have to use (in this case the difference is minor).
plot(rstandard(lm.mass.logit.fat) ~ hatvalues(lm.mass.logit.fat))
abline(h = 0, col = 2)
A cleaner look is achieved with plot() on the model and ‘which = 5’. Let’s look at the difference between our new model with mass and the original log(mass)
plot(lm.mass.no.log, which = 5)
plot(lm.mass, which = 5)
You can make these plots with autoplot() and which = 5. However, base R includes the red liens for Cook’s distance, which is discussed below. A data point that falls outside the red isoclines for 1.0 is considered “influential” and potentially problematic. See below for more on Cook’s distance and influence.
Unlike the other plots, I don’t think (CHECK!) that the pattern of the points matters. The red line plotted is just to draw your eye to extreme points. See https://data.library.virginia.edu/diagnostic-plots/
It needs to be pointed out that high leverage points are not outliers. High leverage points simply have an x-value that is far from the rest of the data it is grouped with. For example, if we took data from the World Bank plotted mean household income versus number of automobiles for all countries of the world, South Africa probably wouldn’t look special. If we just plotted countries from sub-Saharan Africa, however, South Africa would be unique.
Outliers are data points which have a y value which is extreme given their x value. So, if you knew their x value and had to guess their y value, you’d be very wrong. In our data, if we have a large primate with with 30% milk fat, that would be an outlier, since large primates usually have milk fat <10%. Outliers might or might not impact regression results. That is, outliers might or might not have high influence (above) or leverage (below). Transformation of the y variable can sometimes reduce the impact of outliers.
“Some people ask whether use of a transformation is cheating” Bland & Altman 1996 BMJ.
Transformation can seem like magic at best and cheating at worst. It an be hard to wrap your mind around what’s going on, and I am honestly not very good at explaining it.
“The removal of outliers to acquire a significant result is a questionable research practice that appears to be commonly used in psychology.” (Bakker and Wicherts 2014)
Outliers sometimes are treated suspiciously, like they are mistakes that need to be purged. There are statistical tests for outliers, and sometimes these are used to justify removing suspect data points. They might be a data recording error or data entry mistake, or they might just be exceptional individuals or observations which you currently don’t have a conceptual model or statistical predictors to account for. In biology its generally considered bad practice to remove outliers unless they can be shown to be due to outright experimental error or data handling mistakes.
Psychologists seem to talk about outlier removal a lot more. When working with human subjects it might make sense to remove outliers if you have evidence that they weren’t following directions. For example, if you are a psychologist studying reaction times and you have an individual that was really really slow, perhaps they weren’t really following directions or were distracted and so aren’t a providing valid data on what you. However, as quote above implies, this practice can be abused.
Leys et al. 2013. Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of Experimental Social Psychology.
Bakker and Wicherts 2014. Outlier Removal and the Relation with Reporting Errors and Quality of Psychological Research. PLoS ONE.
When a data point has a strong impact on regression results, its is called an influential observation. High leverage points usually (I think…) have high influence; however, highly influential points often do not have high leverage. That is because high leverage points always occur at the extreme ends of the x axis (uniquely low or high values of x variables) while highly influential points can occur anywhere in the data set.
Cook’s distance is a common measure of influence. You can think of Cook’s distance as gauging what the impact of iteratively dropping each data point from the model and re-fitting the regression to the new data set. If a data point is dropped from the model and this changes the regression output a lot, then it will have a large Cook’s distance.
You can get a sense for which data points have large cooks distance using autoplot with ‘which = 4’, which just plots the Cook’s distance versus the order they occur in the dataset.
autoplot(lm.mass.no.log, which = 4)
An important diagnostic plot is to plot the leverage value against Cook’s distance.
autoplot(lm.mass, which = 6)
As noted above, a Cook’s distance >1 is considered potentially problematic, though there is disagreement over this and more sophisticated ways to benchmark your dat.
“Assumptions of Linear Regression”
https://ademos.people.uic.edu/Chapter12.html#2_regression_assumptions
Hollard. 2011. “Regression diagnostic plots.” Data Analysis in the Geosciences (GEOL 8370)
Chatterjee et al. 1992. A review of regression diagnostics for behavioral research. Applied Psychological Measurement.
Quick-R: Regression Diagnostics
https://ademos.people.uic.edu/Chapter12.html#32_testing_for_outliers:_outliertest()
Misc functions for formal tests of assumptions. (car is a great package, but most people prefer graphical methods to format tests )
Pena & Slate. 2006. Global Validation of Linear Model Assumptions. Am Stat.
Valcul & Kempenaers. 2010. Spatial autocorrelation: an overlooked concept in behavioral ecology. Behavioral Ecology
Legendre. 1993. Spatial autocorrelation: trouble or new paradigm? Ecology.
Noble et al. 2017. Nonindependence and sensitivity analyses in ecological and evolutionary meta-analyses. Molecular Ecology
Curran-Everett. 2017. Explorations in statistics: the assumption of normality. Advances in physiology education.
Generally excellent short tutorials on key topics.
Altman & Krzywinski. 2015. Points of Significance: Association, correlation and causation. Nature Methods
Krzywinski & Altman. 2015. Points of Significance: Multiple linear regression. Nature Methods.
Altman & Krzywinski. 2016. Points of Significance: Analyzing outliers: influential or nuisance? [Nature Methods.]
“Demystying the Natural Logarith (ln)” https://betterexplained.com/articles/demystifying-the-natural-logarithm-ln/
Bland & ALtman. 1996. Statistics notes. Logarithms. MBJ
Altman & Krzywinski. 2016. Points of Significance: Regression diagnostics. Nature Methods.
**Curran-Everett. 2018. Explorations in statistics: the log transformation. Advances in Physiology Education
Bland & Altman 1996. Statistics Notes: Transforming data. BMJ
Bland & ALtman 1996. Statistics notes. Logarithms. MBJ
Keene. 1995. The log transformation is special. Statistics in Medicine.
Bland & ALtman. 1996. Statistics notes: Transformations, means, and confidence intervals. BMJ
Manning. 1998. The logged dependent variable, heteroscedasticity, and the retransformation problem. Journal of Health Economics
Cleasby & Nakagaw 2011. Neglected biological patterns in the residuals. Behavioral Ecology & Sociobiology
Schielzeth & Nakagawa. 2013. Nested by design: model fitting and interpretation in a mixed model era. Methods in Ecology and Evolution.
Chaves 2010. An entomologist guide to demystify pseudoreplication: data analysis of field studies with design constraints. Journal of medical entomology
Wagner et al. 2006. Accounting for multilevel data structures in fisheries data using mixed models. Fisheries.
Limpert et al. 2001. Log-normal Distributions across the Sciences: Keys and Clues. BioScience.
Westfall 2014: Kurtosis as Peakedness, 1905–2014. R.I.P. Am. Stat.
Leys et al. 2013. Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of Experimental Social Psychology.
Bakker and Wicherts 2014. Outlier Removal and the Relation with Reporting Errors and Quality of Psychological Research. PLoS ONE.
Zhang 2016. Residuals and regression diagnostics: focusing on logistic regression. Annals of Translational Medicine.


Release notes for current and previous releases
Date
Version
Comment
Link
12/11/2020
0.17
New comms and new SQL functionality
Release notes 0.17
10/22/2020
0.16
Major release
Release notes 0.16
8/31/2020
0.15
It’s better
Release notes 0.15
6/9/2020
0.14
Bigger than GPU support
Release notes 0.14
4/7/2020
0.13
Improving stability with libcudf++, expanded SQL and more!
Release notes 0.13
2/6/2020
0.12
Skip data, memory allocator and more!
Release notes 0.12
12/17/2020
0.11
One repo to rule them all and its all Python
Release notes 0.11