Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding lm and environment

Tags:

r

lm

I'm executing lm() with arguments formula, data, na.action, and weights. My weights are stored in a numeric variable.

  • When I specify formula as a character (i.e. formula = "Response~0+."), I get an error that weights is not of the proper length (even though it is).
  • When I specify formula without the quotes (i.e. formula = Response~0+.), the function works fine.

I stumbled upon this sentence in the lm() documentation:

All of weights, subset and offset are evaluated in the same way as variables in formula, that is first in data and then in the environment of formula.

This is difficult for me to interpret, but I sense that it contains the answer to my question.

like image 620
SFun28 Avatar asked Jul 29 '11 18:07

SFun28


People also ask

How do managers'environmental values and environmental transformational leadership affect employee motivation?

We found that employees' perceptions of managers' environmental transformational leadership were positively related to employees' internal and external motivation to perform PEBs, as well as their self-reported basic and advanced PEBs. Employees' environmental values were positively related to internal motivation, and possibly external motivation.

How should managers'environmental leadership be measured?

Employees' perceptions of managers' environmental leadership are an appropriate measure because employees' perceptions are likely to drive their behaviors. This approach acknowledges that, in part, leadership is in the “eye of the follower.”

How does environmental leadership affect employees'environmental behaviors?

Perceived environmental leadership is related to self-reported environmental behaviors. Leadership may be positively linked to employees' internal and external motivation. Internal, but not external, motivation may boost proenvironmental behaviors. Employees' environmental values may affect their behaviors through motivation.


2 Answers

When you construct an argument that is intended to be a formula, the parser "tries it out". It "expects" the argument to be a language call in the R sense. It does not expect it to be a character string delimited by quotes. That is why you will see people constructing formula arguments with paste(.) but then finishing them off by putting the strings or more correctly "character object" as an argument to as.formula(). What gets returned has been given a class of "formula" and a mode of "call":

> class( as.formula("Y ~ x") )
[1] "formula"
> mode( as.formula("Y ~ x") )
[1] "call"s
> class( "Y ~ x")
[1] "character"
> mode( "Y ~ x")
[1] "character"
like image 192
IRTFM Avatar answered Oct 06 '22 20:10

IRTFM


(This has nothing to do with the real problem you have, [@DWin has addressed that, as have commentators on your Q] but is by way of explanation of the part of the documentation you quote)

The quoted help information means that the same process is used to find the variables/objects references in a model formula as is used to find variables/objects supplied to the arguments weights, subset etc.

R looks for for the objects referenced in the formula and by arguments weights, subset, and offset, first in the data object and then in the environment of the formula (which is usually the global environment during interactive use).

The reason why the docs mention this explicitly is because lm() as with many R functions that employ model-formula interfaces use the so-called standard non-standard evaluation. The up-shot is that say one supplies weights = foo, R won't necessarily look for object foo in evaluating the argument. Instead, it will look for an object with the name foo in the object supplied to the data argument, and if it doesn't find it there, then in the environment attached to the model formula, which as mentioned, doesn't always have to be the global environment.

like image 32
Gavin Simpson Avatar answered Oct 06 '22 21:10

Gavin Simpson