Eu tenho uma linha de melhor ajuste. Preciso de pontos de dados que não alterem minha linha de melhor ajuste

15

Estou fazendo uma apresentação sobre linhas de montagem. Eu tenho uma função linear simples, . Estou tentando obter pontos de dados dispersos que posso colocar em um gráfico de dispersão que manterá minha linha de melhor ajuste na mesma equação.y=1x+b

Eu adoraria aprender essa técnica no R ou no Excel - o que for mais fácil.

Ryan Chase
fonte
1
O caso de regressão múltipla com qualquer conjunto de coeficientes (do qual o seu é um caso especial) é discutido no item (2) desta resposta . Seguindo as etapas, resolve o caso de regressão simples. A abordagem funciona em praticamente qualquer pacote em que você pode simular valores aleatórios da distribuição desejada e ajustar modelos de regressão.
Glen_b -Reinstala Monica
autodeskresearch.com/publications/samestats apresenta uma boa generalização disso: o recozimento simulado é usado para criar gráficos de dispersão que não apenas possuem os valores desejados das estatísticas de resumo, mas também têm uma forma determinada (como o "dataaurus"). Este é um trabalho de Justin Matejka e George Fitzmaurice, intitulado Mesmas estatísticas, gráficos diferentes: gerando conjuntos de dados com aparência variada e estatísticas idênticas através do recozimento simulado .
whuber

Respostas:

28

Escolha qualquer (xi) desde que pelo menos dois deles sejam diferentes. Defina uma interceptação β0 e a inclinação β1 e defina

y0i=β0+β1xi.

Este ajuste é perfeito. Sem alterar o ajuste, você pode modificar y0 para y=y0+ε adicionando qualquer vetor de erro ε=(εi) a ele, desde que ortogonal ao vetor x=(xi) e ao vetor constante (1,1,,1) . Uma maneira fácil de obter esse erro é escolher qualquer vetor e e ser ε os resíduos após a regressão de econtra x . No código abaixo, e é gerado como um conjunto de valores normais aleatórios independentes com média 0 e desvio padrão comum.

Além disso, você pode até mesmo pré-selecionar a quantidade de dispersão, talvez, estipulando que R2 deve ser. Deixando τ2=var(yi)=β12var(xi) , redimensione novamente os resíduos para ter uma variação de

σ2=τ2(1/R21).

Este método é totalmente geral: todos os exemplos possíveis (para um determinado conjunto de xi ) podem ser criados dessa maneira.


Exemplos

Quarteto de Anscombe

Podemos facilmente reproduzir o Quarteto de Anscombe de quatro conjuntos de dados bivariados qualitativamente distintos com as mesmas estatísticas descritivas (até segunda ordem).

Figura

O código é notavelmente simples e flexível.

set.seed(17)
rho <- 0.816                                             # Common correlation coefficient
x.0 <- 4:14
peak <- 10
n <- length(x.0)

# -- Describe a collection of datasets.
x <- list(x.0, x.0, x.0, c(rep(8, n-1), 19))             # x-values
e <- list(rnorm(n), -(x.0-peak)^2, 1:n==peak, rnorm(n))  # residual patterns
f <- function(x) 3 + x/2                                 # Common regression line

par(mfrow=c(2,2))
xlim <- range(as.vector(x))
ylim <- f(xlim + c(-2,2))
s <- sapply(1:4, function(i) {
  # -- Create data.
  y <- f(x[[i]])                                         # Model values
  sigma <- sqrt(var(y) * (1 / rho^2 - 1))                # Conditional S.D.
  y <- y + sigma * scale(residuals(lm(e[[i]] ~ x[[i]]))) # Observed values

  # -- Plot them and their OLS fit.
  plot(x[[i]], y, xlim=xlim, ylim=ylim, pch=16, col="Orange", xlab="x")
  abline(lm(y ~ x[[i]]), col="Blue")

  # -- Return some regression statistics.
  c(mean(x[[i]]), var(x[[i]]), mean(y), var(y), cor(x[[i]], y), coef(lm(y ~ x[[i]])))
})
# -- Tabulate the regression statistics from all the datasets.
rownames(s) <- c("Mean x", "Var x", "Mean y", "Var y", "Cor(x,y)", "Intercept", "Slope")
t(s)

A saída fornece estatísticas descritivas de segunda ordem para os dados (x,y) de cada conjunto de dados. Todas as quatro linhas são idênticas. Você pode criar facilmente mais exemplos alterando x(as coordenadas x) e e(os padrões de erro) desde o início.

Simulações

Ryβ=(β0,β1)R20R21x

simulate <- function(x, beta, r.2) {
  sigma <- sqrt(var(x) * beta[2]^2 * (1/r.2 - 1))
  e <- residuals(lm(rnorm(length(x)) ~ x))
  return (y.0 <- beta[1] + beta[2]*x + sigma * scale(e))
}

(Não seria difícil portar isso para o Excel - mas é um pouco doloroso.)

(x,y)60 xβ=(1,1/2)11/2R2=0.5

Figura

n <- 60
beta <- c(1,-1/2)
r.2 <- 0.5   # Between 0 and 1

set.seed(17)
x <- rnorm(n)

par(mfrow=c(1,4))
invisible(replicate(4, {
  y <- simulate(x, beta, r.2)
  fit <- lm(y ~ x)
  plot(x, y)
  abline(fit, lwd=2, col="Red")
}))

summary(fit)R2xi

whuber
fonte
1
Muito bom, obrigado! Infelizmente, sua abordagem não parece ser imediatamente aplicável a esta pergunta: conjuntos de dados do tipo Anscombe com o mesmo gráfico de caixas e bigodes (média / padrão / mediana / MAD / min / max) , é?
precisa saber é o seguinte
@ Stephanie Você está certo de que não é, porque esse é um problema altamente não linear. Ele pode ser resolvido de maneira semelhante - essencialmente, encontrando soluções viáveis ​​para um problema de otimização restrito - mas requer uma rotina de otimização diferente e as soluções não são garantidas.
whuber