- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40219 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12777
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
4 e, e+ I6 K9 X. m6 Y2 b3 m这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
. h- X' ~/ P! ]3 h这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
0 l( ~$ H( @/ q- b行描述性统计分析,各连续型变量之间的相关关系如下:- G! Z5 h& T/ O$ e0 n
. t7 e; |5 \3 u9 ~( ~
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 ' v! k$ I! z- ^4 {! Q' O
![]()
; n o2 _' U! E0 O3 ]) M( r![]()
1 J( A& I8 O- L( w! Q: V; W3 _" Y) R4 |最终模型残差图:/ w7 W9 c8 y2 ]+ \) I" x5 q' P
![]()
! n/ } |7 s E" N6 Y! L通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
6 l2 H( y9 n1 s( C# X. ^& r属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比; T5 i* T- l B9 L6 ^: V6 l
属性变量的具体影响在此处分析略去。8 \( h0 B: j9 y1 C" H5 R6 D
连续型变量的影响主要为:: p. N: C" b9 \7 {
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
! H P* K+ v3 G- k# x 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
! b( X8 @& Q, o# G同时,原本为连续型变量的容积率经过离散化变为属性变量后:5 v4 `# ]8 s2 r
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
+ Y* J! B% F* d8 @ 容积率与环线之间存在着交互效应。
6 F W5 A( M. p( z9 {1 rrm(list=ls()) #清空当前工作空间" {9 M9 X' ]- s, Z. E- t* C7 @
setwd("D:/回归分析")
8 f$ ?& a3 r/ _; c( D8 m8 wa=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
- m' V2 y8 L3 y) |, i: E$ ]/ RView(a)7 f/ d2 r+ R' d3 c/ _) q) o7 c
attach(a)
3 `; n+ e7 x3 @8 ^7 R, ]; knames(a)
8 F- U. j2 C! S' c" j
) F- y/ x' I+ ]) f3 d, ^- L4 C7 h' S; u; J. L4 _. L* y( S+ J
##描述性统计
/ X2 l9 a/ _3 T! ~5 {9 f/ l; M, l6 I- u" q8 f
; d$ g9 V; V# B#未做处理的响应变量分布情况
$ v& ?7 z8 k+ `- K& T) {par(mfrow=c(1,1))
% }! n- g& q/ n4 O: s6 h+ Uhist(price)
. A+ @ z' Y/ _! Osummary(price) #查看响应变量的描述统计量# p2 B- b& y D1 F% x3 J" f
#连续型变量描述性统计) K1 I7 s/ K9 O' \: e
windows()
& M0 ~6 l) W4 ^pairs(a[,c(6:10)]) #所有连续型变量间的散点图- ]8 e- E- h+ c u( ~: U
par(mfrow=c(2,2)) 4 u% x) @9 O4 S7 q6 I2 e6 \
plot(rong,price) #每个连续型因变量与响应变量间的散点图
% i3 F% E" r0 v5 _; s5 T0 Hplot(lv,price)
# i* W7 O. {; `7 y7 o5 h/ U3 @plot(area,price)" W) ~" w+ m3 y& [/ s
plot(ratio,price)
0 ]+ [0 Z4 b4 \summary(a[,c(6:10)]) #查看连续型变量的描述统计量
! J+ C0 O* Q! O& ?- }$ }cor(a[,c(6:10)]) #查看连续型变量的相关系数; V, e: J6 D# @/ y
#属性变量描述性统计
% q5 p2 Y) k$ b( _& b, ]" e) Bwindows()1 R6 E" O. |* P1 A2 D1 J. r1 d4 Z
par(mfrow=c(2,3)) 0 V I% G$ Y) L, D" Q X
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
* @9 y7 v+ p$ }( wboxplot(price~wuye)
: K, |3 W' D/ ^) H3 `+ Kboxplot(price~fitment) ; i$ w& W, m' h D9 ^* k: ~ J
boxplot(price~ring)
# z0 [3 `0 v: v3 ]" mboxplot(price~contype)
. q: B% T( i0 _: e* a! ~( ^% u; r8 V( {3 |9 [- D6 c9 ?
- B2 L; u# `4 F6 G) Y5 B
) o7 `) p1 U5 B) X" b# `: R. ~0 H$ x9 _: N3 k+ Z
##模型建立! C0 ~, _/ ]$ o) w
; k- B w% M! P
0 @2 r. _! \; Y+ b$ q4 |' k
#在方差分析模型基础上加入连续型变量% ^! J. P8 m+ ^! g' `
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)- z- P1 ]# h4 z! j; `
anova(lm1) #方差分析- t9 z3 f. [$ s C3 K& C$ d
summary(lm1) #模型参数估计等详细结果
3 Q) r. F. {/ a) a0 B, r- kwindows()
' `, ]4 w7 I& T1 vpar(mfrow=c(2,2))' ~) u4 K& U& R2 w8 z; O% k
plot(lm1,which=c(1:4)) #回归诊断做残差图! Z5 q \0 l' d& f4 q
1 q" W+ `& }7 b7 s. O* W4 W
4 R) X2 R4 I: ^9 ~) A }( K0 Y. Y$ D- X) e- x9 a
# q6 X7 B! i( K6 a5 U+ D0 q##变量处理7 s7 Q! w- Z# ]0 E5 |6 V4 E* {) |
- \; o n8 O$ g$ @) n
, [7 p1 {7 n. }4 Z9 o; K8 M( X###对不显著的变量采用分组的方式希望能达到显著的效果- s' R. ? P& j1 S
##对容积率的处理4 X6 z! d/ g0 S$ ]
windows()
; y' S0 h; J |n = 4
; c! T7 ^/ V1 s& M+ I2 x( a) R uboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
. R4 `/ ^, ?& r. e( ytable(ceiling(rong/n)) #容积率各分组下的样本数
0 c: G5 R) p/ ^5 sronggrp=1*(rong>n) #进行二分类& S7 Q6 X) Y4 F# ]
#ronggrp=ceiling(rong/n)
- ]/ o y9 J6 L$ otable(ceiling(ronggrp)) #容积率二分类下的样本数) k1 o" k% Y/ Z2 v% [, B; ?
windows()* `' ^/ @3 X+ _. Y! H
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
0 c8 G8 Z/ h8 @$ ?windows()
7 R1 ?& o- e' s/ P% v; _par(mfrow=c(1,2))+ F6 t0 W+ s, [" i
boxplot(rong~ring) #容积率与环线箱型图
5 |$ `( {4 o$ R! {boxplot(price~ring) #房价与环线箱型图
% J1 e7 g4 U |; x& Z+ Z" W#加入容积率分组和容积率分组*所在环线交互因子的模型
6 N! W/ b5 M* ^2 O* tlm2=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)
9 _5 L" c& U& {+ Sanova(lm2) #方差分析& f B1 X2 m1 Z6 E6 k. b/ h
summary(lm2) #模型参数估计等详细结果
9 |1 B7 w% r! y' Y+ swindows()3 P: `) }' a9 [& ^8 |
par(mfrow=c(2,2))
( u9 r M0 ]6 K$ a5 _; j8 ^' N6 V1 s [plot(lm1,which=c(1:4)) #回归诊断9 i' K5 h2 [8 g! H' c* o, m" ^
. u, X5 o0 o5 ~
' l% V0 e6 A) E! t; S% g4 S( {##对小区面积的处理
' S5 ^+ `" g4 I. Gsummary(area)9 I n+ f& c! {* O8 h l+ ^9 q2 S
plot(area,price)9 _- u ~$ W& H% v3 t6 u
windows()# v+ \3 D6 c, n N9 U7 A
n = 150000; X- v' k, s3 {
boxplot(price~ceiling(area/n))
; S+ S; _7 l& {+ Ktable(ceiling(area/n)) : ?* Z: U p! C6 |% m& ~- E1 x
areagrp=1*(area>n)6 C( e" \; y# ^# G+ h
table(ceiling(areagrp))
$ ~( M- y" A$ H. o$ w; N3 E `boxplot(price~ceiling(areagrp))5 h$ ?( @. [4 `+ }
#加入小区面积分组的模型
+ w) D. Y1 @! S3 t/ ~. w f- o2 m! Jlm3=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)
& n, s# f) ^) X. l! [anova(lm3) #方差分析1 I1 M$ p6 {$ A/ C
summary(lm3) #模型参数估计等详细结果
* l* j, Q, _4 w) U) jwindows()
+ v3 B. u& E: T$ ~# ~$ A6 ^par(mfrow=c(2,2))6 i! M7 ?& [/ h; |1 i+ j) U
plot(lm3,which=c(1:4)) #回归诊断
3 j ~% `# p7 `7 M4 w) N
' Y3 M- r7 L* d/ \
% w& B g" T+ }- @ G, r9 `) d##变量选择
/ s+ k% S1 I' B- y6 W
; l* B" X7 M5 s" I& B, T9 I9 w; b- N5 K8 |' `
##AIC准则下的变量选择/ o( n( ?+ |7 v1 g/ {9 M
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic W/ V' P* O8 r- U
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节# x6 j( C8 y. Y; n! p
##BIC准则下的变量选择. u: I4 h% f, ?7 E
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
- D- D% T8 C0 f3 o' _summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
+ S) |) t0 D/ @) u3 N* x' o( O) p6 i5 `4 z8 U) A) G
, s9 p6 b/ D# d T
#选用AIC准则下的模型进行回归诊断* e% q2 u7 w R
windows()
& c/ i8 `* Y+ r9 a- x4 b( Mpar(mfrow=c(2,2))& w& u! y: v$ G# ?0 d' D3 b7 l
plot(lm4.aic,which=c(1:4)) . s. p, H! X. K* H9 ~' Z5 X; |
' L6 Z8 b, c# d$ J" U2 \/ l+ x) }$ |- b8 W7 i2 E. ]
; s5 \! c% A ^, q# V8 J5 S$ S, P' T) d3 v, M5 G
##数据变换
1 o0 e1 C/ M8 R) t
4 a# Z9 u0 J$ ]
' p" X9 q3 v; z6 W3 X* L! I#box-cox变换
) I3 S) I5 ]/ B' o0 hlibrary(MASS)
+ r& `( M% B, T5 T% w0 rb=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))
' v$ K3 B9 ^% XI=which(b$y==max(b$y)) #定位似然函数最大的位置
" p: |4 J9 ^0 _/ k- q# rlambda = b$x[I] #精确的λ值1 V+ G H/ G. R! F4 ?. A6 T
#λ接近于0,为模型简洁性,可以直接进行对数变换. N1 g; L5 }% }
logprice <- log(price)( e' G* l, W) P3 l
hist(logprice)9 u9 @6 ^* I! i9 ~0 Q# f
5 Q" J% ^* G! h+ ^' q, d& E9 m8 O
7 l# ^& ?1 o- ^4 S$ g
##最终模型与诊断 T) n2 B9 x0 M. O1 a
% M2 W0 G- b# I t: O+ x6 @, X" M! S9 ~1 L0 f3 }
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
: v1 X& ~% I4 F3 P* @windows() H' F' Y5 v+ B ^3 y" @' p/ C
par(mfrow=c(2,2))0 }& B0 q) r7 @0 w
plot(lm6,which=c(1:4))
. G6 j8 B5 c1 u3 ?5 j- V6 Danova(lm6)8 W& p- X/ L+ m9 _
summary(lm6)) C& ~! L3 C( T' `& D( G1 c
- L5 H3 F7 d6 k! `
" ]* G; | ?. i
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
5 s* A4 L0 B7 h! n5 a& t" ~. g( B1 e0 s$ n- V" N
5 j# b6 M/ Q. E: A
) t8 K( t8 u0 X3 m+ ^8 a B* d" U$ \: f/ C* {5 d
|
zan
|