- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40325 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12809
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析+ @$ l- z( P9 g$ n' N
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
- Y) M& j4 ]+ }+ Z这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: 5 u- z! x- c3 D+ D3 ^
行描述性统计分析,各连续型变量之间的相关关系如下:
+ P$ r4 P( F8 J# \: y7 h/ s; M . x- [# H! _# |# G6 o8 ]# K
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 " S7 W) L A# P0 j
4 f$ j% c8 Y2 ]: X
* C7 Q4 T' R% {! i L" m+ R
最终模型残差图:
$ s; Z$ u+ c' [$ n' i- X/ z 5 }: N# z& O" `& Q+ U7 L( ]+ q
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:- B7 j; J% B* p, D& Y3 o
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比9 W; b$ ~* x- ], t, O
属性变量的具体影响在此处分析略去。( ]2 f5 S' F& {7 n. ?
连续型变量的影响主要为:
9 ]6 T, U% H: ~$ d L 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
# v$ Q0 h# ~ D0 Z; P( `& \9 T 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
) y6 t4 d8 I% Q同时,原本为连续型变量的容积率经过离散化变为属性变量后:
- h' y. W& H- j7 f8 R* ` 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
9 N5 p; R: t9 n$ a* |- I2 M$ r 容积率与环线之间存在着交互效应。
. q" C- l$ }" q+ ~" N4 n) e4 Srm(list=ls()) #清空当前工作空间
& ~7 a6 `8 j7 R3 C& @6 M Vsetwd("D:/回归分析")3 h! t3 ~4 E: t* K- I, u3 U3 x5 \
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a T; C$ n2 o8 [1 ~* m/ O1 ?
View(a) B% |9 G1 t {
attach(a)) u, P/ |9 @1 Q! V+ `1 s9 |/ g' |; i
names(a)
6 z( s9 S) {4 l g$ v/ y
& I) a' `# Q6 C5 W6 M1 j& o( \3 d7 _) C( u
##描述性统计
$ q% R1 X6 i s4 V! Y& x7 J
5 b9 z, W) U, V
/ c% Y5 @1 @; N- Q5 Z% _- \% q#未做处理的响应变量分布情况, J) K0 n$ U) f) k {7 k
par(mfrow=c(1,1))4 a6 W5 {7 N `" b
hist(price)
0 v) d9 z5 r: b+ _ Y K+ `summary(price) #查看响应变量的描述统计量
' \# L7 P7 j) N( D( n3 Y#连续型变量描述性统计
$ }" U, G1 L0 S7 [! L3 y& O, r( `& z6 Jwindows()
3 B9 q* ~; J J0 G& E/ S+ F1 Wpairs(a[,c(6:10)]) #所有连续型变量间的散点图: A; E, u% r1 P& s) t4 g' d* W
par(mfrow=c(2,2))
/ H9 \ u" K& wplot(rong,price) #每个连续型因变量与响应变量间的散点图
4 M( A3 y8 K: N# i# Oplot(lv,price)
8 s9 y% k7 n8 A! H9 t6 Nplot(area,price)
' e% F! v4 F8 l0 i6 uplot(ratio,price)$ V4 U9 d3 Y8 J( x6 ]' k
summary(a[,c(6:10)]) #查看连续型变量的描述统计量( c9 O: H: i9 i' J; s
cor(a[,c(6:10)]) #查看连续型变量的相关系数% f5 o3 n& K! h% D8 p
#属性变量描述性统计
7 D' z' G" u/ ?( S9 gwindows()
3 G' d" g" S4 a0 ` B4 H# npar(mfrow=c(2,3))
2 G8 [0 {. F1 l- p7 Rboxplot(price~dis) #每个属性变量关于响应变量的箱型图# ?' P( o9 V* ^
boxplot(price~wuye) 6 H5 y* j8 h& ?$ [& _7 ^2 b
boxplot(price~fitment)
+ f( \2 T, m# b7 ]boxplot(price~ring) , l! P! L# F0 r* {% y
boxplot(price~contype)
2 D: q: _# k+ ^7 _6 u& `! N- Y! N
+ p9 i8 S7 X2 b, ?) b8 S, @) Z1 l8 a' h6 W( ?0 o) ^- r: V7 v
( v5 ?: E$ E# K- t4 S; y##模型建立
2 b1 q& v: f' _9 x) R8 A
* q* J( w7 o# K4 I2 m A
3 g6 R1 q' g0 ?#在方差分析模型基础上加入连续型变量
$ }1 {+ _8 A: j5 blm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
4 z/ V, i* L, j+ y( e4 eanova(lm1) #方差分析
7 l( u# A5 U) W% k3 W/ i- Tsummary(lm1) #模型参数估计等详细结果
7 J9 i* k! ~1 t/ x0 r: }2 ewindows()8 F/ P% ~: p; V/ [2 b
par(mfrow=c(2,2))
' M. b3 @8 J: K9 b5 N9 f$ Iplot(lm1,which=c(1:4)) #回归诊断做残差图
* q# s0 o6 i( d6 W& K) m9 K/ a7 p) Z5 @1 `$ u. S
2 C- v5 j6 Q1 ^( X; q9 j! \
" J6 E6 u$ L+ V% l: `
6 u' r6 a1 r* ^
##变量处理
) C' c# L: o8 c, q, j
# @" n# G) p8 ~- J- ^9 N. v
, K R1 \5 o, o###对不显著的变量采用分组的方式希望能达到显著的效果, [4 V0 I; d1 L8 S+ y
##对容积率的处理7 P# r* o7 k$ D5 |
windows()' o; B, t5 o# u0 z4 H& ]+ C. F; P
n = 4/ z' m" F2 a9 e# W
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
: o; u8 f! ]; q; S) G$ I% T! Vtable(ceiling(rong/n)) #容积率各分组下的样本数% R2 o+ F/ U r' U3 c( U2 k4 f
ronggrp=1*(rong>n) #进行二分类
& o' b9 w7 z; c1 ~#ronggrp=ceiling(rong/n) " Y. w. w2 h7 j* E
table(ceiling(ronggrp)) #容积率二分类下的样本数# T+ i; j! a3 P- b! d
windows()& a% U- O1 |; ]+ [8 ^3 U1 {- q
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图7 K/ W3 m3 R. u3 B1 Z
windows()
/ x+ g6 a8 a; x. u; p u& I) k% epar(mfrow=c(1,2))/ E8 T: X0 X! j
boxplot(rong~ring) #容积率与环线箱型图
4 u# L3 P! Z. o' W( C- N I: }boxplot(price~ring) #房价与环线箱型图 , Y6 I! i* S# Z
#加入容积率分组和容积率分组*所在环线交互因子的模型/ w' m" O% g7 R/ J' I: X8 J
lm2=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+area+ratio)
; s5 S; J* e/ O4 O# C8 \& X5 w7 Kanova(lm2) #方差分析
3 Q9 s, j6 n8 N0 ~; O0 [0 h# ?! B1 \$ Esummary(lm2) #模型参数估计等详细结果9 l3 Q( |+ a) o- T( q
windows()
! Y# {( e5 [, @# X" mpar(mfrow=c(2,2))9 q4 ^# `+ i8 |( P. F$ y% A9 E
plot(lm1,which=c(1:4)) #回归诊断
7 Y5 |" R5 J. N! [* ~& Y4 Z& W: {) W+ I% V: y5 f
/ q# \; w' K9 J" i" t' Q5 V" m4 _##对小区面积的处理8 R s+ s! c' y/ M: i* G z, S
summary(area)
/ X: Y' x- m0 \6 R/ S6 h' ~plot(area,price). t/ Q2 ~" [# A+ Z
windows()
" }( F; Z: i5 {% d8 H3 D$ zn = 150000$ s% ?' H, m6 C! t
boxplot(price~ceiling(area/n))
+ C8 o9 ?$ J E8 D( Btable(ceiling(area/n))
7 m5 `' k: G$ b4 t+ ], aareagrp=1*(area>n)
1 Z. k6 ?1 H2 F/ T5 s! o# a. P2 Ltable(ceiling(areagrp))
7 c+ m( v0 C/ C3 H$ ]1 g5 cboxplot(price~ceiling(areagrp)). u1 Y1 C* F- e+ Y2 l7 S
#加入小区面积分组的模型" J/ A' s. ]1 {$ h# G% A3 t% U" T
lm3=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+as.factor(areagrp)+ratio)
' P4 c" T1 }; K8 Ianova(lm3) #方差分析+ ^5 k6 ]5 t0 Q' P z0 T5 C
summary(lm3) #模型参数估计等详细结果1 Y# t3 a" j: _) K7 r5 x
windows()% l* I! ?1 s5 Q3 P! m
par(mfrow=c(2,2))! B x ?# f& V _% i, N
plot(lm3,which=c(1:4)) #回归诊断& n: J1 ]. V& v; Z* ~, s
! a8 _+ i# |# G: N/ k- J8 h4 o4 k6 d' w* E9 }4 @/ J. S% c% v
##变量选择9 G7 Y. q9 d+ ~% ^ C
" p( q% x' ~8 N+ K& k }, D' J0 C
. W: z2 q& |0 R+ U##AIC准则下的变量选择
) d% g% u$ T( v+ \# f! S' slm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
$ F, \/ z6 R) E5 X+ a( ^summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节3 b1 T P% f9 }; d
##BIC准则下的变量选择
, x! l: C1 \, }8 k! c X B7 flm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic7 e( B C+ ~4 U& L( ~ Y5 c3 k- H
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
) u+ h& t2 }6 N6 @. l/ ^2 q/ z6 v( b4 j7 Z, \4 _8 l" N
/ C; ^: G. N _9 p
#选用AIC准则下的模型进行回归诊断/ s0 h- I# t# [5 j$ I9 b% l
windows()
( y' P- X* f1 `6 hpar(mfrow=c(2,2))
# X; s L, v4 L( `% t# Cplot(lm4.aic,which=c(1:4))
7 w; ~ J: V5 K$ Y# _. Y: y) Y/ q; h1 n5 o- v5 x8 y Q
* ?! u+ `5 Z* d" J3 Y" ^; r7 {- X9 [: a. W- v
5 h/ D# f& u( O3 }3 L( d##数据变换
. R' D: Y5 @/ I; b- o7 w- w' x! [: R0 a d$ r, d
Z2 ^3 y- s5 O) d
#box-cox变换
% |- g. j7 D$ Y g4 l: slibrary(MASS)
/ p8 V& O# Z! g# |( M! H$ {2 ?' xb=boxcox(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio, data=a,lambda=seq(-3, 3, by=0.1))6 |' L1 J( Z' o7 l1 ~! }
I=which(b$y==max(b$y)) #定位似然函数最大的位置
: p- V! \ m( ]% {+ } Elambda = b$x[I] #精确的λ值
3 h+ W( f+ [5 G$ c! G) v4 m#λ接近于0,为模型简洁性,可以直接进行对数变换
- O6 x+ k M- _. P% Qlogprice <- log(price)0 H8 C1 k) `" w. U" O( F. }& D
hist(logprice)
, w; I9 n* \. G' P( z/ e& ~1 g% }. C
8 j/ [) E6 |: T( G7 A9 y! E. ]
##最终模型与诊断
. n) u8 y# G" H" a) l
* w( ~* K. r. r. q( `3 y1 A5 Q7 N5 X$ |; m2 u _+ b, g1 O' B$ n
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
2 x+ v$ }1 f0 g8 F/ lwindows()' A, d8 @% I# u
par(mfrow=c(2,2))7 U- V1 v% p% o8 S' q- R4 X( b
plot(lm6,which=c(1:4))- u4 X' e; l# P: A3 E" m+ p
anova(lm6)
. ]5 `: k& P' K. z/ @% ~summary(lm6) B& M" n8 l4 J0 i+ F
3 E2 A1 G+ f: o1 A6 Q
; K) ~# Q4 @ N, j2 O
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
) a( N6 S8 _2 H3 R7 ~& k4 U
; e5 z! ?4 u1 R$ a0 |' G& u6 A! M8 R* O7 @* z/ ?" l0 e+ f
- K: A. ~8 A4 h: p. |' O1 L$ A9 V
|
zan
|