选择最大的 hθ(x)十分好理解:在类别选择问题中,不论要选的类别是什么,每一个类别对做选择的经济个体来说都有或多或少的效用(没有效用的类别当然不会被考虑) ,一个类别的脱颖而出必然是因为该类别能产生出最高的效用。 我们将多项logit模型的数学表述叙述如下:
假定对于第i个观测,因变量Yi有M个取值:1,2,…,M,自变量为Xi,则多项logit模型为:
与logistic回归的似然估计类似,我们可以很容易写出多项logit的对数似然函数:
多项 Logit模型虽然好用,但从上面的叙述可以看出,多项 Logit 模型最大的限制在于各个类别必须是对
等的,因此在可供选择的类别中,不可有主要类别和次要类别混杂在一起的情形。例如在研究旅游交通工具的
选择时,可将交通工具的类别粗分为航空、火车、公用汽车、自用汽车四大类,但若将航空类别再依三家航空
公司细分出三类而得到总共六个类别,则多项 Logit 模型就不适用,因为航空、火车、公用汽车、自用汽车均
属同一等级的主要类别,而航空公司的区别则很明显的是较次要的类别,不应该混杂在一起。在这个例子中,
主要类别和次要类别很容易分辨,但在其他的研究中可能就不是那么容易,若不慎将不同层级的类别混在一起
,则由多项 Logit 模型所得到的实证结果就会有误差。
对于分类模型,我们还会遇到被解释变量中有分类变量的情形。对于连续变量解释离散变量,且被解释的离散变量是有顺序的(这个是和多项logit最大的区别)的情形,我们就需要考虑到order logit模型。 其数学模型叙述如下:
其中,F(.)表示累积分布函数,当F表示正态分布的分布函数时,对应的是order probit;F表示
logistic分布时,变对应order logit。
与logistic分布类似,我们可以很容易写出其对数似然函数:
四、dummy variable
在logistic回归中,经常会遇到解释变量为分类变量的情形,比如收入:高、中、低;地域:北京、上海
、广州等。这里对分类变量而言就涉及一个问题:要不要将分类变量设置dummy variable?
这个问题的答案在线性模型中很显然,必须要这么做!!!如果我们不设置哑变量,而是单纯地赋值:北
京=1,上海=2,广州=3,即我们将自变量视作连续性的数值变量,但这仅仅是一个代码而己,并不意味着地域间
存在大小次序的关系,即并非代表被解释变量(响应变量)会按此顺序线性增加或减少。即使是有序多分类变量,
如家庭收入分为高、中、低三档,各类别间的差距也是无法准确衡量的,按编码数值来分析实际上就是强行规定
为等距,这显然可能引起更大的误差。
但是在logistic回归中,由于logit(p)变化的特殊性,在解释定序变量时,为了减少自由度(即解释变量个数),我们常常将定序变量(如家庭收入分为高、中、低)视为连续的数值变量,而且经济解释可以是XX每提高一个档次,相应的概率会提高expression(delta(XX))(expression的表达式还是很复杂的,不打了)。当然减少变量个数是以牺牲预测精度为代价的。毕竟数据处理是一门艺术而非一门技术,如何取舍还得具体问题具体分析。当然,非定序的分类变量是万万不可将其视为数值变量的。 五、广义线性模型的R实现
R语言提供了广义线性模型的拟合函数glm(),其调用格式如下: glm(formula, family = gaussian, data,weights, subset, na.action, start = NULL, etastart, mustart, offset, control= list(...), model = TRUE, method = \ x =FALSE, y = TRUE, contrasts = NULL, ...)
参数说明:
Formula:回归形式,与lm()函数的formula参数用法一致
Family:设置广义线性模型连接函数的典则分布族,glm()提供正态、指数、gamma、逆高斯、Poisson、二项分
布。我们的logistic回归使用的是二项分布族binomial。Binomial族默认连接函数为logit,可设置为probit。 Data:数据集
鸢尾花例子使用的R代码:
logit.fit <- glm(Species~Petal.Width+Petal.Length, family = binomial(link = 'logit'), data = iris[51:150,])
logit.predictions <- ifelse(predict(logit.fit) > 0,'virginica', 'versicolor')
table(iris[51:150,5],logit.predictions)
probit.fit <- glm(Species~Petal.Width+Petal.Length, family = quasibinomial(link = 'probit'), data = iris[51:150,])
probit.predictions <- ifelse(predict(probit.fit) >0,'virginica', 'versicolor')
table(iris[51:150,5],probit.predictions)
程序包mlogit提供了多项logit的模型拟合函数:
相关推荐: