- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 39395 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12514
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1388
- 主题
- 1158
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
|
【R语言】回归分析案例:北京市商品房价格影响因素分析0 Y: g$ C% v3 w0 _) w
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。; v2 |" R+ x6 l4 x
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题:
% @8 R& [4 s6 B5 w行描述性统计分析,各连续型变量之间的相关关系如下:, e2 {( q9 ]; I& D6 h6 T. |
% j# ?) C. v6 J/ h3 D
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
/ V+ E+ ]5 V4 \ t+ z" v4 ~! B" j3 v2 j1 Q1 t! a
# D+ V- Z0 r% | {+ Q
最终模型残差图:
" o4 l7 s. D" g/ r9 a! G* ~0 k, z+ Q
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
/ z+ T; H' ?/ Y6 q4 {, ^' w, ~属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比1 @' N% n3 m3 {0 R: f7 R
属性变量的具体影响在此处分析略去。, f; r- h% t N5 c
连续型变量的影响主要为:
# A8 r# T7 a1 D7 Z8 t, d 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
& t9 _' D& m, k* A2 y 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;* i! {" v, W+ e7 R9 G7 O
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
; t; `4 ?8 ^0 D0 J6 P/ H 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
4 S, d) ]1 B) L/ _- Y% } 容积率与环线之间存在着交互效应。
; q' y! @4 ~- k3 q1 s/ Z# ^% i& ]/ M, Brm(list=ls()) #清空当前工作空间
- {+ ~9 }; d: V$ qsetwd("D:/回归分析")( I2 \6 [7 |* a0 B
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a% K" e& O7 W/ O* @3 S+ |
View(a)
2 P( h, B/ f* [4 E" X1 Rattach(a)
2 F$ r/ u( Q Y+ ]2 r* q% T3 a& jnames(a)
/ C' i# H1 y$ z0 _4 }- c
" T/ i; m3 E6 O+ X. @ n$ K/ ?" s' O. m4 c* C; G8 l# @
##描述性统计; f' [0 y9 |+ Z- K" ]' ?
& @, j1 u# ^5 E: h" P4 p% U
1 Y; d6 a' ~' \# V, x0 j) O
#未做处理的响应变量分布情况
O& w$ F2 X' U6 \, I- b$ ] dpar(mfrow=c(1,1))
( N5 n! @% n* Rhist(price)
4 B5 h% z' |; M; a6 ~" P* s/ Zsummary(price) #查看响应变量的描述统计量
* G$ R8 m, s" y6 r+ `#连续型变量描述性统计
2 R5 U6 Q* K: swindows()
5 C( A9 W9 W" I( o' @pairs(a[,c(6:10)]) #所有连续型变量间的散点图
" g) L d% x1 A9 Q, upar(mfrow=c(2,2)) 3 D8 `5 X/ e7 O4 J
plot(rong,price) #每个连续型因变量与响应变量间的散点图2 F# p! d6 ?5 I& h w1 H
plot(lv,price)$ l; d% H5 q0 \# B7 E# Z
plot(area,price)7 f+ [- F/ e8 Q% `% k
plot(ratio,price)
. I- B( m# [4 z* q- N4 u- Wsummary(a[,c(6:10)]) #查看连续型变量的描述统计量
( X- m* v( ^. Y8 _cor(a[,c(6:10)]) #查看连续型变量的相关系数
) }+ g& w) }( }+ B. L#属性变量描述性统计
. J( q! p% {$ l' q: wwindows()
/ V% @ t: u% a$ b# {par(mfrow=c(2,3))
8 W: A3 S5 s3 d3 s3 Sboxplot(price~dis) #每个属性变量关于响应变量的箱型图
" f- R! b: h6 B! J. L' g! \boxplot(price~wuye) % N0 G+ n$ T6 i! \$ z
boxplot(price~fitment) 9 Q7 Y* x0 ~8 I) S, O* u( ^
boxplot(price~ring)
$ ]- f! }0 h4 c# [1 u C( x1 Qboxplot(price~contype)
1 I- F7 W q# \# H W- A5 f' k8 Q5 p7 t! @* ]% i- k9 a
6 w- Q1 n/ u+ B I) f7 p
0 r: j$ {" M& n: E
* [- ] D; ?7 n1 M$ W
##模型建立7 r! c7 V$ U7 C2 o7 w) s
4 M8 ?$ s4 Z x# k( }! ?
& E$ c9 X0 M, p- r4 R+ y& j#在方差分析模型基础上加入连续型变量0 M1 K6 d; [/ G5 m* T
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
' g& L- S* |& ]& b/ T" n3 p( l1 b' panova(lm1) #方差分析
* A1 M7 h3 W( Tsummary(lm1) #模型参数估计等详细结果
) w' R8 R H2 f2 n$ B* Y2 j3 O9 fwindows()
+ O$ }: v7 n2 [+ E. Spar(mfrow=c(2,2))
/ f. T6 Y% n9 \- `6 K1 J; j- bplot(lm1,which=c(1:4)) #回归诊断做残差图
( e8 c0 C( m& ^; F6 V" D! N$ Y. r, F3 ^0 Q
$ l& X: ^/ t0 R% n
( ^( q8 W' @: }/ z3 I- z2 ~, Z h( \' H& X5 R n. x; E( }
##变量处理
7 E! {. O: q% z3 L8 |) F# N. C! `9 |" o4 |7 [( r+ x3 N
1 U7 C( |# e2 j. B; p! l$ C###对不显著的变量采用分组的方式希望能达到显著的效果
4 [( d( T8 t' o8 C+ t5 }0 }2 }##对容积率的处理 ~& p# M/ m9 |' E
windows()
: }5 k `: b; K3 d5 |# an = 4
/ x" H' X3 M6 u- m9 K/ P* R& ]3 Nboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
/ P9 _" i* K7 e# r. Ttable(ceiling(rong/n)) #容积率各分组下的样本数
3 K; P9 L1 i2 y- Nronggrp=1*(rong>n) #进行二分类6 j9 {/ E1 v0 B' j6 a6 v2 [
#ronggrp=ceiling(rong/n)
' T- k t3 x V8 m8 T$ ktable(ceiling(ronggrp)) #容积率二分类下的样本数3 j; _7 \! r" y: S% Y
windows()
' [: S& N0 o$ s" Q* T/ _boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图; _ S) q0 U2 P2 s# k r5 t
windows()
- l7 s0 F% v- i- ^5 D! j* Fpar(mfrow=c(1,2))) q& _1 }0 P) z5 ?4 w( f
boxplot(rong~ring) #容积率与环线箱型图) i# F: B( O' k( t4 [, c
boxplot(price~ring) #房价与环线箱型图 $ t/ E7 P; `) A( J i
#加入容积率分组和容积率分组*所在环线交互因子的模型
3 M1 ?5 s, F5 @" Z9 ]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)7 ?9 J2 R# S8 A v. y z
anova(lm2) #方差分析
- _9 V9 M, b7 l- s' fsummary(lm2) #模型参数估计等详细结果
% e) _; E8 V! {7 o0 n; \1 Swindows()3 U1 g8 D& }: H
par(mfrow=c(2,2))# z) v: K8 I" U* R4 s4 z
plot(lm1,which=c(1:4)) #回归诊断) @9 F: ~* l% m( ?5 W7 o
; D7 q, [/ F' R6 f; o# \
3 c k! T5 H H8 }##对小区面积的处理' g. D: ?( A' _ s9 e
summary(area)! p" ~, }; h! }, n. y: R* n. I& `
plot(area,price)7 N$ `% ]5 G/ a9 r B3 O. I& q7 n/ i. E4 v
windows()4 r/ \6 n {8 J `" x6 |: |
n = 150000
6 u9 l5 z7 u; t$ k$ w8 h2 [boxplot(price~ceiling(area/n)) + x) ~+ k5 q/ g/ q9 }
table(ceiling(area/n))
' H6 {/ x% T: X9 I; _areagrp=1*(area>n)7 g% E( c1 P( v& ] d
table(ceiling(areagrp))+ d' L+ p- w3 a- F: q+ a# G
boxplot(price~ceiling(areagrp))
9 q, e. |9 p8 a5 K6 p) p& h#加入小区面积分组的模型 J" S {+ ^: @9 ~+ D
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)0 w2 o' z# r% \0 E- @& ^% K
anova(lm3) #方差分析
0 l* e/ n: @7 X, u" a* N, }! \summary(lm3) #模型参数估计等详细结果! C8 i- w/ T2 P7 n( ?
windows()
4 Z! g; o' z) |% F1 K* `par(mfrow=c(2,2))8 [! ~! `, W; ~& K, A
plot(lm3,which=c(1:4)) #回归诊断5 v* X# l0 Z1 M8 }+ j
5 s) r2 }+ }+ i& T) d
) n( d' J" R7 M# v x##变量选择
0 v8 c5 Q T- W0 ]" \. u# y9 Z, X# H0 l' V" f. z' Y
+ ~! `1 c0 Z4 N+ F* G##AIC准则下的变量选择
" g1 m) Y3 h$ klm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
6 J7 x% b. r& dsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
3 ?: c# N- X8 n& T##BIC准则下的变量选择0 q4 B: m6 A% @/ @$ S& w7 ?
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic( \ {6 V1 L7 j
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
v3 A0 ?) M z$ l1 z6 _. a1 R i% G
" X! ~& X5 y( M. L/ Y/ @3 a
#选用AIC准则下的模型进行回归诊断
; }; u% ~( ?! o$ _2 Z: Vwindows()* ]5 u1 O) d- L! O. h8 Y* C% ]
par(mfrow=c(2,2))
% u% I5 w8 u% t$ V) m: D$ q: }plot(lm4.aic,which=c(1:4)) / A! k6 y5 A c% |0 L
) ~% D7 P1 Z2 d$ |8 Y
9 p4 ]! V. E# A& W
' \ K8 U7 |4 g F8 Y9 L% Q% Q G$ X9 H/ g5 G8 q8 [9 ^, E- ?, l, q/ l
##数据变换' R }2 Z( R% h3 W
2 C; D+ z+ H( \1 J2 l- \- `
3 H5 `1 Z2 w" U9 j5 \2 b$ J1 Q2 d3 ~#box-cox变换
5 \0 b6 W* b0 d% Wlibrary(MASS)
9 {; A* \4 k( G, Ab=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))# r7 i/ q W$ }
I=which(b$y==max(b$y)) #定位似然函数最大的位置
: ~4 f1 \" g% w, Y ?1 Xlambda = b$x[I] #精确的λ值! \. {% Q3 @/ w
#λ接近于0,为模型简洁性,可以直接进行对数变换5 G1 Y; u+ |$ ^) _# S# `. u
logprice <- log(price)
9 b. o* e/ Q# j# y% A, A* lhist(logprice): N) |$ d( W* `) _, w2 c9 x9 H- P& r/ E
/ i$ a1 i1 h0 v/ f6 Z* G' V7 i
7 Y/ ?0 z8 {1 p; E7 S1 A6 Q##最终模型与诊断8 l- S' M5 Z+ k% J2 c: R: f( j' d! N
9 I1 C5 G- e9 W G7 p8 f
* [: Y; x% ?% ~' c6 Y0 u7 t3 ylm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
! r$ T# J4 d# [/ d# z+ v5 dwindows()" C, t3 N3 L( U6 y
par(mfrow=c(2,2))- N: u3 ^% h8 g: R
plot(lm6,which=c(1:4))+ W( X8 f* [2 A( y
anova(lm6)
* D' `$ b7 [/ ^5 y/ _summary(lm6)- o/ _' q9 [9 C! }2 R# i
: [9 X& }+ h# Q9 b+ A$ a _5 R! B
+ X o: ~2 h6 G3 }$ [6 U请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
- w$ x" d0 K+ s [2 A' x/ b& d6 t6 g: K- M& C
, U! e% w# m2 d1 r2 m- P* K9 z& G$ r- ^9 e- n
& P! C9 n, F2 W+ ]1 w* m |
zan
|