- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40200 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12771
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
/ k" b' m( Z% v0 K2 @这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。1 P- q6 g; N' u: o0 b# E6 [7 X
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ( g. c+ `2 \7 v2 X. ?1 T# N1 c
行描述性统计分析,各连续型变量之间的相关关系如下:
9 Z9 f- J8 [5 U1 i$ ~3 d. ~0 r ' b1 `* H$ [" Z3 Y/ h# M8 B8 b
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 8 W3 K( f0 ], q8 Q
![]()
H3 ^& x) `9 R0 O4 j![]()
7 n/ p4 p6 q9 M, d4 O i最终模型残差图:
/ Q% K9 h/ k1 I3 C. m![]()
0 g+ g. @8 N2 G- ~$ u通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
* Y L9 K2 y3 a# a1 s* n/ ]7 D- P属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
; @' z( t) F; p; u- Q- s( D9 e8 I% G属性变量的具体影响在此处分析略去。
4 ?4 Y4 x9 K0 b- N3 C6 K( A( \连续型变量的影响主要为:
1 p, c/ w3 @: u$ P- B! |/ F' I 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
( L: U" V2 b0 Q9 T6 J+ F 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;7 X, T0 M0 f% V+ }9 |1 T, `9 u
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
; Y2 g5 K( Y0 h+ _$ z" i" b 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
n3 c6 \& ~- K9 ?9 S# e% i3 ~ 容积率与环线之间存在着交互效应。
( p6 d7 o/ E1 [% f Irm(list=ls()) #清空当前工作空间
' I9 E$ Q. N6 M" ~: ~+ csetwd("D:/回归分析")( B8 m: C8 q9 T5 J0 {
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
- m/ D+ ?+ P1 y, s6 gView(a)* _+ `2 s2 U. m9 W0 T8 S
attach(a)
6 F! n: R9 C: k( h) ~# O9 M( tnames(a). ]; X; _& K, }2 A3 c+ O
- f$ I$ w/ C# @" ~9 {9 e R- ~& |3 w- F1 d: l7 G
##描述性统计8 W! F3 n; U, F$ K" D2 n
% y. E; O0 F6 [. n* ~% l
3 w7 o; R2 m" b#未做处理的响应变量分布情况
% e% D+ A+ _0 t. ^3 f3 Lpar(mfrow=c(1,1))0 H3 |5 N7 K$ B0 F/ F
hist(price)
0 k$ l2 T/ V! x" D# nsummary(price) #查看响应变量的描述统计量* Q( a$ z) b7 w* j+ S8 Q
#连续型变量描述性统计
/ K& ^8 e; m3 u" k/ pwindows()
) ]% E2 I8 ]- a: ]pairs(a[,c(6:10)]) #所有连续型变量间的散点图0 g& i) q% a4 [
par(mfrow=c(2,2))
! s6 o& q4 S5 D/ E. Qplot(rong,price) #每个连续型因变量与响应变量间的散点图
+ t+ R3 V2 c7 Q. i( Eplot(lv,price)! c" q6 d' I( b9 i9 H2 f4 c
plot(area,price)
3 e g9 w2 P R* \plot(ratio,price)
* n7 z* R* U( Z! X* ~) n/ osummary(a[,c(6:10)]) #查看连续型变量的描述统计量
8 ~2 B# g0 S5 P9 _4 r, u' Kcor(a[,c(6:10)]) #查看连续型变量的相关系数
) d1 i. @' l8 Z8 b! Q#属性变量描述性统计( v. j3 b0 g& _8 S. ~
windows()
5 C- _4 k! b. M+ i0 ypar(mfrow=c(2,3))
4 u9 @+ O+ C- A1 Bboxplot(price~dis) #每个属性变量关于响应变量的箱型图* C7 ?' S% h1 U2 P
boxplot(price~wuye)
8 H- m0 f3 K: y! iboxplot(price~fitment)
2 \$ H- O* w6 `boxplot(price~ring)
% g- F- R# i; x. b3 v- Nboxplot(price~contype)% s6 E/ }7 ]6 ]- c8 V! s$ o8 v
( i3 t* S$ ~1 `4 Z+ F
7 y5 p5 p2 ?- V
; R% P& C; N4 `4 s
+ m! P0 T. ] x7 f##模型建立
) |7 x7 I: m8 {! ]% D. \. s
# m e; S _. k- T; _7 b- X5 P( U
* E& h* e" h) z' `#在方差分析模型基础上加入连续型变量
: V* r2 x; D3 C# G0 c+ alm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
9 I! t: |4 G; ] t# Oanova(lm1) #方差分析
2 y5 O$ n7 v+ B- P% i: H" dsummary(lm1) #模型参数估计等详细结果0 `* L$ J+ ~' Z) n
windows()
4 k$ ^7 R$ B& x- U: mpar(mfrow=c(2,2))& Q O$ _3 Q4 J& |/ j
plot(lm1,which=c(1:4)) #回归诊断做残差图. R$ p' I" d" q2 g" ^2 V V
/ S! o$ X+ K, {, t
$ T2 _: R) w$ [; M$ U# p
5 e/ i- R- d" @7 w
+ ?0 V }' b: l3 v; A##变量处理
7 ^" n8 N. `* U# a& L" f! z3 y2 x1 Q7 |1 l! u1 s# q& q) q
' t: s1 E8 A: e. ?, b
###对不显著的变量采用分组的方式希望能达到显著的效果
" {8 U% X3 F0 q3 a w! A##对容积率的处理2 k! ?- f: f5 F" Y/ a i
windows()
' b( N, T* ~) q7 S( p% Hn = 44 @7 J0 Z ~ ~ \
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
) ?' J. Z; z7 [" D) @table(ceiling(rong/n)) #容积率各分组下的样本数$ I3 [+ x! x1 T3 F) ^4 e
ronggrp=1*(rong>n) #进行二分类
1 o2 V' j& D' J6 C# \#ronggrp=ceiling(rong/n)
$ }4 T2 A/ B: jtable(ceiling(ronggrp)) #容积率二分类下的样本数; |5 {* _' a) ?1 R. o
windows()
0 t9 i5 z( r. A% }, P8 Jboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图8 ]) M6 K( t$ j& q4 F; O6 m
windows(): `* j Q" ^; G, y7 o; y2 o
par(mfrow=c(1,2))9 D" t+ q: A0 r' m3 c* U
boxplot(rong~ring) #容积率与环线箱型图- _* j- T8 i8 W( |
boxplot(price~ring) #房价与环线箱型图
2 C, B8 I% ~/ t4 H3 a6 Z#加入容积率分组和容积率分组*所在环线交互因子的模型
. w3 Z9 _9 V* l6 D2 }0 E, K3 `4 Jlm2=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). k- B) a/ P, _" f5 e9 c
anova(lm2) #方差分析+ i& @1 E* l+ P: C
summary(lm2) #模型参数估计等详细结果
5 T8 q% n5 }& h( m, iwindows()
) W8 _) \, q& C' S# j! @2 Fpar(mfrow=c(2,2))8 o5 s3 X! x9 `: A; V; {
plot(lm1,which=c(1:4)) #回归诊断
' v+ j) R3 W) N0 `1 L9 r5 B/ p& U Q9 \
0 P$ `& N k0 j1 @( V& P##对小区面积的处理
+ ]1 W& D4 Y. n8 Psummary(area)
7 c. s0 K. x* _plot(area,price)
* o# m3 o( `1 Y- ywindows()5 h8 E ?7 s) }* t
n = 150000
2 \& a7 i( O3 E/ J: P8 ~3 mboxplot(price~ceiling(area/n))
4 o. r n3 ]- O: [$ P1 stable(ceiling(area/n)) ) w4 C/ L: @0 \$ V! Y4 E% `
areagrp=1*(area>n)
$ y: m( s- j5 |6 K6 ~* H- Q9 K' {3 Ktable(ceiling(areagrp))1 Y) W6 R5 O( P
boxplot(price~ceiling(areagrp))
: C/ T" F( m# S+ a' u#加入小区面积分组的模型
, _7 |8 M# \1 V/ ~$ @; w! Glm3=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; Z2 q1 \& v
anova(lm3) #方差分析
% H6 E- E9 u7 y3 [( x, }' X! _summary(lm3) #模型参数估计等详细结果1 i* y1 m" T' L: T z
windows()
4 A) `7 e7 I" m( G; ?+ Ppar(mfrow=c(2,2))4 W4 [$ l9 j4 ~0 Z6 ?: C
plot(lm3,which=c(1:4)) #回归诊断! _; V6 }* T3 N' K! l& `; {5 v
( U+ j8 R6 }' E8 U9 v: A# j* F: b3 Q3 ?7 W1 E' s2 ]! k+ [ t4 |% V! n
##变量选择
1 I, c* m8 n, k% g H6 ]! f$ h1 G, j+ `
) x( \6 Z% s& u& m
##AIC准则下的变量选择# c+ Q; _, A+ ]8 m
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
$ Y0 O1 t, q1 r8 k: Bsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节9 I, q7 v9 O# Z1 M' Y) ]8 g/ `
##BIC准则下的变量选择8 @/ @8 m- O8 z9 a" S+ I; G- m# s
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
# q. \& e1 g1 f6 rsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节- M( G- x: Y) l3 T, b7 I6 A
8 d/ s* E& f/ H1 Q
: c$ m% f( O+ l* _0 j- N( z
#选用AIC准则下的模型进行回归诊断
* s0 O7 {7 X! }% l/ d0 U& Rwindows()& _, F) M9 J, x' y6 T6 y$ S; @
par(mfrow=c(2,2))
f3 R5 p( k1 t. t& cplot(lm4.aic,which=c(1:4)) - K5 p5 A/ j/ p$ D2 M# ^8 B" I
2 d& D( C, _# g+ }/ _$ D: K' b& I% ?, k1 p. j' f0 M( i4 r
5 d8 Q5 p- |/ z8 S, b8 C( H5 G4 q* R$ k" K
##数据变换
9 v2 B D: ~* u: n2 m- ?% r9 P% V5 ~& ^4 _( J
/ j2 y7 ~# X7 j3 R" J
#box-cox变换
" M+ d" c4 l7 r2 W4 A! p* Hlibrary(MASS)
7 h$ m" S, x5 _1 i( Z. F/ g1 Tb=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))
% q) u% a2 o0 k B" n. a4 {( z; pI=which(b$y==max(b$y)) #定位似然函数最大的位置
5 H2 K! r# | f/ ~lambda = b$x[I] #精确的λ值
$ ^* m5 F+ {/ s7 u. A8 C/ y% a8 Z- q#λ接近于0,为模型简洁性,可以直接进行对数变换
: g0 b* \3 g, l, ?- wlogprice <- log(price). Q1 ^& A( O( Y0 s4 N8 V
hist(logprice)
& n0 Y: H5 N( L' ^/ q4 o1 Q: j) z$ N. A' Z
0 P2 A; B1 E+ z# O) h3 I! x
##最终模型与诊断
$ j$ o9 ~6 U9 M/ e+ B( R8 U0 z8 _2 A% U" v! q r
! Z4 _' b& y- K* f5 Y
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)" `- T+ _( K2 d/ E. j, X
windows()
- X- _. f+ a* zpar(mfrow=c(2,2))
1 m( n. S* F6 S6 fplot(lm6,which=c(1:4))% g; Q0 Z, b8 f1 w: o& Y8 D3 H. z
anova(lm6)
# J+ K0 @0 G6 ]/ R$ z/ Q. Bsummary(lm6); h* v" D6 e" y
( F1 I5 C/ I2 a+ @/ s* R
6 n, P5 [& s: P$ S' l0 f* n5 X请关注数学中国网微博和数学中国公众号,联系QQ 3243710560! r g! s3 m8 k/ P
: S N- N- Y- T' x$ X% {/ H+ e& H" {1 D4 U* @
0 q# \- D3 k! I1 E
- I5 \- _5 p, u$ F* k4 W8 j
|
zan
|