2017-10-05 6 views
0

glm을 사용하여 모델 적합성을 생성 중입니다. 내 데이터에는 정수 변수와 범주 형 변수가 혼합되어 있습니다. 범주 형 변수는 코드 형식이므로 데이터의 정수 유형입니다. 처음에 모델을 만들려고 할 때 정수형 형식의 범주 형 변수를 그대로 전달하고 모델을 얻었습니다. 나는 p 값을 한번 확인해 보았습니다. 그 값은 중요합니다. 그리고 주목할만한 변수가 거의 없었습니다.다른 유형의 동일한 범주 형 변수에 대해 다른 p 값을 생성하는 glm

이 경우 정수 양식의 범주 형 변수가 약간의 문제를 일으킬 수 있습니다. 코드 3과 마찬가지로 코드 1보다 중요도가 높아질 수 있습니다 ().이 사람이 이것을 확인할 수 있으면 좋을 것입니다 (). 어떤 연구를하면서 나는 범주 형 정수 변수를 factor으로 변환 할 수 있음을 발견했습니다. 나는 똑같이하고 모델을 다시 만들었다.

나는 또한 바이너리으로 변환한다고 언급 된 일부 게시물을 보았습니다. 그래서 나는 그렇게 잘했습니다.

  1. (R1) >> 내가 느끼는 진

로 변환 범주 형 변수와 범주 요인 변수

  • R3 >>와 범주 정수 변수
  • R2 >>에 - 그래서 지금은 3 개 결과를 범주 형 정수 변수를 가진 1을 출력하는 것은 올바르지 않습니다 (을 확인하십시오). 그러나 출력 2와 3 사이에 나는

    1. P-값이 다를으로 고려되는 하나의 혼란 스러워요
    2. 하나는
    3. 내가 출력 출력 3의 P-값을 관련 수 있습니다 더 정확할 것이다 2?
    4. 는 for 루프는
    5. 내 데이터베이스가 큰 문제가되지 않습니다 내부 GLM 핸들 등의 변수
    6. 희망 GLM, 우리는 data.table 사용 GLM 할 수 않습니다 어떻게? 나는 몇 가지 샘플 데이터로 내 코드 아래에 붙여 넣기하고

    library("plyr") 
    library("foreign") 
    library("data.table") 
    
    #####Generating sample data 
    
    set.seed(1200) 
    id <- 1:100 
    bill <- sample(1:3,100,replace = T) 
    nos <- sample(1:40,100,replace = T) 
    stru <- sample(1:4,100,replace = T) 
    type <- sample(1:7,100,replace = T) 
    value <- sample(100:1000,100,replace = T) 
    
    df1 <- data.frame(id,bill,nos,stru,type,value) 
    
    var1 <- c("bill","nos","stru") 
    
    options(scipen = 999) 
    r1 <- data.frame() 
    
    for(type1 in unique(df1$type)){ 
        for(var in var1){ 
        # dynamically generate formula 
        fmla <- as.formula(paste0("value ~ ", var)) 
    
        # fit glm model 
        fit <- glm(fmla, data=df1[df1$type == type1,],family='quasipoisson') 
        p.value <- coef(summary(fit))[8] 
    
        cfit <- coef(summary(fit)) 
        # create data frame 
        df2 <- data.frame(var = var, type = type1, basket="value",p.value = cfit[8],stringsAsFactors = F) 
        r1 <- rbind(r1, df2) 
        } 
    } 
    
    ##### converting the categorical numeric variables to factor variables 
    
    df1$bill_f <- as.factor(bill) 
    df1$stru_f <- as.factor(stru) 
    
    var1 <- c("bill_f","nos","stru_f") 
    
    r2 <- data.frame() 
    
    for(type1 in unique(df1$type)){ 
        for(var in var1){ 
        # dynamically generate formula 
        fmla <- as.formula(paste0("value ~ ", var)) 
    
        # fit glm model 
        fit <- glm(fmla, data=df1[df1$type == type1,],family='quasipoisson') 
        p.value <- coef(summary(fit))[8] 
    
        cfit <- coef(summary(fit)) 
        # create data frame 
        df2 <- data.frame(var = var, type = type1, basket="value",p.value = cfit[8],stringsAsFactors = F) 
        r2 <- rbind(r2, df2) 
        } 
    } 
    
    #####converting the categorical numeric variables to binary format (1/0) 
    
    df1$bill_1 <- ifelse(df1$bill == 1,1,0) 
    df1$bill_2 <- ifelse(df1$bill == 2,1,0) 
    df1$bill_3 <- ifelse(df1$bill == 3,1,0) 
    
    df1$stru_1 <- ifelse(df1$stru == 1,1,0) 
    df1$stru_2 <- ifelse(df1$stru == 2,1,0) 
    df1$stru_3 <- ifelse(df1$stru == 3,1,0) 
    df1$stru_4 <- ifelse(df1$stru == 4,1,0) 
    
    var1 <- c("bill_1","bill_2","bill_3","nos","stru_1","stru_2","stru_3") 
    
    r3 <- data.frame() 
    
    for(type1 in unique(df1$type)){ 
        for(var in var1){ 
        # dynamically generate formula 
        fmla <- as.formula(paste0("value ~ ", var)) 
    
        # fit glm model 
        fit <- glm(fmla, data=df1[df1$type == type1,],family='quasipoisson') 
        p.value <- coef(summary(fit))[8] 
    
        cfit <- coef(summary(fit)) 
        # create data frame 
        df2 <- data.frame(var = var, type = type1, basket="value",p.value = cfit[8],stringsAsFactors = F) 
        r3 <- rbind(r3, df2) 
        } 
    } 
    
  • +0

    왜 공식을 동적으로 생성합니까? – Koot6133

    +0

    @ Koot6133, 다른 변수와 수식의 사용으로 변경하고 싶습니다. – user1412

    답변

    0

    당신의 느낌은 대부분 정확 재현한다. GLM의 경우 연속 변수와 이산 (범주 형) 변수를 구별해야합니다.

    이진 변수는 2 레벨 만 포함하는 변수입니다 (예 : 0과 1). 2+ 레벨의 변수 만 있으므로 factor() 함수를 사용해야합니다.

    +0

    범주 형 변수를 바이너리로 변환하면 잘못된 결과가 발생합니다. glm이 어떻게 그들을 대우합니까? – user1412

    +0

    범주 형 변수를 이진 변수로 변환하면 정보가 손실됩니다. 예를 들어 "청구서"변수를 확인하십시오. 레벨 1,2 및 3이 포함됩니다. 변환 후 레벨 2/3이 단일 레벨, 즉 0으로 변경됩니다. – Koot6133