如何拟合回归是的= ⌊ a x + b ⌋y=⌊ax+b⌋在 R?

机器算法验证 r 回归 Python
2022-03-02 14:18:11

我有一些时间序列数据,其中测量变量是离散的正整数(计数)。我想测试随着时间的推移是否有上升趋势(或没有)。自变量 (x) 在 0-500 范围内,因变量 (y) 在 0-8 范围内。

我认为我可以通过y = floor(a*x + b)使用普通最小二乘法 (OLS) 拟合形式的回归来回答这个问题。

我将如何使用 R(或 Python)来做到这一点?是否有现有的软件包,或者我最好编写自己的算法?

PS:我知道这不是理想的技术,但我需要做一个我能真正理解的相对简单的分析——我的背景是生物学而不是数学。我知道我违反了关于测量变量误差和测量随时间独立性的假设。

2个回答

您可以使用 中的nls(非线性最小二乘)函数拟合您声明的模型R,但正如您所说,这将违反许多假设并且可能仍然没有多大意义(您是说预测的结果是随机的函数,而不是围绕平滑增加关系的整数值)。

拟合计数数据的更常见方法是使用 中的glm函数使用泊松回归R,帮助页面上的第一个示例是泊松回归,但如果您不太熟悉统计数据,最好咨询统计学家以确保你做事正确。

如果 8 的值是绝对最大值(不可能看到更高的计数,而不仅仅是您所看到的),那么您可能会考虑比例赔率逻辑回归,在包中有几个工具可以做到这一点R,但是您如果你想这样做,真的应该让统计学家参与进来。

很明显,首先要尝试的是 Greg 的建议:泊松回归是许多具体的自然模型情况。

但是,例如,当您观察舍入数据时,您建议的模型可能会出现: 具有 iid 正常错误

Yi=axi+b+ϵi,
ϵi

我认为看看可以用它做什么很有趣。我用表示标准正态变量的 cdf。如果,则 使用熟悉的计算机符号。FϵN(0,σ2)

P(ax+b+ϵ=k)=F(kb+1axσ)F(kbaxσ)=pnorm(k+1axb,sd=σ)pnorm(kaxb,sd=σ),

您观察数据点对数似然由 这与最小二乘法不同。您可以尝试使用数值方法将其最大化。这是R中的插图:(xi,yi)

(a,b,σ)=ilog(F(yib+1axiσ)F(yibaxiσ)).

log_lik <- function(a,b,s,x,y)
  sum(log(pnorm(y+1-a*x-b, sd=s) - pnorm(y-a*x-b, sd=s)));

x <- 0:20
y <- floor(x+3+rnorm(length(x), sd=3))
plot(x,y, pch=19)
optim(c(1,1,1), function(p) -log_lik(p[1], p[2], p[3], x, y)) -> r
abline(r$par[2], r$par[1], lty=2, col="red")
t <- seq(0,20,by=0.01)
lines(t, floor( r$par[1]*t+r$par[2]), col="green")

lm(y~x) -> r1
abline(r1, lty=2, col="blue");

圆角线性模型

在红色和蓝色中,线分别通过这种可能性的数值最大化和最小二乘法找到。绿色楼梯是对于 ... 这表明您可以使用最小二乘法,最多将平移0.5,并获得大致相同的结果;或者,最小二乘拟合模型 其中是最接近的整数。四舍五入的数据经常遇到,我确信这是已知的并且已经被广泛研究......ax+bax+ba,bb

Yi=[axi+b+ϵi],
[x]=x+0.5