- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40266 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12791
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析! `0 f8 d+ a9 }3 B! }. @) Y
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
: V, o0 |* ~! _# O) l* R* f1 D这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: " w& v* {" V7 ^" r7 c* f
行描述性统计分析,各连续型变量之间的相关关系如下:
: J, P8 e3 @7 f, G+ O2 m8 ? 7 _' t+ X) k$ `9 b9 X
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 ( T( u& P+ P9 X, i
' I% _* \9 X$ K
![]()
- }. _3 D6 o# {6 p9 f" l( R% \% o最终模型残差图:
5 i$ V" g4 I" d![]()
# Y9 v' A2 Z& \' w( t1 B通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
8 q) q B' c }5 u3 Z/ `: g属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
$ V+ K l* Y! q! r! T属性变量的具体影响在此处分析略去。* r: G( k# X- V' B+ _- K; T2 F
连续型变量的影响主要为:
6 d2 m, E$ q3 E! x 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
: G: s% b+ p7 g; F 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
# v( d, l/ N0 f) O同时,原本为连续型变量的容积率经过离散化变为属性变量后:$ Y7 A2 W" {0 f4 y9 M @
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;. n' [. ~+ k9 t t* B9 i+ t
容积率与环线之间存在着交互效应。
# w" I: t6 q# }( ]: t2 }rm(list=ls()) #清空当前工作空间0 L/ z6 E$ _+ U' M4 n# T% }! b% @% z; C
setwd("D:/回归分析"); W7 @8 S( X2 o
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a$ a" t7 m9 K, w2 [5 @- u; I9 o
View(a)
' o/ k" D- I- K( ~8 {6 |8 Lattach(a)) E2 B9 O# k, P2 k: d
names(a). R: j$ E/ v1 y5 y% w2 n8 Z7 J) l# m
9 l0 z b+ g9 G
/ r( a9 d l9 _, V& L. l$ g/ |
##描述性统计
+ q7 M$ v3 X! c1 o1 u3 \, _0 L* ?
; w" P+ V4 _7 p( V I
#未做处理的响应变量分布情况+ Q0 D5 M1 N) n9 m( y2 t
par(mfrow=c(1,1))
- Z: q) m6 d0 \) thist(price)/ w( i, q; B2 h3 S$ D
summary(price) #查看响应变量的描述统计量
, q# `0 ~5 K, y5 \. \#连续型变量描述性统计
8 y: ^8 w8 w+ Zwindows(); L7 x) e; D( {; z" i u
pairs(a[,c(6:10)]) #所有连续型变量间的散点图; ]# x& q6 n9 G. f1 Y
par(mfrow=c(2,2))
: s% ]! S0 W" s7 C0 }1 v6 Nplot(rong,price) #每个连续型因变量与响应变量间的散点图
& T& I" z4 I3 y% W. t8 i* d! dplot(lv,price)
8 x e& [& I9 ]4 N3 B, rplot(area,price)
* A8 i. x( n$ Q- o- \plot(ratio,price)
7 H$ H: H5 W9 P+ `# g* P2 v/ vsummary(a[,c(6:10)]) #查看连续型变量的描述统计量3 E! P/ A4 t4 x, e
cor(a[,c(6:10)]) #查看连续型变量的相关系数% ?$ b# i n) h$ n% |1 `
#属性变量描述性统计6 f* w, M7 l1 k, ~5 m1 o8 _
windows()
+ _, l0 W u8 [- t2 jpar(mfrow=c(2,3))
& }, ` l/ O/ |' j" H+ s" T. \boxplot(price~dis) #每个属性变量关于响应变量的箱型图# f2 Q) H8 M8 \$ c5 m( E
boxplot(price~wuye) ; g! U) }3 Q' S; c
boxplot(price~fitment) 3 r' h* K' Q+ z \
boxplot(price~ring)
* o2 O; [8 V# y- U' `9 W4 w, Aboxplot(price~contype)1 v, X, ?% t) M7 }) W
& G) R6 N1 ?) t/ x& T$ z- Q- L
- N! v. b* G% r' Q; C: ^" k: T" [8 {
+ w _7 z" f/ U3 a! K7 m
! _- O3 ~( ^% I+ Q) J7 g" e##模型建立8 v3 W0 o: s# V* v
: E5 C$ X- o' u& g7 R
6 x0 z D& Q; ~+ U( Y- c#在方差分析模型基础上加入连续型变量
# C& d% }9 D( N8 B" z3 Qlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)2 b( _( w9 _1 I
anova(lm1) #方差分析
. g7 b; e3 X9 D A3 x# nsummary(lm1) #模型参数估计等详细结果 w" T2 e. p4 `! }
windows()
. C) d9 ~4 N% L) \# v B, qpar(mfrow=c(2,2))
& d d& z/ l( y+ c M8 n1 ?2 Wplot(lm1,which=c(1:4)) #回归诊断做残差图 }2 V# @8 L$ B1 S
4 e* o: k( V; e- R$ c/ I* m9 t( C2 H$ ?2 m2 {* Y! P) t& r- ~
, Q9 h+ L$ w4 O, R1 e5 l
2 c t+ O8 o5 v2 T##变量处理
& d4 E1 w2 [' T0 P) v m- P
3 _7 q [. p$ K' J( d" i- ~/ X$ Q d8 u: J* p$ | a2 l
###对不显著的变量采用分组的方式希望能达到显著的效果
' O' K; w$ L* q$ n- I/ k4 ~- D##对容积率的处理 ?9 Y+ \( M* Z6 A8 `" @
windows()
8 Q: w# ?! P Dn = 48 q4 A& R* ?8 P* g
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
5 L/ `5 b& m' ]" A4 e) s2 Ltable(ceiling(rong/n)) #容积率各分组下的样本数
& ]% o4 \# w p+ sronggrp=1*(rong>n) #进行二分类3 G8 h; I- T6 W
#ronggrp=ceiling(rong/n)
% N3 d2 [- V% G$ I1 b/ g) `. b7 itable(ceiling(ronggrp)) #容积率二分类下的样本数2 E) t* M5 T' I$ w6 A
windows()
7 `( S$ L' O+ L, j# q" t, xboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
0 K1 M' Y+ X2 Fwindows()
; P8 K% r* O9 spar(mfrow=c(1,2))
t, u6 h6 x4 n3 Q& |% pboxplot(rong~ring) #容积率与环线箱型图
5 O% q7 w: i- y- e& @: {, Iboxplot(price~ring) #房价与环线箱型图 8 U0 [2 p; ]- L" p9 J' i U
#加入容积率分组和容积率分组*所在环线交互因子的模型
- Y2 t: F" E) a4 l1 }' hlm2=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) V# U; D6 e0 f, W8 m
anova(lm2) #方差分析
7 {/ S$ y' W0 ?- l) _: Q" V+ |, Esummary(lm2) #模型参数估计等详细结果. x- {" K/ G$ X* M) X5 U, L
windows()0 _. Q3 _7 c7 |# I1 J$ [
par(mfrow=c(2,2))) ~/ b* p: c3 J. O$ c8 v2 l
plot(lm1,which=c(1:4)) #回归诊断3 e p( f0 B. E, C% J4 d O& E
7 U) i8 p# w+ ~$ m. ^( S- Y; ~! O; b N) G
##对小区面积的处理
) O% X' P8 A k( @, M$ Hsummary(area)
; Q: ^$ d+ C; H' l4 c' vplot(area,price)
/ o+ t% q6 e+ Wwindows()' b# J# p8 m7 D' G& U
n = 150000
% T) X) \0 h0 }6 X6 d& w1 Y+ M/ [boxplot(price~ceiling(area/n)) * a1 C) ], q) P* S3 _/ N. k
table(ceiling(area/n)) 5 n; [8 O% ]7 t! X
areagrp=1*(area>n)
" W: o4 [! a. f% i. j) s3 ^4 ?table(ceiling(areagrp))6 l/ t+ w5 j; Z1 R8 g
boxplot(price~ceiling(areagrp))5 \5 Y, o$ {% E! l6 d7 \
#加入小区面积分组的模型
: T, c3 f1 [0 O5 |, V7 Y( H& v3 |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)( ?. F- S5 P+ m5 x8 W
anova(lm3) #方差分析
; _( f% k- ?8 X8 d# k; @6 B. Nsummary(lm3) #模型参数估计等详细结果
* g0 x1 Y, k9 g- o; g* q# [windows()
1 L3 w2 ]) w0 {9 o, z% Mpar(mfrow=c(2,2))4 a0 ?6 W4 c2 _# z8 f
plot(lm3,which=c(1:4)) #回归诊断( \$ r( l- b! w2 Y, G# ^8 v
" _5 Z- {4 N) T' `- {7 J
' l* d! R- c2 N4 B+ \##变量选择 p1 u; @+ Q' U9 R! K! B
9 m! X6 B+ F- l* ]( s, Q4 N G3 H
8 e5 N, n3 S& H3 d
##AIC准则下的变量选择- J+ C( @" K* X- F" ~8 z
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic5 w! L, ?9 K% B8 f7 j
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节$ M2 \; R6 o6 {1 }5 Y9 U
##BIC准则下的变量选择7 J' L1 P5 y6 \- A4 S% A- E- A2 y
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic J* E$ s4 T1 v, `8 S2 D
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
5 m* ?' T' n* Y5 }. y" b2 e- c
% M7 Q+ c% q7 v
5 H: a9 ~: U7 N0 Y#选用AIC准则下的模型进行回归诊断
& U" a. B* s! {2 O4 d' R. ]) cwindows()( `* j" l2 J9 N# g* |1 B
par(mfrow=c(2,2))
3 R7 b" E3 F) p, gplot(lm4.aic,which=c(1:4))
5 G* A- @# a9 q# ] s+ k) P& F& Q2 g# Z2 f3 S+ k) d
7 O7 ~" o9 ^! h" Z' t$ [: I! g; t, F/ p6 b
4 q/ f) r; Z8 t2 {8 r' _2 n##数据变换* Z% e) F4 w+ A3 w* ~7 _( p- ^
! o, ^9 ~$ ]; h. A& {4 y: S
2 v! a+ {, a1 j) v/ `: W6 E#box-cox变换
. J9 A: T8 O9 z; zlibrary(MASS)
* A1 J1 k* V9 s, p, H7 S* V& v) @b=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))
8 M$ w" _. S9 [# e- J. GI=which(b$y==max(b$y)) #定位似然函数最大的位置
' }4 Q3 c* E8 n' O2 E) l xlambda = b$x[I] #精确的λ值
' e+ d& a* w: y5 Z8 G3 q3 D- y#λ接近于0,为模型简洁性,可以直接进行对数变换 K6 ]' v7 z1 p& a2 ]8 p d: ]
logprice <- log(price)& {1 W* U7 s" L1 @
hist(logprice)$ e g& M: m1 l
* x( `: K8 `' \# o6 N
e4 @ M$ u' }% L2 D Z
##最终模型与诊断& C$ Q- G+ K/ _5 Z3 ^/ d9 @( n
. M8 O4 E* t1 f( `
* Q- k" t) a- f# H; Flm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
# r2 {! B) j) \( u! Hwindows()1 ]6 l) ]5 w- J1 _
par(mfrow=c(2,2))
7 g% i3 u9 W9 h E9 g" b6 E3 nplot(lm6,which=c(1:4)) \! `( j+ q' k! ?) b
anova(lm6)
7 n2 Q3 T" F: b* i/ N F7 Msummary(lm6)
; `% o% M; ]. w, k' N) M! }
' v. Z5 k6 R* A9 J. Q0 K7 D& Z; C) t2 Z1 p! p
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560& v4 P, Z3 V6 O' u; d
& I0 X: b8 T/ [7 W& V
! q4 ?# b4 u# E2 n) c5 J3 o
2 J% A) U! W4 b9 @+ [# j+ _) z, Q" |. M |% C
|
zan
|