**Código da função**
prev <- function(x,y, teste="rrt", probs=c(0.25, 0.5833), nsim=1000) # função prev com argumentos: x (dados de respostas randomizadas), y (dados de questionamento direto), teste (tipos de teste desejado: rrt, qd ou ambos), probs (probabilidades de "sim" forçado e "diga a verdade", ver página de ajuda), nsim (número de simulações)
{
if(teste=="rrt") # se usuário optou pela análise de dados de respostas randomizadas
{
rrt <- function(x) ((sum(na.omit(x))/length(na.omit(x)))-probs[1])/probs[2] # fórmula de Hox & Lensvelt-Mulders (2004) para estimar prevalência de comportamento com base em dados RRT
a <- round(rrt(x), 4) # criando objeto a com estimativa de prevalência do comportamento para os dados de respostas randomizadas e arredondando
rrt.boot <- rep(NA, nsim) # criando objeto rrt.boot para receber valores de simulação a seguir
for(i in 1:nsim) # criando contador
{
sample.x <- sample(x, replace=TRUE) # reamostrando vetor de dados de respostas randomizadas (x), com substituição
rrt.boot[i] <- rrt(sample.x) # preenchendo objeto rrt.boot com estimativas de prevalência para valores simulados
}
b <- round(quantile(rrt.boot, probs=c(0.025, 0.975), na.rm=T), 4) # criando objeto b com quantis referentes ao intervalo de confiança de 95% dos valores simulados e arredondando
n.NAx <- (length(x))-(length(na.omit(x))) # calcula numero de NAs no vetor de dados x
cat("\n\t", n.NAx," valores NA omitidos de x\n\n") # retorna texto informando número de NAs omitidos de x
boxplot(rrt.boot, xlab="RRT", ylab="Prevalência") # boxplot dos valores de prevalência reamostrados por bootstrap (objeto rrt.boot)
m1 <- data.frame(matrix(c(a, b), ncol = 3, nrow = 1, byrow = TRUE)) # criando objeto m1 com resultados da analise
rownames(m1) <- "RRT" # modificando nomes de linhas de m1
colnames(m1) <- c("prevalencia", "Q 2.5%", "Q 97.5%") # modificando nomes de colunas de m1
return(m1) # retorna objeto m1 com resultados da análise
}
if(teste=="qd") # se usuário optou pela análise de dados de questionamento direto
{
qd <- function(y) sum(na.omit(y))/length(na.omit(y)) # fórmula para estimar prevalência de comportamento com base em dados de questionamento direto
a2 <- round(qd(y), 4) # criando objeto a2 com estimativa de prevalência para os dados de questionamento direto e arredondando
qd.boot <- rep(NA, nsim) # criando objeto qd.boot para receber valores de simulação a seguir
for(i in 1:nsim) # criando contador
{
sample.y <- sample(y, replace=TRUE) # reamostrando vetor de dados de questionamento direto (y), com substituição
qd.boot[i] <- qd(sample.y) # preenchendo objeto qd.boot com estimativas de prevalência para valores reamostrados
}
b2 <- round(quantile(qd.boot, probs=c(0.025, 0.975), na.rm=T), 4) # criando objeto b2 com quantis referentes ao intervalo de confiança de 95% dos valores simulados e arredondando
n.NAy <- (length(y))-(length(na.omit(y))) # calcula numero de NAs no vetor de dados y
cat("\n\t", n.NAy," valores NA omitidos de y\n\n") # retorna texto informando número de NAs omitidos de y
boxplot(qd.boot, xlab="QD", ylab="Prevalência") # boxplot dos valores de prevalência reamostrados por bootstrap (objeto qd.boot)
m2 <- data.frame(matrix(c(a2, b2), ncol = 3, nrow = 1, byrow = TRUE)) # criando objeto m2 com resultados da analise
rownames(m2) <- "QD" # modificando nomes de linhas de m2
colnames(m2) <- c("prevalencia", "Q 2.5%", "Q 97.5%") # modificando nomes de colunas de m2
return(m2) # retorna objeto m2 com resultados da análise
}
if(teste=="rrt.qd") # se usuário optou por análise simultânea de dados de respostas randomizadas e questionamento direto
{
rrt <- function(x) ((sum(na.omit(x))/length(na.omit(x)))-probs[1])/probs[2] # fórmula de Hox & Lensvelt-Mulders (2004) para estimar prevalência de comportamento com base em dados RRT
a <- round(rrt(x), 4) # criando objeto a com estimativa de prevalência do comportamento para os dados de respostas randomizadas e arredondando
rrt.boot <- rep(NA, nsim) # criando objeto rrt.boot para receber valores de simulação
for(i in 1:nsim) # criando contador
{
sample.x <- sample(x, replace=TRUE) # reamostrando vetor de dados de respostas randomizadas (x), com substituição
rrt.boot[i] <- rrt(sample.x) # preenchendo objeto rrt.boot com estimativa de prevalência para valores reamostrados
}
b <- round(quantile(rrt.boot, probs=c(0.025, 0.975), na.rm=T),4) # criando objeto b com quantis referentes ao intervalo de confiança de 95% dos valores simulados e arredondando
qd <- function(y) sum(na.omit(y))/length(na.omit(y)) # fórmula para estimar prevalência de comportamento com base em dados de questionamento direto
a2 <- round(qd(y),4) # criando objeto a2 com estimativa de prevalência para os dados de questionamento direto
qd.boot <- rep(NA, nsim) # criando objeto qd.boot para receber valores de simulação a seguir
for(i in 1:nsim) # criando contador
{
sample.y <- sample(y, replace=TRUE) # reamostrando vetor de dados de questionamento direto (y), com substituição
qd.boot[i] <- qd(sample.y) # preenchendo objeto qd.boot com estimativa de prevalência para valores reamostrados
}
b2 <- round(quantile(qd.boot, probs=c(0.025, 0.975), na.rm=T),4) # criando objeto b2com quantis referentes ao intervalo de confiança de 95% dos valores simulados e arredondando
boxplot(rrt.boot, qd.boot, xlab="Metodo de amostragem", ylab="Prevalência", xaxt="n") # boxplot das estimativas de prevalência obtidos pelos dois métodos
axis(side=1, at=(1:2), labels=c("RRT", "QD")) # adicionando labels ao boxplot criado acima
dif.obs <- a-a2 # criando objeto dif.obs com diferença observada entre estimativas RRT e QD
dif <- rep(NA, nsim) # criando objeto dif que será preenchido por simulação a seguir
for(i in 1:nsim) # criando contador
{
dif[i] <- (((sum(na.omit(sample(c(x,y), size=length(x), replace=TRUE)))/length(na.omit(x)))-probs[1])/probs[2]) - (sum(na.omit(sample(c(x,y), size=length(x), replace=TRUE)))/length(na.omit(y))) # preenche objeto dif com diferenças entre RRT e QD produzidas por bootstrap
}
n <- NROW(dif[dif >= dif.obs | dif <= -dif.obs]) # calculando quantas vezes o módulo da diferença observada foi obtido nas simulações de boostrap
prob <- (n)/nsim # calculando a probabilidade de o valor observado ter sido obtido ao acaso
x11() # abrindo novo graphic device
hist(dif, ylab="Frequência", xlab="RRT-QD", main="Distribuição das diferenças entre as \n estimativas obtidas por RRT e QD") # plota histograma exibindo distribuição da diferença entre estimativas de prevalência obtidas pelos dois métodos nas simulações de boostrap
legend("topleft", legend=paste("diferença observada =", dif.obs, ", p = ", prob), bty="n", text.col="red3") # insere legenda informando a diferença observada e a probabilidade de amesma ter sido obtida ao acaso
n.NAx <- (length(x))-(length(na.omit(x))) # calcula numero de NAs no vetor de dados x
cat("\n\t", n.NAx," valores NA omitidos de x\n") # insere texto informando numero de valores de NA omitidos de x
n.NAy <- (length(y))-(length(na.omit(y))) # calcula numero de NAs no vetor de dados y
cat("\n\t", n.NAy," valores NA omitidos de y\n\n") # insere texto informando numero de valores de NA omitidos de y
m <- data.frame(matrix(c(a, b, a2, b2), ncol = 3, nrow = 2, byrow = TRUE)) # cria objeto m com resultados da análise
rownames(m) <- c("RRT", "QD") # modificando nomes de linhas de m
colnames(m) <- c("prevalencia", "Q 2.5%", "Q 97.5%") # modificando nomes de colunas de m1
ret.rrt.qd <- list(m, "Probabilidade de diferença entre estimativas RRT e QD ter sido obtida ao acaso"=prob) # cria objeto com lista de itens a serem exibidos no return, incluindo m e prob
return(ret.rrt.qd) # retorna os objetos listados acima (resultados da análise)
}
}
**Página de ajuda**
prev package:nenhum R Documentation
Prevalência de comportamentos sensitivos
Description:
Função para estimar a prevalência de comportamentos sensitivos a partir de dados obtidos pela técnica de respostas randomizadas (RRT) e questionamento direto (QD).
Usage:
prev(x, y, teste=c("rrt", "qd", "rrt.qd"), probs=c(0.25, 0.5833), nsim=1000)
Arguments:
x vetor numérico representando dados obtidos pela técnica de respostas randomizadas.
y vetor numérico representando dados obtidos por questionamento direto.
teste argumento lógico que indica a opção de analise ("rrt" para tecnica de respostas randomizadas, "qd" para questionamento direto, "rrt.qd" para ambas)
probs vetor representando probabilidades de "SIM" forçado e "DIGA A VERDADE" associados à técnica de respostas randomizadas (Hox & Lensvelt-Mulders 2004).
nsim número de simulações.
Details:
Os dados de entrada devem ser binários, na forma de 0 e 1 representando respostas NAO e SIM respectivamente. A fórmula para cálculo de prevalência com base em respostas randomizadas corresponde ao método de "respostas forçadas" (Lensvelt-Mulders et al. 2005), onde as probabilidades de "SIM FORÇADO" e "DIGA A VERDADE" podem ser definidas pelo usuário (default 0.25 e 0.5833 para "SIM FORÇADO" e "DIGA A VERDADE" respectivamente). A fórmula para cálculo de prevalência com base em questionamento direto corresponde à proporção de respostas SIM em relação ao tamanho da amostra (Lee 1993). Na opção de teste "rrt.qd", a função executa um teste de permutação comparando a diferença observada entre estimativas de prevalência obtidas por respostas randomizadas e questionametno direto com diferenças obtidas por meio de reamostragem dos dados originais. O número de reamostragens é definido pelo usuário com o argumento nsim.
Value:
A função retorna um dataframe com a estimativa de prevalência do comportamento de acordo com o teste selecionado e com os limites inferior e superior do intervalo de confiança de 95% da estimativa, gerados por bootstrap. A função também retorna um boxplot representando estimativas de prevalência geradas por bootstrap. Caso o usuário opte pelo teste "rrt.qd", a função retorna ainda o resultado de um teste de permutação bicauldal comparando as estimativas obtidas pelos dois métodos, e um histograma com a distribuição das diferenças entre as estimativas obtidas pelos dois métodos.
Warnings:
A função roda mesmo se houverem NAs e retorna um aviso informando o número de NAs omitidos para cada vetor. Estimativas de prevalência com valor negativo podem ser obtidas por simulação.
Note:
....
Author(s):
Elildo Alves Ribeiro de Carvalho Jr (CENAP/ICMBio)
contato: elildojr@gmail.com, elildo.carvalho-junior@icmbio.gov.br
References:
Hox, J. & Lensvelt-Mulders, G. 2004. Randomized response analysis in Mplus. Struct. Equ. Model. 11,615–620. (doi:10.1207/s15328007sem1104_6)
Lee, R.M. 1993. Doing research on sensitive topics. Sage Publications, London.
Lensvelt-Mulders, G.J.L.M., Hox, J.J., van der Heijden, P.G.M. 2005. How to improve the efficiency of randomised response designs. Qual. Quantity 39, 253–265. (doi:10.1007/s11135-004-0432-3)
See Also:
~~objects to See Also as 'help', ~~~
Examples:
x <- rbinom(n=200, size=1, prob=0.5) # simula conjunto de dados x com 50% de respostas SIM
y <- rbinom(n=200, size=1, prob=0.2) # simula conjunto de dados y com 20% de respostas SIM
prev(x, teste="rrt") # estima prevalência por respostas randomizadas
prev(,y, teste="qd") # estima prevalência por questionamento direto
prev(x, y, teste="rrt.qd") # estima prevalência pelos dois métodos e executa teste de permutação comparando estimativas
prev(x, y, teste="rrt.qd", nsim=2000) # idem, mas modificando número de simulações
**Arquivo da função**
{{:bie5782:01_curso_atual:alunos:trabalho_final:elildojr:prev.r|}}