3

これは私が取り組んでいる例です:

data2 = data.frame( X = c(0,2,4,6,8,10),
                    Y = c(300,220,210,90,80,10))
attach(data2)
model <- glm(log(Y)~X)
model

Call:  glm(formula = log(Y) ~ X)

Coefficients:
(Intercept)            X  
     6.0968      -0.2984  

Degrees of Freedom: 5 Total (i.e. Null);  4 Residual
Null Deviance:      7.742 
Residual Deviance: 1.509    AIC: 14.74

私の質問は:

必要な値でインターセプト係数を修正できる関数のオプションがありますglmか? x値を予測するには?

例: 曲線を上の「Y」値で開始したい ==> で切片を変更したいlog(300)

4

2 に答える 2

5

あなたはglm(...)間違って使用しています.IMOはオフセットよりもはるかに大きな問題です.

最小二乗回帰の主な基礎となる仮定は、応答の誤差が一定の分散で正規分布するということです。エラーYが正規分布している場合は、log(Y)そうでないことはほぼ間違いありません。したがって、 の当てはめで「数字を実行」することはできますがlog(Y)~X、結果は意味のあるものではありません。この問題に対処するために、一般化線形モデリングの理論が開発されました。したがって、fit ではなく glm を使用すると、 に適合するlog(Y) ~Xはずです。前者が合うY~Xfamily=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 を制約する適合です。正しい (制約なしの) 適合はすでに非常に良好であるため、それらがあまり変わらないことがわかります。

于 2014-12-29T18:39:48.527 に答える