Pergunta

Eu tenho a seguinte configuração para analisar: temos cerca de 150 indivíduos e, para cada sujeito, realizamos um par de testes (sob condições diferentes) 18 vezes. As 18 condições diferentes do teste são complementares, de tal maneira que, se formos a média dos testes (para cada sujeito), não obteríamos correlação entre os testes (entre os sujeitos). O que desejamos saber é a correlação (e o valor de P) entre os testes, dentro dos sujeitos, mas sobre todos os sujeitos.

A maneira como eu fiz isso agora foi realizar a correlação para cada sujeito e depois olhar para a distribuição das correlações recebidas para ver se é mau é diferente. Pergunta (alguém me disse algo sobre "correlação geográfica", mas uma pesquisa superficial não ajudou).

PS: Entendo que pode haver um lugar aqui para fazer algum tipo de modelo misto, mas eu preferiria apresentar uma "correlação" e não tenho certeza de como extrair essa saída de um modelo misto.

Além disso, aqui está um código fictício curto para dar uma idéia do que estou falando:

attach(longley)
N <- length(Unemployed)
block <- c(
        rep( "a", N),
        rep( "b", N),
        rep( "c", N)
        )

Unemployed.3 <- c(Unemployed + rnorm(1),
                    Unemployed + rnorm(1),
                    Unemployed + rnorm(1))

GNP.deflator.3 <- c(GNP.deflator + rnorm(1),
                    GNP.deflator + rnorm(1),
                    GNP.deflator + rnorm(1))

cor(Unemployed, GNP.deflator)
cor(Unemployed.3, GNP.deflator.3)
cor(Unemployed.3[block == "a"], GNP.deflator.3[block == "a"])
cor(Unemployed.3[block == "b"], GNP.deflator.3[block == "b"])
cor(Unemployed.3[block == "c"], GNP.deflator.3[block == "c"])
(I would like to somehow combine the last three correlations...)

Quaisquer idéias serão bem -vindas.

Melhor, tal

Foi útil?

Solução

Eu concordo com Tristan - você está procurando ICC. A única diferença das implementações padrão é que os dois avaliadores (testes) avaliam cada sujeito repetidamente. Pode haver uma implementação que permita isso. Enquanto isso, aqui está outra abordagem para obter a correlação.

Você pode usar "modelos lineares gerais", que são generalizações de modelos lineares que permitem explicitamente a correlação entre os resíduos. O código abaixo implementa isso usando o gls função do nlme pacote. Tenho certeza de que existem outras maneiras também. Para usar essa função, precisamos primeiro remodelar os dados em um formato "longo". Eu também mudei os nomes da variável para x e y Pela simplicidade. Eu também usei +rnorm(N) ao invés de +rnorm(1) No seu código, porque é isso que eu acho que você quis dizer.

library(reshape)
library(nlme)
dd <- data.frame(x=Unemployed.3, y=GNP.deflator.3, block=factor(block))
dd$occasion <- factor(rep(1:N, 3))  # variable denoting measurement occasions
dd2 <- melt(dd, id=c("block","occasion"))  # reshape

# fit model with the values within a measurement occasion correlated
#   and different variances allowed for the two variables
mod <- gls(value ~ variable + block, data=dd2, 
           cor=corSymm(form=~1|block/occasion), 
           weights=varIdent(form=~1|variable))  
# extract correlation
mod$modelStruct$corStruct

Na estrutura de modelagem, você pode usar um teste de razão de verossimilhança para obter um valor p. nlme Também pode lhe dar um intervalo de confiança:

mod2 <- gls(value ~ variable + block, data=dd2, 
           weights=varIdent(form=~1|variable))  
anova(mod, mod2)   # likelihood-ratio test for corr=0

intervals(mod)$corStruct  # confidence interval for the correlation

Outras dicas

Eu não tenho certeza no raciocínio da Microsoft, mas quando eu designar fazendas, eu propositalmente deixo ca em um servidor de aplicativos, pois não é um site de tráfego alto e não afetará o desempenho do servidor de aplicativos.

É a ferramenta de gerenciamento para sua fazenda, portanto, mantê-lo em servidores que seu gerenciamento faz sentido para mim.Também permite que você extraia um nível de segurança por não colocá-lo em uma extremidade frontal da Web, que pode ser acessado por meio de um balanceador de carga, em vez disso, é no servidor que está nos bastidores que menos usuários sequer saberiam.

apenas meus 2 centavos.

Não sou especialista, mas isso me parece o que você quer. É automatizado, curto para codificar, fornece as mesmas correlações do seu exemplo acima e produz valores de p.

> df = data.frame(block=block, Unemployed=Unemployed.3,
+ GNP.deflator=GNP.deflator.3)
> require(plyr)
Loading required package: plyr
> ddply(df, "block", function(x){
+   as.data.frame(
+     with(x,cor.test(Unemployed, GNP.deflator))[c("p.value","estimate")]
+ )})
  block    p.value  estimate
1     a 0.01030636 0.6206334
2     b 0.01030636 0.6206334
3     c 0.01030636 0.6206334

Para ver todos os detalhes, faça isso:

> dlply(df, "block", function(x){with(x,cor.test(Unemployed, GNP.deflator))})
$a

    Pearson's product-moment correlation

data:  Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 0.1804410 0.8536976 
sample estimates:
      cor 
0.6206334 


$b

    Pearson's product-moment correlation

data:  Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 0.1804410 0.8536976 
sample estimates:
      cor 
0.6206334 


$c

    Pearson's product-moment correlation

data:  Unemployed and GNP.deflator 
t = 2.9616, df = 14, p-value = 0.01031
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 0.1804410 0.8536976 
sample estimates:
      cor 
0.6206334 


attr(,"split_type")
[1] "data.frame"
attr(,"split_labels")
  block
1     a
2     b
3     c
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top