Pesos argumento em lm e lme muito diferentes em R - estou usando-os corretamente?


8

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.

  1. Se eu quiser ponderar meus dados com base no inverso da variável dependente, é bom codificar pesos = ~ (variável dependente) no lme?
  2. 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!


1
A resposta para 2. é que eles foram escritos por pessoas muito diferentes para fazer coisas muito diferentes. 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 o lmpermitido.
precisa saber é o seguinte

Respostas:


12

Q1

Na lmenotação weights = ~ bresultaria na varFixedfunção de variação sendo usada com argumento único b. 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 | vs2(v)s2(v)=|v|vb

Portanto, você deve usar weights = ~ I(1/b)em lme()ter a variância de .εi=1/bi

No lmque você passa, weightsparece 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()e lme()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 que lmpermite o uso de funções de variação por meio da varFuncinfraestrutura.


Isso é claro o suficiente. Por 'ponderar meus dados', quero dizer que quero que o modelo seja adequado para considerar que grandes resíduos devem ser esperados de grandes observações, e que se encaixem em algo semelhante à porcentagem de mínimos quadrados, em vez dos mínimos quadrados comuns. Também excluí o post cruzado no estouro de pilha, desculpe!
colin

Você pode querer examinar outras funções de variação no nlme . O que você está fazendo é dizer que as variações de suas observações são exatamente o valor (absoluto) de b. Parece melhor dizer apenas que a variação aumentou com b. 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δ×biσ^2×|b|2δδbvarExp()var(εi)=σ^2×e2δ×bi
Gavin Simpson

Em lm(), observe a redação em que a variação é proporcional ao inverso de weights. No lmecó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 o lmecódigo está fazendo.
Gavin Simpson

Finalmente, desculpe se eu parecia mal-humorado no Stack Overflow . Não foi intencional. Acabei de esquecer que você não pode votar para fechar como OT e migrar para o Cross Validated . Você tem que deixar um comentário sobre o porquê, mas eu já tinha deixado o primeiro comentário. Não escolha um site SE para sua pergunta com base no número de olhos que o verão. Escolha o local mais apropriado. Não há nada de errado em promover sua pergunta no Cross Validated para obter mais olhos; você pode até postar o link na sala de bate-papo pública R no Stack Overflow . Crossposting ou postar perguntas OT dilui o recurso se tivermos muitas, votos, portanto, perto etc.
Gavin Simpson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.