2015-07-08 25 views
6

Ho appena apportato una modifica da STATA a R e ho qualche problema nell'implementare l'equivalente R dei comandi STATA xtlogit,fe or re e predict. Posso chiedere qualche aiuto per regolare il seguente scenario:Come prevedere i modelli a effetti fissi e casuali?

data <- read.table("http://people.stern.nyu.edu/wgreene/Econometrics/healthcare.csv",header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) 

    require(caret) # for confusionMatrix 

    #### subset into test & train according to the panel nature (split individuals rather then observations) 
    nID <- length(unique(data$id)) 
    p = 0.50# partition 

    inTrain <- sample(unique(data$id), round(nID * p), replace=FALSE) 

    training <- data[data$id %in% inTrain, ] 

    testing <- data[!data$id %in% inTrain, ] 


    pooled <- glm(WORKING~WHITEC+FEMALE+BLUEC+HHNINC+AGE+AGESQ+EDUC+DOCVIS,data=training, family=binomial(link="logit")) 

    prediction.working= round(predict(pooled,newdata=testing,type="response")) 

    confusionMatrix(prediction.working,testing$WORKING) # Accuracy between both 

Inoltre, mi piacerebbe fare queste procedure per gli effetti casuali e effetti fissi. Così ho provato gli effetti casuali prima senza successo:

library(glmmML) 
    RE <- glmmML(WORKING~WHITEC+FEMALE+BLUEC+HHNINC+AGE+AGESQ+EDUC+DOCVIS, family=binomial(link="logit"), data=training, cluster=id, method="ghq", n.points=12) 



    prediction.working= round(predict(RE,newdata=testing,type="response")) 

Ma questo non sembra funzionare. Posso chiedere come regolare il modello glm per quanto riguarda effetti casuali ed effetti fissi per poter utilizzare la funzione predict.

+1

Penso che stiate cercando il modello logit condizionale. Prova http://cran.r-project.org/web/packages/mclogit/mclogit.pdf – user227710

risposta

2

Benvenuti in R. Sono anche un convertito STATA.

Questo è un problema complicato, ma la sua risposta è essenziale per capire. Per capire perché la funzione predict non funziona per glmmML devi capire i metodi S3 (vedi http://adv-r.had.co.nz/OO-essentials.html).

Lasciatemi spiegare un po '. R è un linguaggio orientato agli oggetti. Ciò significa che tutto in R è un oggetto (cioè vettore, funzione, data.frame). Ogni oggetto contiene attributi. Un attributo è essenzialmente meta-dati sull'oggetto stesso. Ad esempio i nomi delle variabili in un data.frame sono attributi. Un attributo che tutti gli oggetti hanno è una classe. Per vedere la classe di qualsiasi oggetto basta chiamare la funzione class().

Molte, ma non tutte, le funzioni utilizzano i metodi S3. La funzione predict è una di queste funzioni. Ciò significa che quando si chiama predict, la funzione predict esamina la classe dell'oggetto. Quindi, in base alle scelte di classe che dovrebbero essere utilizzate altre funzioni di previsione. Ad esempio, se l'oggetto è di classe lm, la funzione di previsione chiamerà la funzione predict.lm. Altri predict funzioni includono: predict.glm per gli oggetti di glm classe, predict.loess per gli oggetti di loess classe, predict.nls per gli oggetti di nls di classe, ecc (per vedere l'elenco completo leggere il predict aiuto). Sfortunatamente, non esiste una funzione predict.glmmML. Di conseguenza, quando si chiama la funzione predict su un oggetto della classe glmmML si ottiene un errore.

id <- factor(rep(1:20, rep(5, 20))) 
y <- rbinom(100, prob = rep(runif(20), rep(5, 20)), size = 1) 
x <- rnorm(100) 
dat <- data.frame(y = y, x = x, id = id) 
fit.2 <- glmmML(y ~ x, data = dat, cluster = id) 
predict(fit.2) 
Error in UseMethod("predict") : 
    no applicable method for 'predict' applied to an object of class "glmmML" 
class(fit.2) 
[1] "glmmML" 

L'errore è molto informativo. Fondamentalmente dice che R ha provato a usare i metodi S3, tuttavia, non c'era "predict.glmmML"

E la funzione mclogit suggerita dall'utente. Vediamo

data(Transport) 

fit <- mclogit(
    cbind(resp,suburb)~distance+cost, 
    data=Transport 
) 

class(fit) 
[1] "mclogit" "lm" 

La classe di fit è mclogit e lm. predict funzionerà? Sì! Quando chiami predict(fit) la funzione predict cerca prima un predict.mclogit, che non esiste. Successivamente, cercherà predict.lm. Che esiste

+1

Grazie per il suggerimento. Per quanto riguarda il manuel di mclogit, è sufficiente specificare gli effetti casuali. Posso chiederti come determinare la previsione degli effetti fissi con quella libreria?THX – Mamba

+0

Inoltre si devono creare conteggi di risposta come suggerito nell'esempio con 'cbind (resp, sobborgo)' – Googme

Problemi correlati