Je génère un ajustement de modèle en utilisant glm. Mes données ont un mélange de variables entières et de variables catégorielles. Les variables catégoriques sont sous la forme de codes et donc de type entier dans les données. Au départ, lorsque j'ai essayé de générer le modèle, j'ai transmis les variables catégorielles au format entier tel qu'il est et j'ai obtenu le modèle. Je regardais les p-valeurs pour vérifier la fois qui sont significatives et remarqué que peu de variables étaient significatives que je ne m'attendais pas.R glm générant différentes valeurs p pour les mêmes variables catégorielles de type différent
Ceci est lorsqu'il est réalisé que peut-être les variables catégorielles dans formulaire entier créent un problème. Donc, comme le code 3 pourrait avoir une plus grande importance que le code 1 (pas sûr sur ce point et ce serait génial si quelqu'un peut confirmer cela). En faisant quelques recherches, j'ai trouvé que nous pouvons convertir la variable entière catégorique en facteur. J'ai fait la même chose et j'ai re-généré le modèle.
J'ai également vu quelques postes où il a été mentionné de convertir en binaire, donc je l'ai fait nous bien. Alors maintenant, j'ai 3 résultats -
- r1 >> avec des variables entières catégoriques
- >> avec des variables r2 facteur catégoriques
- r3 >> avec variables qualitatives converties en binaire
Je me sens cette sortie 1 avec des variables entières catégorielles est incorrecte (Veuillez confirmer). Mais entre la sortie 2 et 3 je suis confus que l'on à considérer comme
- valeurs p sont différentes,
- que l'on serait plus précis
- puis-je lié les valeurs p de sortie 3 avec sortie 2?
- Comment poignée de GLM variables telles
- espoir GLM dans une boucle est pas un problème
- Ma base de données est grande, pouvons-nous faire GLM à l'aide data.table?
Je suis coller en dessous de mon code avec quelques exemples de données à reproduire
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)
}
}
Pourquoi générez-vous dynamiquement la formule? – Koot6133
@ Koot6133, je veux changer pour différentes variables et donc l'utilisation de la formule – user1412