2017-12-11 6 views
1

glmを使用してRでロジスティック回帰を実行する際にいくつかの問題があります。バイナリ応答変数をglmに渡してロジスティック回帰を実行するには、2つの方法があります。データをシリアルデータ形式でglmに渡すことができます(例:観測ごとに1行、応答変数は0または1、独立変数にはあなたが持っている値を持ちます)、またはそれを渡すことができます最初の列は試行回数を示し、2番目の列は成功数を示し、3番目の列は独立変数です。ロジスティック回帰を実行するのが困難です。

後者のデータフォーマット(3列のデータフレームなど)を使用してglmを使用すると、予想される出力が得られますが、前者(シリアルデータフォーマット)を使用してデータを入力すると、期待される答え。ここで

は、私はしかし、シリアルデータ

> head(atable) 
    ordered sale_price 
1  0  149.99 
2  0  149.99 
3  0  149.99 
4  0  149.99 
5  0  149.99 
6  0  149.99 
> summary(atable) 
    ordered   sale_price  
Min. :0.00000 Min. : 89.99 
1st Qu.:0.00000 1st Qu.: 89.99 
Median :0.00000 Median : 89.99 
Mean :0.07843 Mean :105.87 
3rd Qu.:0.00000 3rd Qu.: 99.99 
Max. :1.00000 Max. :149.99 

> conv_model <- glm(ordered ~ sale_price, family=binomial(link="logit"), data=atable) 
> summary(conv_model) 

Call: 
glm(formula = ordered ~ sale_price, family = binomial(link = "logit"), 
    data = atable) 

Deviance Residuals: 
    Min  1Q Median  3Q  Max 
-0.4743 -0.4743 -0.4743 -0.1209 3.1376 

Coefficients: 
      Estimate Std. Error z value Pr(>|z|)  
(Intercept) 0.549136 0.095341 5.76 8.43e-09 *** 
sale_price -0.019949 0.001002 -19.90 < 2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1) 

    Null deviance: 11322 on 20591 degrees of freedom 
Residual deviance: 10623 on 20590 degrees of freedom 
AIC: 10627 

Number of Fisher Scoring iterations: 7 

で、この場合の期待値を取得し、ちょうどそれが同じデータ

> table(atable$ordered, atable$sale_price) 

    89.99 99.99 149.99 
    0 11907 2024 5046 
    1 1369 215  31 
だということを示すために、例

prices <- c(89.99, 99.99, 149.99) 
non_purchases <- c(11907, 2024, 5046) 
purchases <- c(1369, 215, 31) 
trials <- cbind(non_purchases, purchases) 

model <- glm(trials ~ prices, family=binomial(link="logit")) 

> summary(model) 

Call: 
glm(formula = trials ~ prices, family = binomial) 

Deviance Residuals: 
    1  2  3 
1.332 -4.440 1.553 

Coefficients: 
      Estimate Std. Error z value Pr(>|z|)  
(Intercept) -1.923863 0.241677 -7.96 1.71e-15 *** 
prices  0.044995 0.002593 17.35 < 2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1) 

    Null deviance: 715.832 on 2 degrees of freedom 
Residual deviance: 23.897 on 1 degrees of freedom 
AIC: 49.228 

Number of Fisher Scoring iterations: 4 

です

私が得られる出力はまったく異なり、私は完全に混乱しています。誰か助けてくれますか?私は何か簡単なことをしていると仮定します。

答えて

3

私はあなたの問題は "成功"の定義を切り替えることだと思います。 ?glmから

(強調鉱山)

二項と疑似二項家族に対する応答がとしても...列が成功と失敗の数を与えると、二列の行列指定することができます。

したがって、最初の列は「成功」です。あなたのコードではcbind(non_purchases, purchases)を使って、non_purchasesを "成功"の列にします。しかし、あなたのテーブルでは、非購入は、失敗のために0とコード化されています。以下のコードでは、同じ結果が得られます。

prices <- c(89.99, 99.99, 149.99) 
non_purchases <- c(11907, 2024, 5046) 
purchases <- c(1369, 215, 31) 
trials <- cbind(non_purchases, purchases) 

dd = data.frame(
    price = c(rep(prices, non_purchases), rep(prices, purchases)), 
    purchase = c(rep(0, sum(non_purchases)), rep(1, sum(purchases))) 
) 

coef(glm(purchase ~ price, data = dd, family = "binomial")) 
# (Intercept)  price 
# 1.92386320 -0.04499477 

coef(glm(cbind(purchases, non_purchases) ~ prices, family = "binomial")) 
# (Intercept)  price 
# 1.92386320 -0.04499477 
+0

Ahh、RFTM!または、この場合、慎重にRFTM。ありがとう、私はあなたの助けに大いに感謝します。 –

+1

あなたは大歓迎です!私に何がわかりましたかは、係数の符号の変更でした。あなたの最初のモデルは正の価格係数を示していました。後ろに見えた。 – Gregor

関連する問題