我有一个数据集,其中包含一个因变量y,以及两个独立的x(连续)和z(指标为0或1)。我想要的模型是
y = a*1(z==0) + b*x*1(z==1),
换句话说,如果z == 0那么估计应该只是截距,否则估计应该是截距加上b * x部分。
我唯一想到的就是分2步完成,即首先取y的平均值,其中z == 0(这是截距的估计值),然后从其余部分中减去该值对ys进行简单回归估计斜率。
我(几乎)确定这会起作用,但理想情况下我希望使用lm或类似的东西在R中进行单线程估算。有没有办法实现这个目标?谢谢你的推荐!
答案 0 :(得分:2)
您可以定义一个新变量,如果z
为0则为0,否则等于x
:
y ~ ifelse(z, x, 0)
答案 1 :(得分:2)
您可以通过拟合互动来实现这一目标:
fit <- lm( y ~ x:z )
这会将x乘以z,这样当z为0时,x的值将没有影响,当z为1时,它只适合x。
答案 2 :(得分:0)
您的问题可以通过两种方式解决:
a)首先在z
= 0和z
= 1时创建两个假人(假设这是z0
和z1
: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
z1上的#coefficient在z = 0
当z1 = 0时,y的期望值是截距+ b2x,当z1 = 1时,y的期望值是截距+ b1z1 + b2x。差别是b1z1。
注意:这与统计数据有关,而与编程有关。因此,您最好在CV中询问这些类型的问题。