目录

GLM基础(三):R和SAS建模对比

数据说明

以下是两家不同company在各时期的案件数量,可使用poisson模型拟合。

claims company time
8 A 2
6 A 4
10 A 6
18 A 8
11 A 10
19 A 12
13 A 14
19 A 16
17 A 18
21 A 20
16 A 22
21 A 24
12 B 2
19 B 4
14 B 6
15 B 8
23 B 10
27 B 12
19 B 14
29 B 16
37 B 18
27 B 20
35 B 22
26 B 24

数据来源:Boland, Philip J. Statistical and probabilistic methods in actuarial science. CRC Press, 2007.

R的做法

输入数据

使用data.frame函数将各列组合成dataframe用以输入glm()函数。

factor指明company为分类变量。

1policy <- data.frame(claims = c(8,6,10,18,11,19,13,19,17,21,16,21,
2                                12,19,14,15,23,27,19,29,37,27,35,26),
3                     company = factor(c(rep("A",12),rep("B",12))),
4                     time = c(rep(seq(2,24,2),2)))

glm()函数

glm()函数指定目标变量~自变量,family指定分布,data指定一个dataframe格式数据。

1lm <- glm(claims ~ company + time, family = poisson, data = policy)
2summary(lm)

使用summary输出结果。

 1## Call:
 2## glm(formula = claims ~ company + time, family = poisson, data = policy)
 3## 
 4## Deviance Residuals: 
 5##     Min       1Q   Median       3Q      Max  
 6## -1.5490  -0.8039  -0.2589   0.6722   1.7024  
 7## 
 8## Coefficients:
 9##             Estimate Std. Error z value Pr(>|z|)    
10## (Intercept) 2.169665   0.126339  17.173  < 2e-16 ***
11## companyB    0.458061   0.095500   4.796 1.61e-06 ***
12## time        0.038313   0.006882   5.567 2.59e-08 ***
13## ---
14## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
15## 
16## (Dispersion parameter for poisson family taken to be 1)
17## 
18##     Null deviance: 75.689  on 23  degrees of freedom
19## Residual deviance: 20.422  on 21  degrees of freedom
20## AIC: 139.63
21## 
22## Number of Fisher Scoring iterations: 4

SAS的做法

输入数据

SAS一般使用外部读入数据,对于手工输入的数据,使用cards

company$指定为字符串变量。

 1/* 创建数据集 */
 2data policy;
 3    input claims company$ time;
 4    cards;
 58 A 2
 66 A 4
 710 A 6
 818 A 8
 911 A 10
1019 A 12
1113 A 14
1219 A 16
1317 A 18
1421 A 20
1516 A 22
1621 A 24
1712 B 2
1819 B 4
1914 B 6
2015 B 8
2123 B 10
2227 B 12
2319 B 14
2429 B 16
2537 B 18
2627 B 20
2735 B 22
2826 B 24
29;
30run;

proc genmod过程

class company;指定了company变量为分类变量,和R以字母升序排列指定base level(例如A)不同,SAS以字母降序为base(例如Z),因此使用(ref="A")指定base来获得和R中相同的模型。

model claims = company time指定目标变量和自变量。

/ dist=poisson link=log;指定了泊松分布和log link function。

1/* 拟合泊松回归模型 */
2proc genmod data=policy;
3    class company(ref="A");
4    model claims = company time / dist=poisson link=log;
5run;

SAS输出网页格式的6张表格作为结果。

Genmod 过程
模型信息
模型信息
数据集 WORK.POLICY
分布 Poisson
关联函数 Log
因变量 claims
观测数
观测数
读取的观测数 24
使用的观测数 24
分类水平信息
分类 水平
company 2 B A
评估拟合优度的准则
准则 自由度 值/自由度
偏差 21 20.4221 0.9725
调整后的偏差 21 20.4221 0.9725
Pearson 卡方 21 20.6958 0.9855
调整后的 Pearson X2 21 20.6958 0.9855
对数似然 932.0033
完全对数似然 -66.8166
AIC(越小越好) 139.6332
AICC(越小越好) 140.8332
BIC(越小越好) 143.1673
收敛状态

算法收敛。

参数估计分析
参数 自由度 估计 标准误差 Wald 95% 置信限 Wald 卡方 Pr > 卡方
Intercept 1 2.1697 0.1263 1.9220 2.4173 294.93
company B 1 0.4581 0.0955 0.2709 0.6452 23.01
company A 0 0.0000 0.0000 0.0000 0.0000 .
time 1 0.0383 0.0069 0.0248 0.0518 31.00 <.0001
Scale 0 1.0000 0.0000 1.0000 1.0000