glm
语法
glm(ds, yColName, xColNames, [family], [link], [tolerance=1e-6], [maxIter=100])
参数
ds 是数据源,通常由 sqlDS 函数生成。
yColName 是字符串,表示数据源中作为因变量的列名。
xColNames 是字符串标量或向量,表示数据源中作为自变量的列名。
family 是字符串标量,表示指数族分布的类型。它的取值可以是guassian, poisson, gamma, inverseGuassian, binomial。
link 是字符串标量,表示link函数的类型。对于不同取值的family, link的默认值如下表所示。
tolerance 是浮点数,表示迭代中止的边界差值。如果相邻两次迭代的对数似然函数值的差值小于tolerance,则停止迭代。默认值为0.000001。
maxIter 是正整数,表示最大的迭代次数。默认值为100。
family参数对link参数、因变量的限制如下:
family的取值 |
link可选值 |
默认的link取值 |
因变量的取值 |
---|---|---|---|
gaussian |
identity, inverse, log |
identity |
DOUBLE类型 |
poisson |
log, sqrt, identity |
log |
非负整数 |
gamma |
inverse, identity, log |
inverse |
大于等于0 |
inverseGaussian |
nverseOfSquare, inverse, identity, log |
inverseOfSquare |
大于等于0 |
binomial |
logit, probit |
logit |
0或1 |
详情
训练广义线性模型。返回结果是一个字典,包含以下key:coefficients, link, tolerance, family, xColNames, tolerance, modelName, residualDeviance, iterations 和 dispersion。其中,coefficients是一张表,包括计算得到的自变量系数值、每个系数的标准误差、t值、p值;modelName为”Generalized Linear Model”;iterations是实际迭代次数;dispersion是模型的规范系数。
例子
下面的例子使用模拟数据训练一个广义线性模型:
$ x1 = rand(100.0, 100)
$ x2 = rand(100.0, 100)
$ b0 = 6
$ b1 = 1
$ b2 = -2
$ err = norm(0, 10, 100)
$ y = b0 + b1 * x1 + b2 * x2 + err
$ t = table(x1, x2, y)
$ model = glm(sqlDS(<select * from t>), `y, `x1`x2, `gaussian, `identity);
$ model;
coefficients->
beta stdError tstat pvalue
-------- -------- ---------- --------
1.027483 0.032631 31.487543 0
-1.99913 0.03517 -56.842186 0
5.260677 2.513633 2.092858 0.038972
link->identity
tolerance->1.0E-6
family->gaussian
xColNames->["x1","x2"]
modelName->Generalized Linear Model
residualDeviance->8873.158697
iterations->5
dispersion->91.475863
把模型用于预测:
$ predict(model, t);
把模型保存到磁盘:
$ saveModel(model, "C:/DolphinDB/Data/GLMModel.txt");
把模型加载到内存中:
$ loadModel("C:/DolphinDB/Data/GLMModel.txt");