R语言 手动设置非线性回归系数

nbnkbykc  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(184)

我在工作中运行了一些回归,并被要求将截距和回归系数设置为某些值(目前没有具体的数字,但能够做到这一点是关键)。我在网上看了一下,发现了一些使用偏移量的线性回归的答案(下面的例子取自使用线性回归的一些价格和东西的stackoverflow答案):

price ~ offset(c1*memory) + offset(c2*screen_size) + rep(c0, length(memory)) - 1

当我尝试使用上述方法进行逻辑回归时,我似乎无法更改截距,并且我没有从summary()函数中获得任何内容。因此,我的logit:

## Logistical regression formula
my_logit <-glm(Insolvency ~ profits + assets, data = my_data, family="binomial")

## Summary of logit
summary(my_logit)

当我尝试抵消时:

## Logistical regression formula
my_logit <-glm(Insolvency ~ offset(c1*profits) + offset(c2*assets), data = my_data, family="binomial")

## Summary of logit
summary(my_logit)

如果我把rep(c0 length(Insolvency))-1放进去,那么回归就不工作了。如果我运行上面的方法,只有截距值被汇总出来。
我的问题是,我如何手动设置回归系数和截距到我选择的特定值,并让R吐出总结?我意识到,鉴于R试图优化的东西,如果我设置的值,那么我可能不会得到优化的结果。但这是我被要求做的。
我不能发布合法的数据,因为我可能会失去我的工作,但它看起来像下面的东西,但显然,大得多:

Insolvency     
0             
0             
0             
0             
0             
0             
0             
1

 Lprofits
-23.43471027
-23.39077178
-23.1376606
-22.95771212
-22.88628836
-22.69567881
-22.29604723
-22.07703701

 Lassets
25.68146508
25.7462893
22.72271675
24.3626251
24.39917186
26.66993697
21.91259524
23.80678002
hwamh0ep

hwamh0ep1#

你也可以使用offset()作为截距,它只需要和其他变量一样长。你也可以在公式中使用-1来抑制估计的截距:

my_data <- structure(list(Insolvency = c(0, 0, 0, 0, 0, 0, 0, 1), Lassets = c(25.68146508, 
25.7462893, 22.72271675, 24.3626251, 24.39917186, 26.66993697, 
21.91259524, 23.80678002), Lprofits = c(-23.43471027, -23.39077178, 
-23.1376606, -22.95771212, -22.88628836, -22.69567881, -22.29604723,  -22.07703701)), class = "data.frame", row.names = c(NA, -8L))

c0 <- -1
c1 <- 1
c2 <- 1

my_logit <-glm(Insolvency ~ -1+ 
                  offset(rep(c0, nrow(my_data))) + 
                  offset(c1*Lprofits) + 
                  offset(c2*Lassets), 
               data = my_data, 
               family="binomial")

summary(my_logit)
#> 
#> Call:
#> glm(formula = Insolvency ~ -1 + 
#>               offset(rep(c0, nrow(my_data))) + 
#>               offset(c1 * Lprofits) + 
#>               offset(c2 * Lassets), 
#>     family = "binomial", 
#>     data = my_data)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.4593  -1.7439  -1.3775  -0.6665   0.8870  
#> 
#> No Coefficients
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 17.682  on 8  degrees of freedom
#> Residual deviance: 17.682  on 8  degrees of freedom
#> AIC: 17.682
#> 
#> Number of Fisher Scoring iterations: 0

创建于2023-03-22带有reprex v2.0.2

相关问题