- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40245 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12785
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析# ~# u; \' v7 w
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
$ b4 J! }$ W# [( K" v这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: # g) H6 v, C5 J/ N
行描述性统计分析,各连续型变量之间的相关关系如下:2 D1 i# z+ h% i0 g
![]()
/ J% p" e3 G3 M0 [名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 2 S, j, U* B$ e7 m1 }
8 G2 L+ [7 Q9 i& R0 Q
: l$ K m8 x# e9 k
最终模型残差图:1 |* L, t+ E' [; G
2 _7 f' a' k) e# k$ ~( p3 I
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:7 ?! I) t! ?# q( P, E3 E
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比: U8 z1 t7 I/ N7 y; y
属性变量的具体影响在此处分析略去。
- w8 I) O6 } ?9 L/ v连续型变量的影响主要为:
2 N# [8 m. T- h/ G5 F+ G* A 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;- ~1 F2 Y( }1 y4 |; v
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
- ]7 w) O% l& F3 b8 U同时,原本为连续型变量的容积率经过离散化变为属性变量后:0 v3 {. T; a0 Z* @
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;( o/ J% R7 n) v3 W
容积率与环线之间存在着交互效应。* i5 ^1 F: E1 t6 q
rm(list=ls()) #清空当前工作空间% y( Q4 O" S: U$ ]# U6 t
setwd("D:/回归分析")
) F& @5 n8 M7 y M5 c3 s& ga=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
5 s: @. S& n# p! y9 T* E: V4 x9 nView(a)
1 D4 n9 I/ V4 s6 @attach(a)& m Z3 o% @- w' x1 G
names(a)
: _9 z( E4 [. A1 r" F b
/ c# K, X* @: n) F1 F
' r, M* @6 d/ o% C##描述性统计
' X1 J) U5 V# g8 ]
6 G1 b8 U N& Y; W' f0 \. F2 \! o& I
#未做处理的响应变量分布情况$ z7 G/ n% e0 F1 L3 Q/ J) K2 W3 f
par(mfrow=c(1,1))
$ z1 E# h( N' h7 F) ^& ]( a6 @hist(price)
: A! T; o: G. C0 Psummary(price) #查看响应变量的描述统计量, I7 v5 n2 z1 o0 w. o2 y d
#连续型变量描述性统计' P9 ?: ^. ^9 U C
windows()
$ K* n$ B1 l+ I' R2 cpairs(a[,c(6:10)]) #所有连续型变量间的散点图
; m$ h J7 y1 |8 i- I3 z, Opar(mfrow=c(2,2))
9 ?& i6 t2 O! U1 O# A4 g+ Splot(rong,price) #每个连续型因变量与响应变量间的散点图5 ?8 ^) T! k# b
plot(lv,price)
1 Q' `: D; g0 `9 {9 [4 x& o" xplot(area,price)+ s" D, b; K* r+ U. t
plot(ratio,price)3 B/ A \2 \6 g
summary(a[,c(6:10)]) #查看连续型变量的描述统计量' B G2 r+ m; e6 Y: w+ `8 q
cor(a[,c(6:10)]) #查看连续型变量的相关系数5 M0 p: t& F) v
#属性变量描述性统计: q. L8 s! r6 E
windows()
1 g0 T, i$ f! I' Ppar(mfrow=c(2,3))
( T2 Z& I8 w. h4 i3 k4 X* nboxplot(price~dis) #每个属性变量关于响应变量的箱型图
/ K, k- j: o( p+ X( nboxplot(price~wuye)
0 a6 {+ J( p+ F( C$ Fboxplot(price~fitment)
: o& X' C, e! {, ~3 bboxplot(price~ring)
( Q" U7 P( t, k8 P: P5 G, o+ Aboxplot(price~contype)/ {0 `, S9 B; ^0 ^7 V- k6 m% O
# h3 D, T( h: U& ~
9 {% [$ [" ?3 i) j4 `0 ]: Q9 d
% T% ?% S5 l+ y' ?# B
: ?1 h) t7 { {6 `+ I/ e {3 k##模型建立
2 } l6 Y; a5 K) K$ k3 e+ t
/ `. a& Z1 |; k8 b" E, w5 f
! t$ f" B' o4 O! ]* v#在方差分析模型基础上加入连续型变量3 y; A/ ~1 J; E( _0 R
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
$ M4 g$ j( R- Danova(lm1) #方差分析
1 k9 q5 T2 o6 ^$ q+ W4 `2 R' u" Osummary(lm1) #模型参数估计等详细结果
. P- U. S+ z7 M0 q7 M( _& _windows()
) v' k7 Y9 T4 ^; J7 Fpar(mfrow=c(2,2))
) W2 e% t6 a# ]! I# a1 O+ o% ]plot(lm1,which=c(1:4)) #回归诊断做残差图
- N+ r V% p# U: D' V; N& G1 S
. \/ ?7 ?& _5 x& E
& y" \) K- [' v/ e% a2 R* M9 V; z" F5 I- D
9 u0 u2 y0 ?1 l4 T* a% B# x
##变量处理
8 O% x' l2 t: `! @( A* d/ m( t$ M4 P6 t0 W% A( M
3 f0 `4 d; u5 [5 i1 a
###对不显著的变量采用分组的方式希望能达到显著的效果2 [4 B4 o/ q5 A: U# R6 I" c* }# b
##对容积率的处理8 n, M( E" B+ h
windows()6 p$ _' v* e/ k1 T ^
n = 4. j) \* A# B! c# C; I* V8 J/ ]' I
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 % X2 Q$ p7 v* N' D3 |
table(ceiling(rong/n)) #容积率各分组下的样本数
! X6 O! O1 P, c0 n2 u& W: kronggrp=1*(rong>n) #进行二分类- h$ ?. E" z# J/ J S
#ronggrp=ceiling(rong/n)
0 i7 M2 Z* H4 N6 k6 _table(ceiling(ronggrp)) #容积率二分类下的样本数: z4 h- R& T( h
windows()
' F6 {# n! i: V" p( G2 Q9 i: qboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
( b4 P; ~: j4 n9 q5 Qwindows()+ } H, a A) e
par(mfrow=c(1,2))
/ }# m r" J- m! f6 `1 p' gboxplot(rong~ring) #容积率与环线箱型图
4 `9 P* Y( t, Y! w0 f3 c8 _6 aboxplot(price~ring) #房价与环线箱型图
. m k5 M7 X. f( ~: W) j. b' ~#加入容积率分组和容积率分组*所在环线交互因子的模型$ g; l( L% J- z$ }# u
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)
5 X# z5 n& g& }- H$ eanova(lm2) #方差分析
1 w+ X2 r: f" J$ _. Z( i' Vsummary(lm2) #模型参数估计等详细结果9 j# Y) X, M$ e1 I) D. f( P
windows()
( h& P+ l( u- L# q: @7 X! {" x0 Upar(mfrow=c(2,2)), Y6 ^& F; B0 o8 p
plot(lm1,which=c(1:4)) #回归诊断
|1 l* v# E+ E. Y x
! i$ b! @$ C* k8 Y. @3 Z
% Z2 z. m0 J1 @6 L, t: D& ?##对小区面积的处理
( ^7 e8 `. v8 v) [0 c; {; ^. i' Q8 ?summary(area)
: X0 G- e: @4 _4 ^plot(area,price)) G6 e/ T6 w, \& z
windows()
0 Z% q2 K, h' X; tn = 150000
; {6 P7 F1 Z* y6 Tboxplot(price~ceiling(area/n))
6 t. @+ z* q* d6 U9 htable(ceiling(area/n))
3 T9 J+ }1 f4 [" a0 gareagrp=1*(area>n)0 Q* C) V* m; D9 [' b- d8 f
table(ceiling(areagrp))% n8 l: U" X0 f' V, }) Q
boxplot(price~ceiling(areagrp))
5 f6 ?. |, Y+ u# q- u#加入小区面积分组的模型1 I; P* }5 T" p4 b: [. t% B# r
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): V! l+ Z1 r2 F) C, q
anova(lm3) #方差分析& p/ C' ~6 a3 m. u( Y. |: _! n
summary(lm3) #模型参数估计等详细结果
6 d6 X! A: r. Ywindows(), y# ]+ I* n- j! a' N
par(mfrow=c(2,2))
# q) ?, M) g3 P- L: a, splot(lm3,which=c(1:4)) #回归诊断0 m' l: C5 a! N, W9 G) m! M+ C
1 P3 y/ ^2 D$ d5 `, C6 \" E4 S
' ?' p1 w1 R4 C5 f, L##变量选择
. T& w; _8 S+ b
6 E% P7 ^* j/ e8 H$ Y; q: A( |8 L$ i6 U9 Y# C0 A/ J
##AIC准则下的变量选择
4 Y# m+ l% ~) o& j* J9 Elm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic; j- n0 G+ s6 g1 h
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
/ @( [0 S$ u& V3 m( y- T4 r##BIC准则下的变量选择$ t. f4 H' b: y& e( Y
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
3 t. K3 m& E9 @- y" B" B' Gsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
+ e" d. ^9 D' f& w3 O5 k. b! v+ }* H& y- M* l% P
( F! f/ R: c; Y/ h" D' g, M
#选用AIC准则下的模型进行回归诊断
0 k4 D! E! ?" g+ a. Uwindows()
- q" G* }$ b$ a, g" Zpar(mfrow=c(2,2)), S$ ?9 D$ l" G+ ^- C
plot(lm4.aic,which=c(1:4))
6 w6 v# I% s# g9 V5 m+ m) Z- o
@$ H% Z" W3 E1 r) X# x
3 R5 H& Q Q5 }- T# w0 i/ I( @' L' a' O$ Z* H
/ C; d: q* _$ F7 E
##数据变换1 N1 ]6 P. F3 F1 {- @' z6 v( T* V
+ j! X# I) [; L8 i* c% f5 b# e% \; w& L$ E; L2 | @
#box-cox变换2 o3 B& |1 |! i" N0 h/ e1 Q) J
library(MASS)
' P: J' u) n5 K3 zb=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))/ G$ @4 `) N. h W
I=which(b$y==max(b$y)) #定位似然函数最大的位置
+ Y0 q: [6 z; i0 C7 N5 wlambda = b$x[I] #精确的λ值
" J8 b/ F- K4 A+ \; @7 N5 z#λ接近于0,为模型简洁性,可以直接进行对数变换9 n1 ~* g0 K9 p: [ K2 @
logprice <- log(price)
0 Z+ G4 U# {6 V( L0 S# X# S0 [hist(logprice)3 K: e$ g* E2 G! t' U+ z! T# d0 }
: S( l/ g. R3 A% z. [
. G5 `3 g" R" l4 ?' u9 J0 _
##最终模型与诊断4 o9 a8 k. l a) g
' H) O0 I$ @. ^3 m& ^
- q) i/ x+ e+ Z
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
( H+ R8 r1 s8 i3 k+ Gwindows()
1 @" i% b5 o @, ]4 k+ Vpar(mfrow=c(2,2))
0 Z8 w/ K$ X+ M5 Cplot(lm6,which=c(1:4)), }7 J5 ^( w/ Y: U! r: s
anova(lm6)
0 `" \' h' _& h( Z, |0 Osummary(lm6)
# r0 Q4 h7 g0 d& q# j2 E3 x8 P' N# k' o
9 |: A$ p: |: Z }8 x请关注数学中国网微博和数学中国公众号,联系QQ 3243710560$ R$ h- S3 w$ [9 O, s9 N
1 x" o, G' C8 a' M
% u: `& b# B A2 h9 H% s7 I' W3 Q9 C( ?3 l& `* M
# V, `$ b' y, I) R. U- b! Y
|
zan
|