Questions tagged «nonlinear-regression»

仅对响应是参数非线性函数的回归模型使用此标记。不要将此标签用于非线性数据转换。

1
R中的非线性混合效应回归
令人惊讶的是,我无法使用Google找到以下问题的答案: 我有一些个体的生物学数据,这些数据显示了乙状结肠的及时生长行为。因此,我希望使用标准的物流增长对其进行建模 P(t) = k*p0*exp(r*t) / (k+p0*(exp(r*t)-1)) 其中p0是t = 0处的起始值,k是t-> infinity处的渐近极限,r是生长速度。据我所知,我可以使用nls对此模型轻松地建模(我缺乏理解:为什么我不能通过缩放时间和数据来使用标准logit回归建模类似的东西?感谢:Nick,显然人们这样做了,例如比例,但很少见http://www.stata-journal.com/article.html?article=st0147。关于此切线的下一个问题是模型是否可以处理> 1的离群值。 现在,我希望允许对三个参数k,p0和r进行固定(主要是分类)和随机(单个ID,还可能是研究ID)影响。nlme是这样做的最好方法吗?SSlogis模型对于我想做的事情似乎很明智,这是正确的吗?以下任一个是明智的模型吗?我似乎无法正确设置起始值,并且update()仅适用于随机效果,而不适用于固定效果-有任何提示吗? nlme(y ~ k*p0*exp(r*t) / (k+p0*(exp(r*t)-1)), ## not working at all (bad numerical properties?) data = data, fixed = k + p0 + r ~ var1 + var2, random = k + p0 + r ~ 1|UID, start …

1
如何最小化指数拟合的平方的剩余平方和?
我有以下数据,并希望对其采用负指数增长模型: Days <- c( 1,5,12,16,22,27,36,43) Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71) plot(Days, Emissions) fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55)) curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", …

3
线性回归F统计量,R平方和残差标准误差告诉我们什么?
我对以下术语的线性回归上下文的意义差异感到非常困惑: F统计 R平方 残留标准误差 我找到了这个网站,这使我对线性回归中涉及的不同术语有了深刻的了解,但是,据我所知,上述术语看起来非常相似。我会引用我读到的东西和让我感到困惑的东西: 残差标准误差是线性回归拟合的质量的度量.......残差标准误差是响应(dist)偏离真实回归线的平均值。 1.因此,实际上这是观测值与lm线的平均距离吗? R平方统计量可用来衡量模型对实际数据的拟合程度。 2.现在我很困惑,因为如果RSE告诉我们观察点与回归线有多远,则低RSE实际上告诉我们“您的模型基于观察到的数据点非常合适”->因此,我们的模型有多好模型适合,那么R平方和RSE有什么区别? F统计量可以很好地指示我们的预测变量与响应变量之间是否存在关系。 3.的确,我们可以有一个F值来表示非线性的强关系,因此我们的RSE高而我们的R平方很低


2
线性与非线性回归
我有一组值和,它们在理论上呈指数相关:Xxxÿyy ÿ= 一个Xby=axby = ax^b 一种获取系数的方法是在两侧应用自然对数并拟合线性模型: > fit <- lm(log(y)~log(x)) > a <- exp(fit$coefficients[1]) > b <- fit$coefficients[2] 获得此结果的另一种方法是使用非线性回归,给定一组理论上的起始值: > fit <- nls(y~a*x^b, start=c(a=50, b=1.3)) 如果应用第二种算法,我的测试将显示出更好且与理论相关的结果。但是,我想知道每种方法的统计意义和含义。 他们哪个更好?

4
线性模型与非线性模型的区别
我已经阅读了有关线性模型与非线性模型的属性的一些解释,但是仍然有时我不确定手头的模型是线性模型还是非线性模型。例如,以下模型是线性的还是非线性的? yt=β0+β1B(L;θ)Xt+εtyt=β0+β1B(L;θ)Xt+εty_t=\beta_0 + \beta_1B(L;\theta)X_t+\varepsilon_t 带有: B(L;θ)=∑k=1Kb(k;θ)LkB(L;θ)=∑k=1Kb(k;θ)LkB(L;\theta)=\sum_{k=1}^{K}b(k;\theta)L^k LkXt=Xt−kLkXt=Xt−kL^kX_t=X_{t-k} 其中表示(衰减的)指数Almon多项式函数,其形式为:b(k;θ)b(k;θ)b(k;\theta) b(k;θ)=exp(θ1k+θ2k2)∑Kk=1exp(θ1k+θ2k2)b(k;θ)=exp⁡(θ1k+θ2k2)∑k=1Kexp⁡(θ1k+θ2k2)b(k;\theta)=\frac{\exp(\theta_1 k+\theta_2k^2)}{\sum_{k=1}^{K}\exp(\theta_1k+\theta_2k^2)} 在我看来,我的主要方程式(第一个方程式)相对于是线性的,因为该项只是乘以一个权重。但是我要说加权函数(最后一个方程)相对于参数 ans是非线性的。θ 1 θ 2XtXtX_tθ1θ1\theta_1θ2θ2\theta_2 有人可以向我解释我的主要函数是线性函数还是非线性函数,这对估计程序意味着什么-我必须应用线性或非线性最小二乘法吗?此外,可辨别的特征是什么,通过它我可以确定一个函数是非线性函数还是线性函数?

4
如何为非线性最小二乘拟合选择初始值
上面的问题说明了一切。基本上,我的问题是针对一个通用的拟合函数(可能会任意复杂),该函数在我尝试估算的参数中是非线性的,如何选择初始值来初始化拟合?我正在尝试做非线性最小二乘法。有什么策略或方法吗?已经研究过了吗?有参考吗?除了临时猜测之外,还有什么吗?具体来说,现在正在使用的一种拟合形式是具有我要估计的五个参数的高斯加线性形式,例如 ÿ= A e- (x - BC)2+ D x + Ey=Ae−(x−BC)2+Dx+Ey=A e^{-\left(\frac{x-B}{C}\right)^2}+Dx+E 其中(横坐标数据)和y = log 10(纵坐标数据)意味着在对数对数空间中,我的数据看起来像一条直线加一个高斯近似的凸点。我没有任何理论,关于如何初始化非线性拟合的任何指导,除了可能像线的斜率和凹凸的中心/宽度之类的图形和眼球之外,都没有指导我。但是我有一百多种适合的方法,而不是图形和猜测,我更喜欢一些可以自动化的方法。x = 日志10x=log10x = \log_{10}ÿ= 日志10y=log10y = \log_{10} 我在图书馆或在线找不到任何参考。我唯一能想到的就是随机选择初始值。MATLAB提供了从[0,1]均匀分布的值中随机选择值的功能。因此,对于每个数据集,我都会运行随机初始化的拟合一千次,然后选择最高的那个。还有其他(更好的)想法吗?[R2r2r^2 附录1 首先,这是数据集的一些直观表示,目的是向大家展示我在谈论哪种数据。我要以原始形式发布数据,而无需进行任何形式的转换,然后将其以可视化的形式记录在日志-日志空间中,因为它阐明了某些数据的功能,同时扭曲了其他功能。我同时发布了好坏数据的样本。 每个图中的六个面板中的每个面板都显示四个数据集,它们分别绘制为红色,绿色,蓝色和青色,每个数据集恰好具有20个数据点。由于数据中出现的颠簸,我试图用直线加高斯拟合它们中的每一个。 第一个数字是一些好的数据。第二个图是与图一相同的好数据的对数-对数图。第三个数字是一些不良数据。第四个图是图三的对数-对数图。数据更多,这只是两个子集。大部分数据(大约3/4)都是好数据,类似于我在此处显示的好数据。 现在发表一些评论,请耐心等待,因为这可能会花费很长时间,但是我认为所有这些细节都是必要的。我会尽量简洁。 我原本期望一个简单的幂定律(意思是对数-对数空间中的直线)。当我在对数-对数空间中绘制所有图形时,我看到了4.8 mHz附近的意外凸起。对颠簸进行了彻底的调查,并在其他工作中也发现了颠簸,因此并不是我们搞砸了。它实际上在那儿,其他出版的作品也提到了这一点。因此,我只是在线性形式中添加了一个高斯项。请注意,此拟合将在对数-对数空间中完成(因此,我的两个问题包括此问题)。 现在,在阅读了Stumpy Joe Pete对我的另一个问题(根本与这些数据无关)的答案并阅读了这个,这个以及其中的引用(由Clauset逐句填充)之后,我意识到我不应该适合log-log空间。所以现在我想在预先转换的空间中做所有事情。 问题1:从好的数据来看,我仍然认为在预变换空间中线性加高斯仍然是一种好形式。我很想听听其他有更多数据经验的人的想法。高斯+线性合理吗?我应该只做高斯吗?还是完全不同的形式? 问题2:无论问题1的答案是什么,我仍然需要(最有可能)非线性最小二乘拟合,因此仍需要初始化方面的帮助。 在看到两组数据的情况下,我们非常希望捕获4-5 mHz附近的第一个凸起。因此,我不想添加更多的高斯项,而我们的高斯项应以第一个颠簸为中心,这几乎总是更大的颠簸。我们希望在0.8mHz至5mHz之间的“更高的精度”。我们不太关心较高的频率,但也不想完全忽略它们。那么也许是某种权衡?还是B总是可以在4.8mHz附近初始化? Fff大号LL L = A e− (f- 乙C)2+ D f+ E。L=Ae−(f−BC)2+Df+E.L=A e^{-\left(\frac{f-B}{C}\right)^2}+Df+E. Fff …

1
如何阅读R的nls的拟合优度?
我试图解释nls()的输出。我已经阅读了这篇文章,但我仍然不明白如何选择最合适的。根据我的拟合,我有两个输出: > summary(m) Formula: y ~ I(a * x^b) Parameters: Estimate Std. Error t value Pr(>|t|) a 479.92903 62.96371 7.622 0.000618 *** b 0.27553 0.04534 6.077 0.001744 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 120.1 on 5 degrees …


1
当比例是自变量时,转换比例的最合适方法是什么?
我以为我理解了这个问题,但是现在我不太确定,我想在继续之前先与其他人核实。 我有两个变量,X和Y。Y是一个比率,并且不受0和1的限制,并且通常呈正态分布。X是一个比例,以0和1为界(从0.0到0.6)。当我运行的线性回归时Y ~ X,我发现,它们X与Y线性关系显着。到现在为止还挺好。 但是后来我进一步调查,开始认为也许X和Y的关系可能比线性关系更曲线。对我来说,它看起来像的关系X,并Y可能接近Y ~ log(X),Y ~ sqrt(X)或者Y ~ X + X^2,或者类似的东西。我有经验上的理由认为该关系可能是曲线关系,但没有理由假设任何一种非线性关系都可能比其他任何一种更好。 我从这里有几个相关的问题。首先,我的X变量采用四个值:0、0.2、0.4和0.6。当我对这些数据进行对数或平方根转换时,这些值之间的间距会失真,因此0值与所有其他值的距离要远得多。由于缺乏更好的询问方式,这就是我想要的吗?我认为不是,因为根据接受的失真程度,我得到的结果非常不同。如果这不是我想要的,应该如何避免? 其次,要对这些数据进行对数转换,我必须在每个X值上加上一些数量,因为您不能采用0的对数。当我增加非常小的数量(例如0.001)时,我会得到非常大的失真。当我添加较大的数量(例如1)时,失真很小。是否有“正确的”数量要添加到X变量中?还是在变量中添加任何内容以X替代选择替代转换(例如,立方根)或模型(例如,逻辑回归)是否不合适? 在这个问题上我几乎找不到的东西让我觉得我应该谨慎行事。对于其他R用户,此代码将创建一些结构类似于我的数据。 X = rep(c(0, 0.2,0.4,0.6), each = 20) Y1 = runif(20, 6, 10) Y2 = runif(20, 6, 9.5) Y3 = runif(20, 6, 9) Y4 = runif(20, 6, 8.5) Y = c(Y4, Y3, Y2, Y1) plot(Y~X)

3
为什么区分“线性”回归和“非线性”回归很重要?
区分线性模型和非线性模型的重要性是什么?问题非线性与广义线性模型:您如何指代逻辑回归,泊松等回归?它的答案是对广义线性模型的线性/非线性的非常有帮助的说明。区分线性模型和非线性模型似乎至关重要,但是我不清楚为什么?例如,考虑以下回归模型: Ë[ Y∣ X]Ë[ Y∣ X]Ë[ Y∣ X]Ë[ Y∣ X]= β0+ β1个X= β0+ β1个X+ β2X2= β0+ β21个X= { 1 + exp(− [ β0+ β1个X] }− 1(1)(2)(3)(4)(1)E[Y∣X]=β0+β1X(2)E[Y∣X]=β0+β1X+β2X2(3)E[Y∣X]=β0+β12X(4)E[Y∣X]={1+exp⁡(−[β0+β1X]}−1\begin{align} E[Y \mid X] & = \beta_0 + \beta_1 X \tag{1} \\ E[Y \mid X] & = \beta_0 + \beta_1 X + \beta_2 X^2 \tag{2} …

1
手动计算对数似然,以进行广义非线性最小二乘回归(nlme)
我正在尝试为函数优化的广义非线性最小二乘回归计算对数似然功能在R包,使用由距离上AA进化树假设(布朗运动产生的方差协方差矩阵从包中)。以下可重现的R代码使用x,y数据和具有9个分类单元的随机树来拟合gnls模型:f(x)=β1(1+xβ2)β3f(x)=β1(1+xβ2)β3f(x)=\frac{\beta_1}{(1+\frac x\beta_2)^{\beta_3}}gnlsnlmecorBrownian(phy=tree)ape require(ape) require(nlme) require(expm) tree <- rtree(9) x <- c(0,14.51,32.9,44.41,86.18,136.28,178.21,262.3,521.94) y <- c(100,93.69,82.09,62.24,32.71,48.4,35.98,15.73,9.71) data <- data.frame(x,y,row.names=tree$tip.label) model <- y~beta1/((1+(x/beta2))^beta3) f=function(beta,x) beta[1]/((1+(x/beta[2]))^beta[3]) start <- c(beta1=103.651004,beta2=119.55067,beta3=1.370105) correlation <- corBrownian(phy=tree) fit <- gnls(model=model,data=data,start=start,correlation=correlation) logLik(fit) 我想logLik根据从获得的估计参数来“手动”计算对数似然(在R中,但不使用函数),gnls因此它与的输出匹配logLik(fit)。注意:我不是要估计参数;我只想计算该函数估计的参数的对数似然gnls性(尽管如果有人提供了一个可重现的示例,说明了如何在不使用的情况下估计参数gnls,我将非常感兴趣!)。 我不确定如何在R中执行此操作。S和S-Plus的混合效果模型(Pinheiro和Bates)中描述的线性代数表示法让我非常头疼,而且我的尝试都没有logLik(fit)。以下是Pinheiro和Bates描述的详细信息: 对数似然为广义非线性最小二乘模型 其中的计算方法如下:φ 我 = 甲我 βÿ一世= f一世(ϕ一世,v一世)+ ϵ一世yi=fi(ϕi,vi)+ϵiy_i=f_i(\phi_i,v_i)+\epsilon_iϕ一世= A一世βϕi=Aiβ\phi_i=A_i\beta 升(β,σ2,δ| ÿ)= − 12{ N日志(2 πσ2)+ ∑我= …

2
我们可以使用比原始样本小的引导样本吗?
我想使用自举来估计N = 250个公司和T = 50个月的面板数据集中的估计参数的置信区间。由于使用卡尔曼滤波和复杂的非线性估计,参数的估计在计算上是昂贵的(几天的计算)。因此,即使是自举的基本方法,也无法从原始样本中抽取(替换)B(成百上千个)M = N = 250个公司的B个样本并估计参数B次是不可行的。 因此,我正在考虑对引导程序样本使用较小的M(例如10)(而不是N = 250的完整大小),并通过从原始公司替换而随机抽取,然后使用缩放模型参数的引导程序估计协方差矩阵(在上面的示例中为1/25)来计算在完整样本上估算的模型参数的协方差矩阵。1个ñ中号1NM\frac{1}{\frac{N}{M}} 然后,可以基于正态假设或基于经验的估计置信区间,对于较小的样本,可以使用类似的程序进行缩放(例如,缩小。1个ñ中号√1NM\frac{1}{\sqrt{\frac{N}{M}}} 这种解决方法有意义吗?有理论结果证明这一点吗?还有其他解决方案吗?

4
在R中为nls模型获取正确的起始值
我试图将一个简单的幂定律模型拟合到如下数据集: mydf: rev weeks 17906.4 1 5303.72 2 2700.58 3 1696.77 4 947.53 5 362.03 6 目标是使电源线通过并使用它来预测rev未来几周的赞誉。大量的研究使我找到了该nls功能,我按如下方式实现了该功能。 newMod <- nls(rev ~ a*weeks^b, data=modeldf, start = list(a=1,b=1)) predict(newMod, newdata = data.frame(weeks=c(1,2,3,4,5,6,7,8,9,10))) 虽然这适用于lm模型,但会出现singular gradient错误,我理解这与我的初始值a和有关b。我尝试了不同的值,甚至可以在Excel中进行绘制,传递一个孤行,获取一个方程式,然后使用该方程式中的值,但仍然遇到错误。我看着一堆像答案的这一个,并试图在第二个答案(看不惯第一),但都没有结果。 我真的可以在这里找到有关如何找到正确的起始值的帮助。或者,我可以使用什么其他功能代替nls。 如果您想mydf轻松地重新创建: mydf <- data.frame(rev=c(17906.4, 5303.72, 2700.58 ,1696.77 ,947.53 ,362.03), weeks=c(1,2,3,4,5,6))


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.