0

我有一个数据集,其中包含一个因变量 y,以及两个独立的 x(连续)和 z(0 或 1 的指标)。我想要适合的模型是

y = a*1(z==0) + b*x*1(z==1),

换句话说,如果 z==0 那么估计应该只是截距,否则估计应该是截距加上 b*x 部分。

我想出的唯一方法是分两步进行,即首先取 z==0 的 y 的平均值(这是截距的估计值),然后从其余的 ys 中减去这个值并运行一个简单的回归来估计斜率。

我(几乎)确定这会起作用,但理想情况下,我想使用 lm 或类似的东西在 R 中的单行中获得估计值。有没有办法做到这一点?提前感谢!

4

3 回答 3

2

您可以通过拟合交互来做到这一点:

fit <- lm( y ~ x:z )

这会将 x 乘以 z,因此当 z 为 0 时,x 的值将没有影响,而当 z 为 1 时,它只会适合 x。

于 2013-08-13T13:26:23.907 回答
2

您可以定义一个新变量,如果z为 0,则为 0,否则等于x

y ~ ifelse(z, x, 0)
于 2013-08-13T10:11:57.607 回答
0

您的问题可以通过两种方式解决:

za)首先在=0 和=1时创建两个假人z(假设这是z0z1:with(mydata,ifelse (z==1,z0,z1))并将两者都包含在模型中并运行以下模型而不进行截距:

lm(y~as.factor(z)+x-1,data=mydata)lm(y~z0+z1+x-1,data=mydata) #model 包括两个没有截距的虚拟变量以避免虚拟变量陷阱

y=b0z0+b1z1+b2x

b)第二个只包含一个假人 ( z=1) 并使用截距运行以下模型

lm(y~z1+x,data=mydata) #model 包括一个带截距的假人

y=intercept+b1z1+b2x#coefficient on z1 在 z=0 上给出增量值

z1=0时y的期望值是intercept+b2x,z1=1时y的期望值是intercept+b1z1+b2x。不同的是b1z1。

注意:这更多地与统计有关,而不是与编程有关。所以,你最好在CV中问这些类型的问题。

于 2013-08-13T13:59:15.953 回答