我正在阅读R Formula上的文档,并尝试弄清楚如何使用depmix (from the depmixS4 package)。
现在,在depmixS4的文档中,示例公式往往类似于y ~ 1
。
对于像y ~ x
这样的简单大小写,它定义了输入x和输出y之间的关系,因此我认为它类似于y = a * x + b
,其中a
是斜率,{{1是截距。
如果我们回到b
,公式就会让我失望。它等同于y ~ 1
(y = 1时的水平线)?
要添加位上下文,如果查看depmixs4文档,下面有一个示例
y = 1
我认为一般来说,以depmix(list(rt~1,corr~1),data=speed,nstates=2,family=list(gaussian(),multinomial()))
结尾的公式让我感到困惑。可以解释~ 1
或~ 1
的含义吗?非常感谢!
答案 0 :(得分:37)
R中的模型公式(asterix,plus,caret)中使用的许多运算符具有特定于模型的含义,这是其中之一:“一”符号表示截距。
换句话说,当自变量为零或没有影响时,它是因变量预期具有的值。 (要使用模型术语的更常见的数学含义,请将它们包装在I()
中)。通常假定截距,因此最常见的是在明确说明没有截距的模型的情况下看到它。
以下是为x上的y线性回归模型指定相同模型的两种方法。第一个是隐式拦截术语,第二个是明确的术语:
y ~ x
y ~ 1 + x
以下是通过原点(即没有截距项)对x进行线性回归的方法:
y ~ 0 + x
y ~ -1 + x
y ~ x - 1
在你提到的特定情况下(y~1),y正在被其他变量预测,因此自然预测是y的平均值,正如Paul Hiemstra所说:
> data(city)
> r <- lm(x~1, data=city)
> r
Call:
lm(formula = x ~ 1, data = city)
Coefficients:
(Intercept)
97.3
> mean(city$x)
[1] 97.3
用-1
移除拦截会让你一无所获:
> r <- lm(x ~ -1, data=city)
> r
Call:
lm(formula = x ~ -1, data = city)
No coefficients
formula()
是一个用于从对象中提取公式的函数,其帮助文件不是阅读有关在R中指定模型公式的最佳位置。我建议您查看this explanation或第11章An Introduction to R
答案 1 :(得分:17)
如果您的模型的格式为y ~ x1 + x2
,则(粗略地说)代表:
y = β0 + β1(x1) + β2(x2)
Which is of course the same as
y = β0(1) + β1(x1) + β2(x2)
上述公式中有隐式+1
。实际上,上面的公式是y ~ 1 + x1 + x2
我们可以有一个非常简单的公式,即y不依赖于任何其他变量。这是您引用的公式,
y ~ 1
大致相当于
y = β0(1) = β0
正如@Paul指出的,当你解决简单模型时,你会得到β0 = mean (y)
# Let's make a small sample data frame
dat <- data.frame(y= (-2):3, x=3:8)
# Create the linear model as above
simpleModel <- lm(y ~ 1, data=dat)
## COMPARE THE COEFFICIENTS OF THE MODEL TO THE MEAN(y)
simpleModel$coef
# (Intercept)
# 0.5
mean(dat$y)
# [1] 0.5
答案 2 :(得分:5)
通常,这样的公式以线性模型的形式描述了相关变量和自变量之间的关系。左侧是因变量,右侧是独立变量。自变量用于计算线性模型的趋势分量,然后假设残差具有某种分布。当独立值等于一~ 1
时,趋势分量是单个值,例如,数据的平均值,即线性模型只有截距。