我有一条最适合的路线。我需要的数据点不会改变我的最佳拟合线


15

我正在做关于装配线的演讲。我有一个简单的线性函数y=1x+b。我试图获取分散的数据点,然后将其放置在散点图中,以使我的最佳拟合线保持不变。

我很想在R或Excel中学习这项技术-以较容易的为准。


1
答案的第(2)项讨论了具有任何系数集(您的情况是特例)的多元回归情况。按照这些步骤解决简单的回归情况。该方法几乎可以在任何包中工作,您可以在其中模拟所需分布的随机值并拟合回归模型。
Glen_b-恢复莫妮卡

autodeskresearch.com/publications/samestats对此进行了很好的概括:模拟退火用于创建散点图,这些散点图不仅具有所需的摘要统计值,而且还具有确定的形状(例如“数据库”)。贾斯汀·马捷卡(Justin Matejka)和乔治·菲茨毛里斯(George Fitzmaurice)的著作《相同的统计数据,不同的图形:通过模拟退火生成具有各种外观和相同统计数据集》
ub

Answers:


28

选择任意(xi)只要其中至少两个不同即可。设置截距β0和斜率β1,并定义

y0i=β0+β1xi.

完美贴合。而不改变配合,可以修改y0y=y0+ε通过添加任何误差矢量ε=(εi)给它,只要它是正交既与矢量x=(xi)和常数向量(1,1,,1)。获得这种误差的一种简单方法是选择任意向量e然后让ε为回归 e时的残差e针对x。在下面的代码中,e作为一组独立的随机正态值生成,均值为0,共有标准偏差。

此外,甚至可以通过指定R2应该是多少来预先选择散射量。令τ2=var(yi)=β12var(xi),重新调整那些残差具有的方差

σ2=τ2(1/R21).

此方法是完全通用的:可以通过这种方式创建所有可能的示例(对于给定的xi集合)。


例子

安斯科姆的四重奏

我们可以轻松地重现具有相同描述统计量(通过二阶)的四个定性截然不同的双变量数据集的安斯科姆四重奏

Figure

该代码非常简单和灵活。

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)

输出为每个数据集提供(x,y)数据的二阶描述性统计信息。 所有四行都是相同的。 您可以通过一开始更改x(x坐标)和e(错误模式)轻松创建更多示例。

模拟

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))
}

(将其移植到Excel并不难,但是有点痛苦。)

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

Figure

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


1
很好,谢谢!不幸的是,您的方法似乎并不立即适用于此问题:具有相同方框和晶须图(均值/标准差/中位数/ MAD /最小/最大)的类似Anscombe的数据集,对吗?
Stephan Kolassa,

@Stephan您是正确的,不是,因为那是一个高度非线性的问题。可以通过类似的方法来解决该问题(本质上是通过找到约束优化问题的可行解决方案),但是需要使用不同的优化例程,并且不能保证解决方案。
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.