You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

513 lines
16 KiB
R

resp <- df[,c(dif.items.list)]
}
}
else {
resp <- df[,c(nodif.items.list)]
}
print(grp)
tam1 <- TAM::tam.mml(resp=resp,Y=grp,irtmodel = model,est.variance = T,verbose=F)
}
}
return(summary(tam1))
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
return(c(model_a,model_b))
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
return(c(model_a,model_b))
}
rosali(dat=dat,items=1:7,group="TT")
## File Name: pcm.R
## File version: 1.0
#' @import TAM
#' @export
pcm <- function(df=NULL,items=NULL,group=NULL,model="PCM2",method="MML",dif.items=NULL) {
# Prepare analysis
if (is.null(items)) {
nbitems <- sum(sapply(1:100,function(x) paste0('item',x)) %in% colnames(df))
items <- paste0('item',seq(1,nbitems))
resp <- df[,items]
}
else {
nbitems <- length(items)
resp <- df[,paste0("item",items)]
}
if (is.null(group)) {
grp <- NULL
}
else {
grp <- df[,group]
df$grp <- grp
if (!is.null(dif.items)) {
for (i in dif.items) {
df[,paste0('item',i,'_noTT')] <- NA
df[,paste0('item',i,'_TT')] <- NA
df[df$grp==0,paste0('item',i,'_noTT')] <- df[df$grp==0,paste0('item',i)]
df[df$grp==1,paste0('item',i,'_TT')] <- df[df$grp==1,paste0('item',i)]
}
}
}
# Analyze
if (method=='MML') {
if (is.null(dif.items)) {
tam1 <- TAM::tam.mml(resp=resp,Y=grp,irtmodel = model,est.variance = T,verbose=F)
}
else {
nodif.items <- setdiff(items,dif.items)
nodif.items.list <- paste0("item",nodif.items)
dif.items.list <- c(paste0("item",dif.items,"_noTT"),paste0("item",dif.items,"_TT"))
if (!is.null(dif.items)) {
if (length(nodif.items)!=0) {
resp <- df[,c(nodif.items.list,dif.items.list)]
}
else {
resp <- df[,c(dif.items.list)]
}
}
else {
resp <- df[,c(nodif.items.list)]
}
tam1 <- TAM::tam.mml(resp=resp,Y=grp,irtmodel = model,est.variance = T,verbose=F)
}
}
return(summary(tam1))
}
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
return(c(model_a))
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
return(c(model_b))
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
}
rosali(dat=dat,items=1:7,group="TT")
model_b <- pcm(df=dat,items=1:7,group = "TT",dif.items = 1:7)
model_a <- pcm(df=dat,items=1:7,group = "TT",dif.items = NULL)
lrt
lrt''
??lrt
loglik(model_a)
logLik(model_a)
## File Name: pcm.R
## File version: 1.0
#' @import TAM
#' @export
pcm <- function(df=NULL,items=NULL,group=NULL,model="PCM2",method="MML",dif.items=NULL) {
# Prepare analysis
if (is.null(items)) {
nbitems <- sum(sapply(1:100,function(x) paste0('item',x)) %in% colnames(df))
items <- paste0('item',seq(1,nbitems))
resp <- df[,items]
}
else {
nbitems <- length(items)
resp <- df[,paste0("item",items)]
}
if (is.null(group)) {
grp <- NULL
}
else {
grp <- df[,group]
df$grp <- grp
if (!is.null(dif.items)) {
for (i in dif.items) {
df[,paste0('item',i,'_noTT')] <- NA
df[,paste0('item',i,'_TT')] <- NA
df[df$grp==0,paste0('item',i,'_noTT')] <- df[df$grp==0,paste0('item',i)]
df[df$grp==1,paste0('item',i,'_TT')] <- df[df$grp==1,paste0('item',i)]
}
}
}
# Analyze
if (method=='MML') {
if (is.null(dif.items)) {
tam1 <- TAM::tam.mml(resp=resp,Y=grp,irtmodel = model,est.variance = T,verbose=F)
}
else {
nodif.items <- setdiff(items,dif.items)
nodif.items.list <- paste0("item",nodif.items)
dif.items.list <- c(paste0("item",dif.items,"_noTT"),paste0("item",dif.items,"_TT"))
if (!is.null(dif.items)) {
if (length(nodif.items)!=0) {
resp <- df[,c(nodif.items.list,dif.items.list)]
}
else {
resp <- df[,c(dif.items.list)]
}
}
else {
resp <- df[,c(nodif.items.list)]
}
tam1 <- TAM::tam.mml(resp=resp,Y=grp,irtmodel = model,est.variance = T,verbose=F)
}
}
return(tam1)
}
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
}
model_b <- pcm(df=dat,items=1:7,group = "TT",dif.items = 1:7)
model_a <- pcm(df=dat,items=1:7,group = "TT",dif.items = NULL)
logLik(model_a)
logLik(model_b)
library(lmtest)
lrtest(model_a,model_b)
lrtest(model_a,model_b)$p
ss <- lrtest(model_a,model_b)
ss$`Pr(>Chisq)`
ss$`Pr(>Chisq)`[2]
a <- c()
a
c(a,1)
which(1:4,3)
?which
which.min(1:4)
which.min(2:4)
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
if (ltest$`Pr(>Chisq)`[2]<1) {
model_c <- model_b
difit <- c()
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.4) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
}
}
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
if (ltest$`Pr(>Chisq)`[2]<1) {
model_c <- model_b
difit <- c()
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.4) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
print(difit)
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
}
}
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
if (ltest$`Pr(>Chisq)`[2]<1) {
model_c <- model_b
difit <- c()
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.4) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
print(difit)
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
print(a)
}
}
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
if (ltest$`Pr(>Chisq)`[2]<1) {
model_c <- model_b
difit <- c()
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.4) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
print(difit)
a <- sapply(1:nbitems,function(x)
ifelse(x%in%difit,lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2],1))
print(a)
}
}
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
if (ltest$`Pr(>Chisq)`[2]<1) {
model_c <- model_b
difit <- c()
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.4) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
print(difit)
a <- sapply(1:nbitems,function(x)
ifelse(!(x%in%difit),lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2],1))
print(a)
}
}
}
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
difit <- c()
if (ltest$`Pr(>Chisq)`[2]<0.05) {
model_c <- model_b
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.05) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
print(difit)
a <- sapply(1:nbitems,function(x)
ifelse(!(x%in%difit),lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2],1))
}
}
return(difit)
}
rosali(dat=dat,items=1:7,group="TT")
dat <- read.csv("/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N200/scenario_20A_200.csv")
dat <- dat[dat$replication==2,]
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
difit <- c()
if (ltest$`Pr(>Chisq)`[2]<0.05) {
model_c <- model_b
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
while (min(a)<0.05) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
a <- sapply(1:nbitems,function(x)
ifelse(!(x%in%difit),lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2],1))
}
}
return(difit)
}
rosali(dat=dat,items=1:7,group="TT")
dat <- read.csv("/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N200/scenario_20A_200.csv")
dat <- dat[dat$replication==3,]
rosali(dat=dat,items=1:7,group="TT")
rosali <- function(dat=NULL,items=NULL,group=NULL) {
nbitems <- length(items)
items2 <- items
# Un seul groupe
if (length(group)!=1) {
stop('Only one variable can be used for the group option')
}
# Recoder groupe en 0/1
dat[,group] <- as.factor(dat[,group])
if (!(all(names(levels(dat[,group]))==c("0","1")))) {
levels(dat[,group]) <- c("0","1")
}
dat[,group] <- as.numeric(dat[,group])-1
model_a <- pcm(df=dat,items=items,group = group,dif.items = items)
model_b <- pcm(df=dat,items=items,group = group,dif.items = NULL)
ltest <- lmtest::lrtest(model_a,model_b)
difit <- c()
if (ltest$`Pr(>Chisq)`[2]<0.05) {
model_c <- model_b
a <- sapply(1:nbitems,function(x)
lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2])
k <- 0
while (min(a)<0.05/(nbitems-k)) {
difit <- c(difit,which.min(a))
model_c <- pcm(df=dat,items=items,group = group,dif.items = difit)
a <- sapply(1:nbitems,function(x)
ifelse(!(x%in%difit),lmtest::lrtest(model_c,pcm(df=dat,items=items,group = group,dif.items = c(difit,x)))$`Pr(>Chisq)`[2],1))
}
}
return(difit)
}
rosali(dat=dat,items=1:7,group="TT")
pcm(dat,items=1:7,group="TT",dif.items=1:2)
summary(pcm(dat,items=1:7,group="TT",dif.items=1:2))