2017-10-05 9 views
0

私はglmを使用してモデルフィットを生成しています。私のデータには、整数変数とカテゴリ変数が混在しています。カテゴリ変数はコードの形式であり、したがってデータの整数型です。最初にモデルを生成しようとしたとき、整数型のカテゴリ変数をそのまま渡してモデルを得ま​​した。私は一度それを確認するためにp値を見ていたが、それは重要ではなかった重要な変数であることに気づいた。R glm異なるタイプの同じカテゴリ変数に対して異なるp値を生成する

これは、の形式変数である可能性があります。フォームで問題が発生しています。コード3と同じようにコード1よりも重要度が高くなる可能性があります(これは確かで、誰かがこれを確認できるならば大変です))。いくつかの研究をすると、カテゴリ整数変数をファクタに変換できることがわかりました。私は同じことをして、モデルを再生成しました。

バイナリに変換すると書かれていた記事もありましたので、私はそれをうまく行いました。私が感じる

  1. R1 >>バイナリ

に変換カテゴリ変数とカテゴリ因子変数

  • R3 >>とカテゴリ整数変数
  • R2 >>と - だから今、私は3つの結果を持っていますカテゴリ整数変数で1を出力すると正しくない(を確認してください)。しかし、出力2と3の間、私は

    1. p値が異なっているとして、考慮するかを混乱してい
    2. 1は
    3. は、私は出力と出力3のp値を関連することができ、より正確であると思われます2?
    4. どのようにGLMような変数を扱うんループの内側
    5. ホープGLMは
    6. 問題ではありません私のデータベースが大きい、我々は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

    カテゴリ変数をバイナリ変数に変換すると、情報が失われます。たとえば、 "bill"変数を確認してください。レベル1,2,3を含みます。変換後、レベル2/3を1つのレベル、つまり0に変更します。 – Koot6133

    関連する問題