Um método de força bruta refinado para informar a simulação de dados de resposta ordinal

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[This article was first published on ouR data generation, and kindly contributed to R-bloggers]. (Você pode relatar problemas sobre o conteúdo desta página aqui)


Quer compartilhar seu conteúdo em R-bloggers? clique aqui se você tiver um blog, ou aqui se não tiver.

Francisco, um pesquisador da Espanha, me procurou com um desafio. Ele está interessado em explorar vários modelos que estimam a correlação entre várias respostas a perguntas de pesquisa. Este é o contexto:

  • Ele não tem acesso aos dados reais, portanto, para explorar métodos analíticos, ele precisa simular respostas.
  • Seria ideal se os dados simulados refletissem as propriedades das respostas do mundo real, algumas das quais podem ser obtidas na literatura.
  • Os estudos que ele encontrou relatam apenas médias e desvios-padrão dos dados ordinais, junto com as matrizes de correlação, mas não distribuições de probabilidade das respostas.
  • Ele está considerando simstudy para suas simulações, mas a função genOrdCat requer um conjunto de probabilidades para cada medida de resposta; não parece que o simstudy será útil aqui.

Em última análise, precisávamos descobrir se podemos usar as médias empíricas e os desvios-padrão para derivar probabilidades que produzirão essas mesmas médias e desvios-padrão quando os dados forem simulados. Eu pensei sobre isso um pouco e descobri um pouco de solução; a abordagem parece funcionar decentemente e não requer suposições ultrajantes.

Eu posso ter mantido isso entre nós dois, mas no processo de olhar mais de perto para a minha solução, gerei um enredo que era tão bonito e interessante que precisei postá-lo. E já que estou postando a imagem, achei melhor seguir em frente e descrever a solução, caso alguém a ache útil. Mas primeiro, o enredo:

Um pouco mais de detalhe

No cenário mais simples, queremos simular as respostas de uma única pergunta da pesquisa com respostas variando de 1 a 7, onde 1 pode significar discordo totalmente e 7 significaria Concordo plenamente, com gradações intermediárias. As respostas coletadas de uma população serão distribuídas nas sete categorias, e a proporção de respostas que se enquadram em cada categoria representa a probabilidade de uma resposta.

Para informar a simulação, temos um artigo de jornal que relata apenas uma média e um desvio padrão das respostas a essa mesma pergunta coletadas em um estudo anterior. A ideia é encontrar as probabilidades para as possíveis respostas que correspondem às médias e desvios-padrão observados. Ou seja, como vamos da média e do desvio padrão a um conjunto de probabilidades?

Leia Também  RcppSimdJson 0.0.4: Upstream ainda mais rápido!

O inverso – ir de probabilidades conhecidas para uma resposta média e desvio padrão – é muito mais fácil: nós apenas calculamos a média ponderada e os desvios padrão ponderados, onde os pesos são as probabilidades.

Por exemplo, digamos que a distribuição de probabilidade das sete respostas categóricas seja 21%, 20%, 18%, 15%, 13%, 9% e 4% respondendo 1, 2, … e 7, respectivamente, e representado por este histograma:

Sob esta distribuição, a média ponderada e o desvio padrão são 3,2 e 1,8, respectivamente:

weighted.mean(x = 1:7, w = c(.21, .20, .18, .15, .13, .09, .04))
## [1] 3.2
weighted.sd(x = 1:7, w = c(.21, .20, .18, .15, .13, .09, .04))
## [1] 1.8

A abordagem de força bruta

Meu primeiro pensamento sobre como usar ( mu ) e ( sigma ) era simples, embora um pouco grosseiro. Gere uma série de probabilidades (como um milhão ou mais) e calcule a média ponderada e o desvio padrão para cada distribuição. Eu procuraria as probabilidades que produziram valores próximos ao meu objetivo (ou seja, aqueles que foram relatados na literatura).

Existem algumas desvantagens nessa abordagem. Em primeiro lugar, não é particularmente sistemático, uma vez que geramos as probabilidades aleatoriamente e, embora tenhamos números grandes, não temos garantia de gerar combinações que reflitam nossas metas. Em segundo lugar, não há razão para pensar que as distribuições geradas aleatoriamente se parecerão com a distribuição verdadeira. E terceiro, não há razão para pensar que, mesmo que encontremos uma correspondência, a distribuição seja única.

Na verdade, fui em frente e implementei essa abordagem e encontrei duas distribuições que também geram ( mu ) = 3.2 e e ( sigma ) = 1.8 (verdade seja dita, eu fiz esta parte primeiro e depois encontrei a distribuição acima usando o método que descreverei em um segundo):

Aqui estão os alvos ( mu )‘areia ( sigma )para as distribuições à direita e à esquerda:

p_left 

Com base no beta distribuição

Pensar sobre probabilidades sempre me atrai para o beta distribuição familiar, uma distribuição contínua de 0 a 1. Essas distribuições são parametrizadas com dois valores de forma, muitas vezes referidos como (uma) e (b ). Aqui estão algumas funções de densidade de probabilidade (pdfs) para ((a, b) ) pares de (1, 1.6) em amarelo, (2, 4) em vermelho e (2, 2) em azul:

Tive a ideia de que gerar diferentes PDFs com base em diferentes valores de (uma) e (b ) pode fornecer uma maneira mais sistemática de gerar probabilidades. Se dividirmos o pdf em (K ) seções (onde (K ) é o número de respostas, no nosso caso 7), então a área sob o pdf no (k )a fatia pode fornecer a probabilidade para o (k )ª resposta. Uma vez que cada pdf é único (determinado por valores específicos de (uma) e (b )), isso garantiria conjuntos diferentes (ou seja, únicos) de probabilidades para pesquisar.

Leia Também  As operações de fusões e aquisições da Fintech atingem a maioridade com um valor de transação de US $ 40 bilhões no primeiro semestre de 2018
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Usando o exemplo acima, onde (uma) = 1 e (b ) = 1.6, aqui está a aparência das fatias com base nas sete categorias:

A probabilidade cumulativa em cada fatia (x em {1, …, 7 } ) é ( (P (X), e pode ser calculado em R com a função pbeta:

z 

The probability of for each category is (P(X = x) = P(X , and is calculated easily:

p 

This is the transformed probability distribution from the continuous beta scale to the discrete categorical scale:

And finally here are (mu) and (sigma) associated with these values of (a) and (b):

c(weighted.mean(1:7, p), weighted.sd(1:7, p))
## [1] 2.8 1.3

Força bruta, refinada

Se criarmos uma grade de ((a, b) ) valores, haverá um conjunto associado e único de probabilidades para cada par derivado do corte do pdf em (K ) seções E para cada um desses conjuntos de probabilidades, podemos calcular as médias e desvios padrão. Então encontramos o (( mu, sigma) ) par que está mais próximo de nosso alvo. Embora essa ideia não seja muito melhor do que a abordagem de força bruta sugerida acima, pelo menos agora é sistemática. Se fizermos isso em duas etapas, primeiro procurando a região geral e depois ampliando para encontrar um conjunto específico de probabilidades, podemos realmente acelerar as coisas e usar menos memória.

Limita a pesquisa a betadistribuições baseadas em bases justificáveis? Pode depender da natureza das respostas em um caso particular, mas parece razoável; o mais importante, ele garante distribuições razoavelmente bem comportadas que podem refletir de forma plausível uma ampla gama de padrões de resposta. Excluindo quaisquer informações adicionais sobre as distribuições, então, eu não teria escrúpulos em usar essa abordagem. (Se descobrir que esse é um problema comum, eu até consideraria implementar o algoritmo como um simstudy função.)

Agora é hora de revelar o segredo do enredo (se você ainda não o descobriu). Cada ponto é apenas o (( mu, sigma) ) par gerado por um específico ((a, b) ) par. Aqui está o código, implementando o algoritmo descrito:

get_abp 

We can fill in the plot with more points by increasing the range of (a) and (b) that we search, but creating such a huge table of look-up values is time consuming and starts to eat up memory. In any case, there is no need, because we will refine the search by zooming in on the area closest to our target.

Here is the plot again, based on (a)’s and (b)’s ranging from 0.1 to 25, with the superimposed target pair ((mu =3.2, sigma = 1.8))

To zoom in, we first find the point in the grid that is closest to our target (based on Euclidean distance). We then define a finer grid around this point in the grid, and re-search for the closest point. We do have to be careful that we do not search for invalid values of (a) and (b) (i.e. (a le 0) and (b le 0)). Once we find our point, we have the associated probabilities.:

t_mu = 3.2
t_s = 1.8

ab_res[, distance := sqrt((mu - t_mu)^2 + (sigma - t_s)^2)]
close_point  0]
b_zoom  0]
  
res_zoom 

Here is the new search region:

And the selection of the point:

res_zoom[, distance := sqrt((mu - t_mu)^2 + (sigma - t_s)^2)]
res_zoom[distance == min(distance)]
##       a   b  mu sigma   V1  V2   V3   V4   V5   V6    V7 distance
## 1: 0.97 1.6 3.2   1.8 0.22 0.2 0.17 0.15 0.12 0.09 0.046   0.0021

Aplicando o beta– pesquisar um problema maior

Para concluir, vou terminar com o objetivo mais ambicioso de Francisco de simular respostas correlacionadas a várias perguntas. Neste caso, assumiremos quatro questões, todas com respostas variando de 1 a 7. O alvo ( ( mu, sigma )) pares retirados do (hipotético) artigo de jornal são:

targets 

The correlation matrix taken from this same article is:

corMat 

The get_target_prob function implements the search algorithm described above:

get_target_prob  0]
  b_zoom  0]
  
  res_zoom 

Calling the function conducts the search and provides probabilities for each question:

probs 

At least in theory, Francisco can now conduct his simulation study. In this case, I am generating a huge sample size to minimize sampling variation with the hope that we can recover the means, standard deviations and correlations, which, of course, we do:

d_ind 

In the end, Francisco seemed to be satisfied with the solution - at least satisfied enough to go to the trouble to have a bottle of wine sent to me in New York City, which was definitely above and beyond. While my wife and I will certainly enjoy the wine - and look forward to being able to travel again so maybe we can enjoy a glass in person - seeing that image emerge from a beta-distribution was really all I needed. Salud.



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br