あなたが抱えている問題は、Rが順序付き因子を作成し、順序付き因子に対して生成されたコントラストが多項式のコントラスト(.L
線形、.Q
2次、.C
3次、 .^n
n次の多項式)であるということです。月を次のように定義する方がよい場合があります。因数分解し、最初のレベルを1月に設定してから、モデルを近似します。
英語ロケールの場合、month.name
またはmonth.abb
定数を次のように使用できます
set.seed(42)
dat <- data.frame(sales = rnorm(1000, mean = 1000, sd = 40),
dates = as.Date(seq(from = 14610, to = 15609),
origin = "1970-01-01"))
dat <- transform(dat, month = factor(format(dates, format = "%B"),
levels = month.name))
これは与える
> head(dat)
sales dates month
1 1054.8383 2010-01-01 January
2 977.4121 2010-01-02 January
3 1014.5251 2010-01-03 January
4 1025.3145 2010-01-04 January
5 1016.1707 2010-01-05 January
6 995.7550 2010-01-06 January
> with(dat, levels(month))
[1] "January" "February" "March" "April" "May"
[6] "June" "July" "August" "September" "October"
[11] "November" "December"
レベルの順序はアルファベット順ではなく論理的な順序であることに注意してください。英語以外のロケールを使用している場合、の出力は"%B"
、現地の言語または規則での月の名前になります。levels
次に、上記のコードの引数に文字ベクトルとして正しいレベルを指定する必要があります。
このデータセットを使用してモデルを適合させることができ、より意味のある係数名を取得できます
> mod <- lm(sales ~ month, data = dat)
> summary(mod)
Call:
lm(formula = sales ~ month, data = dat)
Residuals:
Min 1Q Median 3Q Max
-140.333 -24.551 0.108 28.102 134.349
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1001.7034 4.1567 240.983 <2e-16 ***
monthFebruary -8.3618 6.0153 -1.390 0.165
monthMarch -0.5347 5.8785 -0.091 0.928
monthApril -7.5618 5.9273 -1.276 0.202
monthMay -2.2961 5.8785 -0.391 0.696
monthJune 3.5091 5.9273 0.592 0.554
monthJuly -4.9975 5.8785 -0.850 0.395
monthAugust -0.3558 5.8785 -0.061 0.952
monthSeptember 3.7597 5.9970 0.627 0.531
monthOctober -2.5948 6.5724 -0.395 0.693
monthNovember -10.5670 6.6378 -1.592 0.112
monthDecember -6.9064 6.5724 -1.051 0.294
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 40.09 on 988 degrees of freedom
Multiple R-squared: 0.01173, Adjusted R-squared: 0.0007317
F-statistic: 1.066 on 11 and 988 DF, p-value: 0.3854
上記では、1月が最初のレベルであるため、その平均は(Intercept)
推定値であり、他の推定値は1月の平均からの偏差であることに注意してください。モデルの代替パラメーター化は、切片を抑制することです。
> mod2 <- lm(sales ~ month - 1, data = dat)
> summary(mod2)
Call:
lm(formula = sales ~ month - 1, data = dat)
Residuals:
Min 1Q Median 3Q Max
-140.333 -24.551 0.108 28.102 134.349
Coefficients:
Estimate Std. Error t value Pr(>|t|)
monthJanuary 1001.703 4.157 241.0 <2e-16 ***
monthFebruary 993.342 4.348 228.5 <2e-16 ***
monthMarch 1001.169 4.157 240.9 <2e-16 ***
monthApril 994.142 4.225 235.3 <2e-16 ***
monthMay 999.407 4.157 240.4 <2e-16 ***
monthJune 1005.213 4.225 237.9 <2e-16 ***
monthJuly 996.706 4.157 239.8 <2e-16 ***
monthAugust 1001.348 4.157 240.9 <2e-16 ***
monthSeptember 1005.463 4.323 232.6 <2e-16 ***
monthOctober 999.109 5.091 196.3 <2e-16 ***
monthNovember 991.136 5.175 191.5 <2e-16 ***
monthDecember 994.797 5.091 195.4 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 40.09 on 988 degrees of freedom
Multiple R-squared: 0.9984, Adjusted R-squared: 0.9984
F-statistic: 5.175e+04 on 12 and 988 DF, p-value: < 2.2e-16
ここで、推定値は月平均であり、t検定は個々の月平均がゼロ(0)であるという仮説です。