我在使用 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)
总结(hotdogNLS)
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
我如何包括季节性假人? 谢谢!
我不认为像在
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
您可以使用
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
@cmbarbu 手动设置假人的答案应该可行,但这可以使用
nlme::gnls()
和 params
参数更容易地完成:
nls(lsts ~ beta1/(1+exp(beta2+beta3*t)),
start = list(beta1=2500,beta2=0.5,beta3=-0.5),
params = beta1 + beta2 + beta3 ~ season
)
(详见
?nlme::gnls
,如何为不同的非线性参数指定不同的线性子模型等)
有谁知道如何在此非线性回归中包含年份虚拟变量?
NLLS_1 <- nls(log(tobinsq) ~ log(a) + log(1 + bRD_STOCK_TA + cGREEN_STOCK_RD + dNONGREEN_STOCK_RD + eGREEN_CIT_STOCK_PA + f*NONGREEN_CIT_STOCK_PA), data = FINAL_US, start = list(a = a1, b = b1, c = c1, d = d1, e = e1, f = f1))
我使用合并的 OLS 确定了起始值 (a-f)。到目前为止一切正常,但我现在必须包括年份假人来捕捉时间效应......我真的很感激任何帮助!