2

0 より大きいx3 番目の変数 を条件とする の係数を推定する R の回帰を指定したいと思います。たとえば、z

y ~ a + x*1(z>0) + x*1(z<=0)

式を使用してRでこれを行う正しい方法は何ですか?

4

2 に答える 2

11

":" (コロン) 演算子は、条件付き相互作用を構築するために使用されます (で構築された互いに素な予測子と共に使用される場合I)。予測とともに使用する必要があります

> y=rnorm(10)
> x=rnorm(10)
> z=rnorm(10)
> mod <- lm(y ~ x:I(z>0) )
> mod

Call:
lm(formula = y ~ x:I(z > 0))

Coefficients:
    (Intercept)  x:I(z > 0)FALSE   x:I(z > 0)TRUE  
      -0.009983        -0.203004        -0.655941  

> predict(mod, newdata=data.frame(x=1:10, z=c(-1, 1)) )
         1          2          3          4          5          6          7 
-0.2129879 -1.3218653 -0.6189968 -2.6337471 -1.0250057 -3.9456289 -1.4310147 
         8          9         10 
-5.2575108 -1.8370236 -6.5693926 
> plot(1:10, predict(mod, newdata=data.frame(x=1:10, z=c(-1)) )  )
> lines(1:10, predict(mod, newdata=data.frame(x=1:10, z=c(1)) ) )

そのモデルマトリックスを見ると役立つかもしれません:

> model.matrix(mod)
   (Intercept) x:I(z > 0)FALSE x:I(z > 0)TRUE
1            1      -0.2866252     0.00000000
2            1       0.0000000    -0.03197743
3            1      -0.7427334     0.00000000
4            1       2.0852202     0.00000000
5            1       0.8548904     0.00000000
6            1       0.0000000     1.00044600
7            1       0.0000000    -1.18411791
8            1       0.0000000    -1.54110256
9            1       0.0000000    -0.21173300
10           1       0.0000000     0.17035257
attr(,"assign")
[1] 0 1 1
attr(,"contrasts")
attr(,"contrasts")$`I(z > 0)`
[1] "contr.treatment"
于 2013-01-28T20:17:10.067 に答える
2
  y <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
  z <- sample(x=-10:10,size=length(trt),replace=T)
  x <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
  a <- rnorm(n=length(x))
  lm(y~a+I(x*1*I(z>0))+ I(x*1*I(z<=0)))

:しかし、DWINソリューションで演算子を使用する方がエレガントだと思います..

編集

lm(y~a+I(x*1*I(z>0))+ I(x*1*I(z<=0)))

電話:

lm(formula = y ~ a + I(x * 1 * I(z > 0)) + I(x * 1 * I(z <= 0)))

Coefficients:
         (Intercept)                     a   I(x * 1 * I(z > 0))  I(x * 1 * I(z <= 0))  
              6.5775               -0.1345               -0.3352               -0.3366  

> lm(formula = y ~ a+ x:I(z > 0))

Call:
lm(formula = y ~ a + x:I(z > 0))

Coefficients:
    (Intercept)                a  x:I(z > 0)FALSE   x:I(z > 0)TRUE  
         6.5775          -0.1345          -0.3366          -0.3352  
于 2013-01-28T20:16:59.470 に答える