2017-12-11 4 views
1

gl에서 로지스틱 회귀 분석을 실행하는 데 어려움이 있습니다. 로지스틱 회귀를 수행하기 위해 바이너리 응답 변수를 glm으로 전달하는 두 가지 방법이 있습니다. 데이터를 직렬 데이터 형식으로 glm에 전달할 수 있습니다 (예 : 관찰 당 하나의 행, 응답 변수는 0 또는 1이며, 독립 변수는 사용자가 가지고있는 값을 취함). 또는 전달할 수 있습니다 첫 번째 열은 시련 수를 나타내고 두 번째 열은 성공 횟수를 나타내며 세 번째 열은 독립 변수입니다.로지스틱 회귀 분석이 어려움 R

후자의 데이터 형식 (예 : 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 

그리고 단지와 함께하지만,이 경우 예상 값을 얻을 예를 들어

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 

> table(atable$ordered, atable$sale_price) 

    89.99 99.99 149.99 
    0 11907 2024 5046 
    1 1369 215  31 

내가 얻는 결과는 완전히 다르다. 나는 완전히 혼란 스럽다. 누구든지 나를 도울 수 있습니까? 나는 단순한 일을하고 있다고 가정한다.

답변

3

나는 당신의 문제가 당신이 "성공"의 정의를 바꾸고 있다고 생각한다.

응답로도 ... 열이 성패의 수를주는 두 개의 열이 매트릭스 지정할 수 이항 및 quasibinomial 가족 용

?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