【问题标题】:How do I run an exponential nls with seasonal dummies in R?如何在 R 中运行带有季节性假人的指数 nls?
【发布时间】:2015-03-20 22:28:16
【问题描述】:

我在使用 R 中的季节性假人运行 nls 回归时遇到问题。 我可以在没有季节性假人的情况下做到这一点,但不能。 这是我目前所拥有的:

year=floor(time(lsts))
> month=round(time(lsts)-year,4)
> month.f=factor(month)
> dummies=model.matrix(~month.f)
hotdogNLS<-nls(lsts~beta1/(1+exp(beta2+beta3*t)),start=list(beta1=2500,beta2=0.5,beta3=-0.5),trace=F)

总结(热狗NLS)

Formula: lsts ~ beta1/(1 + exp(beta2 + beta3 * t))

Parameters:
        Estimate Std. Error t value Pr(>|t|)    
beta1  2.030e+03  5.874e+01   34.55   <2e-16 ***
beta2  1.146e+00  5.267e-02   21.76   <2e-16 ***
beta3 -1.116e-02  7.668e-04  -14.56   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 192.3 on 333 degrees of freedom

Number of iterations to convergence: 8 
Achieved convergence tolerance: 2.054e-06

如何添加季节性假人? 谢谢!

【问题讨论】:

  • 这里的假人是什么意思?是否会针对每个虚拟值完全单独评估参数,还是仅根据虚拟值有一个或几个参数?

标签: r regression nls


【解决方案1】:

您可以使用factor 对估计系数进行子集化,例如alpha[dummy]

data(cars)
cars$dummy <- as.factor(LETTERS[1:5])

nls(dist ~ alpha[dummy] + beta1*speed^beta2, data=cars, start=list(beta1=.2, beta2=3, alpha=rep(10, nlevels(cars$dummy))))
#Nonlinear regression model
#  model: dist ~ alpha[dummy] + beta1 * speed^beta2
#   data: cars
#  beta1   beta2  alpha1  alpha2  alpha3  alpha4  alpha5 
# 0.2069  1.8580  2.8264  5.3971 13.0000  9.3537  2.5359 
# residual sum-of-squares: 10040
#
#Number of iterations to convergence: 12 
#Achieved convergence tolerance: 2.372e-06

【讨论】:

    【解决方案2】:

    我不认为nls 像在glm 中那样实现了假人,因为nls 的“公式”是一个与glm 不同的真正数学公式。

    您仍然可以指定是否必须为每个假人类别单独评估参数:

        data(cars)
        # define the dummy
        cars$dummy <- as.factor(LETTERS[1:5])
        # code as 0/1 the dummy with a column per dummy level
        cars$A<- as.numeric(cars$dummy=="A")
        cars$B<- as.numeric(cars$dummy=="B")
        cars$C<- as.numeric(cars$dummy=="C")
        cars$D<- as.numeric(cars$dummy=="D")
        cars$E<- as.numeric(cars$dummy=="E")
    
        # precise in the formula where the dummy level should play out
        # here in the intercept:
        model <- nls(dist~beta1*speed^beta2+beta3*A+beta4*B+beta5*C+beta6*D+beta7*E,data=cars)
    
        model
    
        Nonlinear regression model
          model: dist ~ beta1 * speed^beta2 + beta3 * A + beta4 * B + beta5 * C + beta6 * D + beta7 * E
          data: cars
          beta1   beta2   beta3   beta4   beta5   beta6   beta7 
          0.2069  1.8580  2.8266  5.3973 13.0002  9.3539  2.5361 
          residual sum-of-squares: 10040
    
          Number of iterations to convergence: 8 
          Achieved convergence tolerance: 4.924e-06
    

    【讨论】:

    • 非常感谢!除了当我尝试运行 nls 时,它会询问起始值 - 你知道如何提出这些吗?当我尝试使用起始值时,出现错误:步长因子降低到 minFactor 以下。
    • 对于起始值,您通常可以忽略该消息并使用默认值。但如果它进一步抱怨,可能是因为您试图为您的数据估计太多东西。然后确保设置合理的起始值。尝试减少对 NLS 的要求(更少的组,更少的测试版)。如果您无法自行修复,请提出其他问题,因为这是一个完全不同的问题。记得关闭这个接受答案并投票回答对您有帮助的答案
    猜你喜欢
    • 2017-11-19
    • 2023-03-03
    • 2011-02-01
    • 2019-10-19
    • 2022-01-11
    • 2020-06-27
    • 1970-01-01
    • 2015-05-03
    • 2021-11-02
    相关资源
    最近更新 更多