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 |