R公式中y~1的含义是什么?

49

我正在阅读有关R公式的文档,并尝试弄清如何使用depmix(来自depmixS4包)

现在,在depmixS4的文档中,示例公式往往是像y ~ 1这样的东西。 对于简单情况,例如y ~ x,它定义了输入x和输出y之间的关系,因此我知道它类似于y = a * x + b,其中a是斜率,b是截距。

如果我们回到y ~ 1,这个公式让我困惑。它是否相当于y = 1(位于y = 1的水平线)?

为了增加一点背景知识,如果您查看depmixs4文档,下面有一个示例:

depmix(list(rt~1,corr~1),data=speed,nstates=2,family=list(gaussian(),multinomial()))

总的来说,以~ 1结尾的公式令我困惑。请问有人能解释一下~ 1y ~ 1的含义吗?

3个回答

57

R中用于模型公式的运算符(星号、加号、脱字符)之一的“one”符号表示截距。换句话说,当自变量为零或没有影响时,因变量预期具有的值。(为了使用模型术语的更常见数学含义,您可以将它们包装在中)。截距通常是默认假定的,因此最常见的情况是在明确说明没有截距的模型上看到它。

以下是两种指定线性回归模型y关于x的相同模型的方法。第一个有隐含的截距项,第二个有显式的截距项:

y ~ x
y ~ 1 + x

以下是不包含截距项的通过x对y进行线性回归的方法:

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中指定模型公式的最佳位置。我建议您查看此说明或者《R语言简介》的第11章节。


1
谢谢您的解释,非常详尽。我学到了很多! - Antony
MattBagg,在ksvm(kernlab包)中,样本的公式显示为type~.。这又让我感到困惑。你知道这是什么意思吗?我知道这不是原始问题中的内容,但我也不确定是否创建一个SO问题是个好主意,因此在这里问一下。 - Antony
1
通常,您应该提出一个真正的问题并得到一个真正的回答,以便双方都能得到信用,更重要的是,其他人也能找到答案。这里的公式意味着数据框中所有其他变量预测的类型。Period是“其他所有内容”的缩写。 - MattBagg
仍然令人困惑。人们期望像“int a;”或“double sin(double x);”这样的解释,因为这是一种编程语言。 - user1539634

23

如果您的模型形式为 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

8

通常这样的公式描述了依赖变量和独立变量之间的关系,采用线性模型的形式。左边是依赖变量,右边是独立变量。独立变量用于计算线性模型的趋势分量,残差被假定具有某种分布。当独立变量等于1 ~ 1时,趋势分量是一个单一值,例如数据的平均值,即线性模型只有一个截距。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接