あなたはglm(...)
間違って使用しています.IMOはオフセットよりもはるかに大きな問題です.
最小二乗回帰の主な基礎となる仮定は、応答の誤差が一定の分散で正規分布するということです。エラーY
が正規分布している場合は、log(Y)
そうでないことはほぼ間違いありません。したがって、 の当てはめで「数字を実行」することはできますがlog(Y)~X
、結果は意味のあるものではありません。この問題に対処するために、一般化線形モデリングの理論が開発されました。したがって、fit ではなく glm を使用すると、 に適合するlog(Y) ~X
はずです。前者が合うY~X
family=poisson
ログ (Y) = b 0 + b 1 x
後者は適合しますが
Y = exp(b 0 + b 1 x)
後者の場合、誤差Y
が正規分布していて、モデルが有効であれば、残差は必要に応じて正規分布します。これら 2 つのアプローチでは、b 0 と b 1の結果が大きく異なることに注意してください。
fit.incorrect <- glm(log(Y)~X,data=data2)
fit.correct <- glm(Y~X,data=data2,family=poisson)
coef(summary(fit.incorrect))
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 6.0968294 0.44450740 13.71592 0.0001636875
# X -0.2984013 0.07340798 -4.06497 0.0152860490
coef(summary(fit.correct))
# Estimate Std. Error z value Pr(>|z|)
# (Intercept) 5.8170223 0.04577816 127.06982 0.000000e+00
# X -0.2063744 0.01122240 -18.38951 1.594013e-75
特に、正しいアプローチを使用すると、 の係数X
はほぼ 30% 小さくなります。
モデルの違いに注意してください。
plot(Y~X,data2)
curve(exp(coef(fit.incorrect)[1]+x*coef(fit.incorrect)[2]),
add=T,col="red")
curve(predict(fit.correct, type="response",newdata=data.frame(X=x)),
add=T,col="blue")

正しいフィットの結果 (青い曲線) はデータを多かれ少なかれランダムに通過しますが、正しくないフィットの結果は、データが小さい場合は大幅に過大評価さX
れ、大きい場合はデータが過小評価されX
ます。これが、インターセプトを「修正」したい理由なのだろうか。他の回答を見ると、Y 0 = 300 を修正すると、適合が全体的に過小評価されることがわかります。
対照的に、 glm を適切に使用してY 0を修正するとどうなるか見てみましょう。
data2$b0 <- log(300) # add the offset as a separate column
# b0 not fixed
fit <- glm(Y~X,data2,family=poisson)
plot(Y~X,data2)
curve(predict(fit,type="response",newdata=data.frame(X=x)),
add=TRUE,col="blue")
# b0 fixed so that Y0 = 300
fit.fixed <-glm(Y~X-1+offset(b0), data2,family=poisson)
curve(predict(fit.fixed,type="response",newdata=data.frame(X=x,b0=log(300))),
add=TRUE,col="green")

ここで、青色の曲線は制約なしの適合 (適切に行われた) であり、緑色の曲線は Y 0 = 300 を制約する適合です。正しい (制約なしの) 適合はすでに非常に良好であるため、それらがあまり変わらないことがわかります。