我假设您的意思是 Tofallis (2009)定义的百分比回归。
用他的例子:
Sales <- c(6375,11626,14655,21869,26408,32406,35108,40295,70762,80553,95294,101314,116141,122316,141650,175026,230614,293543)
Expenses <- c(62.5,92.9,178.3,258.4,494.7,1083,1620.6,421.7,509.2,6620.1,3918.6,1595.3,6107.5,4454.1,3163.8,13210.7,1703.8,9528.2)
如果我们应用以销售额作为因变量的普通最小二乘法,我们得到模型 Sales = 43942 + 15.00 R&D,截距和斜率的 p 值分别为 0.03 和 0.0015。
fit1 <- lm(Sales ~ Expenses)
summary(fit1)
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 43941.705 18493.079 2.376 0.03033 *
# Expenses 14.994 3.915 3.830 0.00148 **
如果我们这样做并执行普通最小二乘法,我们会得到模型:Ln(Sales) = 10.341 + 0.000198 R&D,斜率的 p 值为 0.002,截距的 p 值基本上为零。
fit2 <- lm(log(Sales) ~ Expenses)
summary(fit2)
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 1.034e+01 2.535e-01 40.793 < 2e-16 ***
# Expenses 1.982e-04 5.366e-05 3.694 0.00197 **
最后,我们转向本文提出的方法,最小化平方百分比残差。转换回来后,发现所得模型为:销售额 = 8817 + 17.88 R&D,斜率和截距的 p 值分别为 0.002 和 5×10-5。
fit3 <- lm(Sales ~ Expenses, weights = 1/Sales^2)
summary(fit3)
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 8816.553 2421.644 3.641 0.0022 **
# Expenses 17.880 3.236 5.525 4.61e-05 ***
所以,最后,这是加权回归。
为了确认这一点,我们还可以使用数值优化:
resfun <- function(par) {
sum((Sales - par[[1]]*Expenses - par[[2]])^2 / Sales^2)
}
optim(c(10,1000), resfun)
# $par
# [1] 17.87838 8816.44304
optim(c(10,1000), resfun, method="BFGS")
# $par
# [1] 17.97975 8575.71156
(不同的优化器会给出稍微不同的结果。)