- 在线时间
- 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语言】回归分析案例:北京市商品房价格影响因素分析
; g, Q; V/ v. N9 J4 J: k这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
6 F! H2 g4 G* j: z, o这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
# S6 O4 u8 X5 G/ v$ b行描述性统计分析,各连续型变量之间的相关关系如下:
$ \ C7 [$ \- o/ [- H8 t& r/ U% X$ D 9 U# V( P- v3 P$ s; `
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
. k% Y# C, [+ I+ m![]()
$ B! h' \2 o" ]- v' [![]()
% G& y6 H% V- w$ a最终模型残差图:
w- D) b) Q+ R( _% E![]()
5 q' v2 \! |) y% ~: O通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:8 u) z7 R" q' C: A$ j$ `9 Z% S" @
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
4 }% Z: X1 E8 I2 i属性变量的具体影响在此处分析略去。
) h/ u8 q. l' q. c |7 H连续型变量的影响主要为:
3 l+ |. S) Y. o1 s 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;3 f, T# t* I+ T) G C
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
6 D9 R: p: C& }7 e+ _4 c/ V同时,原本为连续型变量的容积率经过离散化变为属性变量后:
/ p# q4 m1 A7 L3 K9 H, N' H; ` 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;3 e0 [+ `, C* D
容积率与环线之间存在着交互效应。
+ Z, k6 i! Y7 u% e) p: [rm(list=ls()) #清空当前工作空间! c% Y: O9 L6 G/ H
setwd("D:/回归分析")8 I" l8 X3 p1 A5 d# E4 p
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
6 R7 N9 ^ D( ^View(a)# a7 U; o6 K6 g& S3 c7 f
attach(a)
+ a* w3 \( t+ K1 U; K, r& Qnames(a)" d6 l0 R* F* Y8 q/ Y' t: [, A3 N
3 L' i6 X0 A& q2 a" r
5 m: Y0 v# P$ k+ f##描述性统计. C- l/ u2 `9 [
: Z7 k( I+ B1 Y9 {. O
3 Z* d# Q+ j3 o
#未做处理的响应变量分布情况
% V5 a. z: w1 {) ^# n+ Z& |par(mfrow=c(1,1))
* L) R3 d B. Z, Fhist(price)/ R8 ]( E, b# {: j$ d" z2 Q
summary(price) #查看响应变量的描述统计量
7 W( ~% o3 J& ^ k. X9 Y4 B% f#连续型变量描述性统计7 e* @$ ^% f1 ?+ m3 g" w
windows(), }5 Y9 R3 S c* }. o
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
6 V3 g3 R4 T y/ wpar(mfrow=c(2,2))
* m9 i0 H% Y9 ]plot(rong,price) #每个连续型因变量与响应变量间的散点图& x, m! O, A/ b" P7 x' U
plot(lv,price)
# M$ t4 Q5 z5 z3 G3 x+ h; B% S; gplot(area,price)* {; T% i& W% Q' b7 y% G1 e1 x0 M8 ]
plot(ratio,price) p/ S8 e! j* H5 n: ?0 _
summary(a[,c(6:10)]) #查看连续型变量的描述统计量
2 l7 V9 g% s# d9 T- n) j' @cor(a[,c(6:10)]) #查看连续型变量的相关系数5 X' R, L4 ]9 b c# Q4 k
#属性变量描述性统计
+ c4 c0 d5 F' [% B7 E# {! Wwindows()) T4 U! _, h# r+ Q
par(mfrow=c(2,3)) 1 b f% H+ h+ u. D: w& }% l, G
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
. i) W$ y( E, s" E9 c2 P8 V1 M4 H6 ]boxplot(price~wuye) % m% m, I# f, L) F$ }
boxplot(price~fitment) $ |5 M! M. V% w, r
boxplot(price~ring)
; Z2 l) n" v/ _& h5 Iboxplot(price~contype)
& E9 g7 l, b; R5 J( V
" O0 z+ g& I* U( _( C: S. x. D
1 @$ C: y- s. K: k/ h8 U
* v8 v! ~0 z8 D; W; n$ n; ~& R3 X Y+ g- L) @' \; A( Q
##模型建立
& d3 N C Q! G" Z; R3 w% |0 U
3 B. I4 O/ H3 Y. {, W; {' O2 r) q3 T. ^3 c: Q" |
#在方差分析模型基础上加入连续型变量5 B$ p0 W( M6 u4 a5 U; |" f8 I
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
0 t. d5 k0 A l- canova(lm1) #方差分析
. u0 O* Z6 _4 L6 b8 v, C- c) Nsummary(lm1) #模型参数估计等详细结果
. D* t) O# ?! X0 \windows()8 S8 l% n- s- [! ^. V0 D R4 [6 p
par(mfrow=c(2,2)). x3 t, I3 i5 U" c
plot(lm1,which=c(1:4)) #回归诊断做残差图- S) j2 o; C2 G9 K. U/ H/ o' N
' d% C9 V/ y+ S6 j9 |0 n3 p
$ V/ o, j' m, D
( Q4 _* j" n8 o
0 Y. M, o4 ^8 Q' ~0 M0 d( w& T% z##变量处理- D O8 F6 y' \
% W; @& V, H! J% B; K
( l: U7 O) ]+ Q: o3 U `- z9 }###对不显著的变量采用分组的方式希望能达到显著的效果4 U3 L+ e, o3 C4 B% C& L q" Y
##对容积率的处理
8 n; f3 C+ m# J% v7 Xwindows(). @0 N! W7 Z' }
n = 4
/ R6 f- ]. z" M* |/ f! Eboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 4 B! v% l5 u4 h
table(ceiling(rong/n)) #容积率各分组下的样本数# A3 F4 g' Y! b: B
ronggrp=1*(rong>n) #进行二分类" `" |, K9 a/ L m, p8 V. \! v/ z8 ]
#ronggrp=ceiling(rong/n) , _, y/ J. b' O3 o/ P- k
table(ceiling(ronggrp)) #容积率二分类下的样本数
8 h! H! ?6 t7 t9 h0 y! Cwindows(), D, ^0 e) I8 {4 A5 }
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
. q" @6 ?) D( f, f2 K/ n4 Gwindows()
5 @. e) \! q2 W; hpar(mfrow=c(1,2)). p3 e( F' B+ I0 k" `
boxplot(rong~ring) #容积率与环线箱型图5 l/ X/ _( S* \3 B' S+ M' z
boxplot(price~ring) #房价与环线箱型图 & n( g- k5 Z* t3 n: u" i
#加入容积率分组和容积率分组*所在环线交互因子的模型
6 Y$ `+ H0 Q8 Mlm2=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). [- w( O" b- m( L0 L9 V/ Q
anova(lm2) #方差分析
d0 }7 s# g0 hsummary(lm2) #模型参数估计等详细结果# F7 M: i5 ]) ~& J# N
windows()& Z3 I5 o8 b. v
par(mfrow=c(2,2))+ m# u0 s0 r. C7 M: {) i/ _8 D
plot(lm1,which=c(1:4)) #回归诊断- O, u# H5 p$ \8 k
& z* |2 e4 z7 [1 [" y
- l& ^7 T7 Z" g' X! `$ A5 w* b! l
##对小区面积的处理
5 P2 [' J& m+ N3 z6 B; y3 csummary(area)
' S/ U3 D X% P% p0 b2 G0 |* ?+ Lplot(area,price), j" }! I& h/ x' l. e# }' f
windows()1 }# w4 @9 e0 \
n = 1500001 s- x$ f. s* _7 `' I5 o
boxplot(price~ceiling(area/n))
% W# c$ e; K) \" q! k" E, Etable(ceiling(area/n))
Q& [4 ?2 L; q" b7 _8 Z( B4 @areagrp=1*(area>n)4 z) H" i+ k* x: s1 J9 n+ O
table(ceiling(areagrp))
. a5 Z2 J6 j* J2 V/ _% F; T8 Kboxplot(price~ceiling(areagrp)): `5 D. O& p! i7 N) z3 S
#加入小区面积分组的模型& }( n' K U2 `$ @& K7 P$ @
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)1 O4 ~2 ?2 M0 b4 e( p0 x4 n7 c, i
anova(lm3) #方差分析5 s4 ^: S# D, N$ Y" S* p1 f1 ~
summary(lm3) #模型参数估计等详细结果
2 Q' E5 k6 K \9 [windows()
q2 _8 g5 F+ e; f4 q+ ypar(mfrow=c(2,2))
/ p' n: m0 M3 F% {$ g* {plot(lm3,which=c(1:4)) #回归诊断) X E l4 l( w# e4 P6 ?
: m0 k8 \, D* }" q0 w2 n
b7 b" x! \1 n* n5 E& ?##变量选择' V5 U# E* b& i/ K
/ C, ?4 D% C# I: Q& n* K
a; E5 l% l) {' F7 u- M##AIC准则下的变量选择
& ]: p! ~2 s6 |! \" E4 u5 ilm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
5 s4 J& c3 F& [ V ksummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节2 o2 |8 A3 J' A. \. H; @8 G9 B
##BIC准则下的变量选择
1 s8 L T8 g! o- `+ ilm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
: f8 f* S- A- W* u& isummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
: O: t/ U0 R% z( `" H, X+ |2 f9 n, W. C3 K/ @) e4 `8 [
6 A; {" l. x# S# L. ` H' s#选用AIC准则下的模型进行回归诊断' e3 O/ u+ _- i8 V* i
windows()
3 S! [0 {7 [, o+ \4 [par(mfrow=c(2,2))
* x4 v4 b6 M2 O' u6 k. G/ vplot(lm4.aic,which=c(1:4)) . B1 n( `* y* q2 Q# H f( `
; Y) J: T& a4 O3 r( \
, m" i7 Q F* y5 |1 t% i* L0 z7 k
9 Y0 u+ w# \* b: [% H2 {# }
; a# d% S Z2 _2 M9 L8 K##数据变换( \0 n* Q' T7 X
1 H% ]+ k. o/ b! U3 H% ?" ?
) I8 e( w- h$ k/ d/ p4 \#box-cox变换
: Q- d/ J& p9 J5 h4 j- q e5 \5 ylibrary(MASS)
7 h7 H* ]0 t' j5 j: Kb=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))
) }3 a4 [9 J2 x- Y% D- _I=which(b$y==max(b$y)) #定位似然函数最大的位置
& ^' q$ j' I$ Y: Ulambda = b$x[I] #精确的λ值$ |0 a8 ~1 \4 H
#λ接近于0,为模型简洁性,可以直接进行对数变换( z( v# s: s. Z. F
logprice <- log(price)" u$ M& g( I6 o$ c+ u, b$ @
hist(logprice)
2 i1 Z* c i& Z/ ]+ ~+ U1 i) ?2 s
6 n% n( D1 z) @% p" ?& `
##最终模型与诊断
$ t, y, @) U- x+ f- T X8 f1 M |3 E9 p* G9 i" Q5 `
+ O0 m2 i6 ?! a# r' `& w# A! @lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
* Y; g) E i# k+ kwindows()
+ T" G Z3 J+ O7 o9 \/ ^5 F- w4 Q+ bpar(mfrow=c(2,2))
$ k. w( H8 u: J' W% F2 b( I3 ?# ~plot(lm6,which=c(1:4))$ a$ D% X( r5 ~# _. ^
anova(lm6)
- m/ P4 n; C; isummary(lm6)4 d2 y3 U& L3 E& C$ {: ]6 M0 V
1 E( q1 d5 t4 ?1 e' {8 X
+ o+ `6 P. h& S: X9 v/ R请关注数学中国网微博和数学中国公众号,联系QQ 3243710560( U+ Q/ I5 l+ s1 A/ ~6 W
% ]+ e' _$ j/ c* u! v) w" g" |- D5 ^( P7 _; m" _2 T' V
" V: {3 R& ]8 _" z0 R/ \: ?$ T: K m0 s$ |& B1 _3 l' t: t. l
|
zan
|