Eu gostaria de regredir um vetor B contra cada uma das colunas da matriz A. Isso é trivial se não houver dados ausentes, mas se a matriz A contiver valores ausentes, minha regressão contra A é restrita a incluir apenas linhas em que todas valores estão presentes (o comportamento padrão na.omit ). Isso produz resultados incorretos para colunas sem dados ausentes. Posso regredir a matriz da coluna B contra colunas individuais da matriz A, mas tenho milhares de regressões a fazer, e isso é proibitivamente lento e deselegante. A função na.exclude parece ter sido projetada para este caso, mas não posso fazê-lo funcionar. O que eu estou fazendo errado aqui? Usando R 2.13 no OSX, se isso for importante.
A = matrix(1:20, nrow=10, ncol=2)
B = matrix(1:10, nrow=10, ncol=1)
dim(lm(A~B)$residuals)
# [1] 10 2 (the expected 10 residual values)
# Missing value in first column; now we have 9 residuals
A[1,1] = NA
dim(lm(A~B)$residuals)
#[1] 9 2 (the expected 9 residuals, given na.omit() is the default)
# Call lm with na.exclude; still have 9 residuals
dim(lm(A~B, na.action=na.exclude)$residuals)
#[1] 9 2 (was hoping to get a 10x2 matrix with a missing value here)
A.ex = na.exclude(A)
dim(lm(A.ex~B)$residuals)
# Throws an error because dim(A.ex)==9,2
#Error in model.frame.default(formula = A.ex ~ B, drop.unused.levels = TRUE) :
# variable lengths differ (found for 'B')
r
missing-data
linear-model
David Quigley
fonte
fonte
Respostas:
Edit: Eu entendi mal a sua pergunta. Existem dois aspectos:
a)
na.omit
ena.exclude
ambos fazem exclusão casualmente em relação a preditores e critérios. Eles diferem apenas no fato de o extrator funcionar comoresiduals()
oufitted()
irá preencher sua saída comNA
s para os casos omitidosna.exclude
, tendo assim uma saída do mesmo comprimento que as variáveis de entrada.b) O problema real não é com essa diferença entre
na.omit
ena.exclude
, você não parece querer uma exclusão casualmente que leve em consideração as variáveis de critério, o que ambas fazem.Os resultados da regressão dependem do matrizes (pseudoinverse de montagem de matriz X , coeficientes β = X + Y ) e a matriz de chapéu H = X X + , valores ajustados Y = H Y ) Se você não deseja exclusão casewise, precisará de uma matriz de design X diferente para cada coluna de YX+= ( X′X)- 1X′ X β^= X+Y H=XX+ Y^= HY X Y , portanto, não há como ajustar regressões separadas para cada critério. Você pode tentar evitar a sobrecarga
lm()
fazendo algo ao longo das linhas a seguir:Note que não pode ser numericamente melhores maneiras de caculate e H , você pode verificar a Q R -decomposition vez. A abordagem SVD é explicada aqui no SE . Não cronometrei a abordagem acima com grandes matrizes Y contra o uso real .X+ H Q R Y
lm()
fonte
Eu posso pensar em duas maneiras. Uma é combinar os dados, usar os dados
na.exclude
e depois separá-los novamente:Outra maneira é usar o
data
argumento e criar uma fórmula.Se você estiver fazendo muita regressão, a primeira maneira deve ser mais rápida, pois é executada menos mágica em segundo plano. Embora se você precisar apenas de coeficientes e resíduos, sugiro usar
lsfit
, o que é muito mais rápido quelm
. A segunda maneira é um pouco melhor, mas no meu laptop, tentar fazer um resumo da regressão resultante gera um erro. Vou tentar ver se isso é um bug.fonte
O exemplo a seguir mostra como fazer previsões e resíduos que estejam em conformidade com o dataframe original (usando a opção "na.action = na.exclude" em lm () para especificar que as NA devem ser colocadas nos vetores residuais e de previsão nos quais o dataframe original também mostra como especificar se as previsões devem incluir apenas observações onde as variáveis explicativas e dependentes estavam completas (ou seja, previsões estritamente dentro da amostra) ou observações onde as variáveis explicativas estavam completas e, portanto, a previsão de Xb é possível ( isto é, incluindo previsão fora da amostra para observações que apresentavam variáveis explicativas completas, mas estavam ausentes a variável dependente).
Eu uso cbind para adicionar as variáveis preditas e residuais ao conjunto de dados original.
fonte