Assim, parece-me que a função de pesos em lm dá mais peso às observações quanto maior o valor de 'peso' da observação associada, enquanto a função lme em lme faz exatamente o oposto. Isso pode ser verificado com uma simulação simples.
#make 3 vectors- c is used as an uninformative random effect for the lme model
a<-c(1:10)
b<-c(2,4,6,8,10,100,14,16,18,20)
c<-c(1,1,1,1,1,1,1,1,1,1)
Se você agora executava um modelo no qual ponderava as observações com base no inverso da variável dependente em lm, você só pode gerar exatamente o mesmo resultado no nlme se ponderar apenas a variável dependente, sem tomar o inverso.
summary(lm(b~a,weights=1/b))
summary(lme(b~a,random=~1|c,weights=~b))
Você pode inverter isso e ver o inverso como verdadeiro - especificar pesos = b em lm requer pesos = 1 / b para obter um resultado correspondente.
Então, eu entendo isso, eu só quero validação em uma coisa e fazer uma pergunta sobre outra.
- Se eu quiser ponderar meus dados com base no inverso da variável dependente, é bom codificar pesos = ~ (variável dependente) no lme?
- Por que o lme é escrito para lidar com pesos de maneira completamente diferente do lm? Qual é o propósito disso além de gerar confusão?
Qualquer visão seria apreciada!
lm()
necessário para ser compatível com S e vários livros, o nlme não o fez e tinha o objetivo de ser mais flexível, permitindo que a heterogeneidade fosse modelada com mais flexibilidade do que olm
permitido.Respostas:
Q1
Nas2( V ) s2( v ) = | v | v
lme
notaçãoweights = ~ b
resultaria navarFixed
função de variação sendo usada com argumento únicob
. Essa função adicionaria ao modelo uma função de variação que tem a forma, em que obtém os valores do argumento do vetor .s 2 ( v ) = | v | vb
Portanto, você deve usarεEu= 1 / bEu
weights = ~ I(1/b)
emlme()
ter a variância de .No
lm
que você passa,weights
parece exatamente o oposto;weights
é inversamente proporcional à variação.Não tenho 100% de certeza do que você quer dizer com ponderar meus dados , mas se você quer fornecer a variação heterogênea das observações, acho que deseja
weights = ~ I(1/b)
.Q2
Minha intuição (você teria que perguntar os respectivos autores das duas funções) é que esta é beacuse
lm()
elme()
foram escritos por pessoas muito diferentes de fazer as coisas muito diferentes.lm()
era necessário (era desejável que fosse) ser compatível com S e vários livros, o nlme não era, e tinha o objetivo de ser mais flexível, permitindo que a heterogeneidade fosse modelada com mais flexibilidade do quelm
permite o uso de funções de variação por meio davarFunc
infraestrutura.fonte
b
. Parece melhor dizer apenas que a variação aumentou comb
.varPower()
por exemplo, teria a variação como com estimado um parâmetro de modelo. Isso está OK se não receber 0 valores. Se ele pode aceitar 0 valores, então a função pode ser melhor. A variação é . δvumr(εi)= σ 2×e2δ×bib
varExp()
lm()
, observe a redação em que a variação é proporcional ao inverso deweights
. Nolme
código que discutimos,b
é a variação. Seguindo sua explicação, não acho que você realmente queira isso ... Observe também que, se a variação aumentar com resposta média, um GLMM poderá ser apropriado e o pacote lme4 seria adequado, pois pode modelar diretamente a relação de variação média , em vez de via modificação na matriz de covariância - que é o que olme
código está fazendo.