2016-04-14 5 views
0

これは初めての質問です。インターセプトなしのスロープ・シフターとしてのダミー変数

スロープダミー変数の生成に問題があります(インターセプトダミーなし)。 しかし、以下に示すように、ダミー変数に独立変数を掛け合わせると、 スロープダミーとインターセプトダミー結果の両方が表現されます。

私はスロープダミーのみを組み込み、インターセプトダミーを除きたいと思います。

私はあなたの助けに感謝します。あなたがageの各レベルで異なるスロープを推定したい場合は カテゴリーで探す、 yjkim

reg <- lm(year ~ as.factor(age)*log(v1269)) 
Call: 
lm(formula = year ~ as.factor(age) * log(v1269)) 

Residuals: 
    Min  1Q Median  3Q Max 
-6.083 -1.177 1.268 1.546 3.768 

Coefficients: 
          Estimate Std. Error t value Pr(>|t|) 
(Intercept)     5.18076 2.16089 2.398 0.0167 * 
as.factor(age)2    1.93989 2.75892 0.703 0.4821 
as.factor(age)3    2.46861 2.39393 1.031 0.3027 
as.factor(age)4   -0.56274 2.3-0.245 0.8069 
log(v1269)     -0.06788 0.23606 -0.288 0.7737 
as.factor(age)2:log(v1269) -0.15628 0.29621 -0.528 0.5979 
as.factor(age)3:log(v1269) -0.14961 0.25809 -0.580 0.5622 
as.factor(age)4:log(v1269) 0.16534 0.24884 0.664 0.5065 
+0

'(代行受信)'や 'as.factor(age)2'、' as.factor(age)3'、 'as.factor(age)4'の3つの項を取り除きたいですか?条項? –

答えて

0

はちょうどあなたがで%in%演算子を使用することができ、-1 formaula

reg <- lm(year ~ as.factor(age)*log(v1269) -1) 
0

内を必要とします式

set.seed(1) 
df <- data.frame(age = factor(sample(1:4, 100, replace = TRUE)), 
       v1269 = rlnorm(100), 
       year = rnorm(100)) 

m <- lm(year ~ log(v1269) %in% age, data = df) 
summary(m) 

これは(これは完全にランダムなダミーの愚かなデータセットのため)

> summary(m) 

Call: 
lm(formula = year ~ log(v1269) %in% age, data = df) 

Residuals: 
    Min  1Q Median  3Q  Max 
-2.93108 -0.66402 -0.05921 0.68040 2.25244 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|) 
(Intercept)  0.02692 0.10705 0.251 0.802 
log(v1269):age1 0.20127 0.21178 0.950 0.344 
log(v1269):age2 -0.01431 0.24116 -0.059 0.953 
log(v1269):age3 -0.02588 0.24435 -0.106 0.916 
log(v1269):age4 0.06019 0.21979 0.274 0.785 

Residual standard error: 1.065 on 95 degrees of freedom 
Multiple R-squared: 0.01037, Adjusted R-squared: -0.0313 
F-statistic: 0.2489 on 4 and 95 DF, p-value: 0.9097 

これは、単一の定数項を加えたlog(v1269)の4種類のエフェクト、ageのレベルごとに1つに収まることに注意してください。異なる年齢でyear(レスポンス)の平均値に有意差がなかった場合は視覚的には、このモデルは明らかに

Simulated data plus fitted slopes from the nested slope model described in the answer

pred <- with(df, 
      expand.grid(age = factor(1:4), 
         v1269 = seq(min(v1269), max(v1269), length = 100))) 
pred <- transform(pred, fitted = predict(m, newdata = pred)) 

library("ggplot2") 
ggplot(df, aes(x = log(v1269), y = year, colour = age)) + 
    geom_point() + 
    geom_line(data = pred, mapping = aes(y = fitted)) + 
    theme_bw() + theme(legend.position = "top") 
をやっているの一種である、これが唯一適しているであろうカテゴリ。同じモデルの異なるパラメータ化が /オペレータを介して達成することができる

注:他の用語一方、

m2 <- lm(year ~ log(v1269)/age, data = df) 

> m2 

Call: 
lm(formula = year ~ log(v1269)/age, data = df) 

Coefficients: 
    (Intercept)  log(v1269) log(v1269):age2 log(v1269):age3 
     0.02692   0.20127   -0.21559   -0.22715 
log(v1269):age4 
     -0.14108 

注意今、第一log(v1269)用語はage == 1ための傾斜のためのものであるあります調整指示されたグループのためのスロープを得るためにlog(v1269)用語に適用する必要が:

coef(m)[-1] 
coef(m2)[2] + c(0, coef(m2)[-(1:2)]) 

> coef(m)[-1] 
log(v1269):age1 log(v1269):age2 log(v1269):age3 log(v1269):age4 
    0.20127109  -0.01431491  -0.02588106  0.06018802 
> coef(m2)[2] + c(0, coef(m2)[-(1:2)]) 
       log(v1269):age2 log(v1269):age3 log(v1269):age4 
    0.20127109  -0.01431491  -0.02588106  0.06018802 

しかし、彼らは同じ推定斜面に出くわす。

関連する問題