- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40029 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12720
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析$ w _0 J" s" c: ], U
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。( a! ~( f- Q1 C6 l! k1 v
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: 2 z5 ?. ^/ t; z9 E& q* A0 d' v
行描述性统计分析,各连续型变量之间的相关关系如下:
K2 M- _9 P8 u; i4 x' o. | ^ 8 J# m9 _4 E# k$ c: G! ^
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 . K9 ~# L! b* b" B, Y
+ h7 @8 n9 u3 l r: |* c6 [( \
2 k! Y( \% k) i1 `5 T5 d
最终模型残差图:
* w' r6 p/ ?1 a$ _4 ]0 q" Z) [ % n9 V& j6 V3 z" c8 X6 e' \$ e
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:7 Z! K3 B! A! q; X1 t
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比2 C) X* {( q: {, v- W7 B& ]9 p
属性变量的具体影响在此处分析略去。
* s: ]- l9 O' R8 ~1 \3 y; U0 m连续型变量的影响主要为:
- M6 |0 T1 u* x1 \2 I/ q 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;3 K: D T Y6 r+ e( L3 ^1 x/ H5 n2 J
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
- [& j/ t3 r/ }% P5 g( ~/ \5 z同时,原本为连续型变量的容积率经过离散化变为属性变量后:
0 e w8 ~/ i: |0 g: r 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
2 F/ d0 ]! h4 S( g% Q H 容积率与环线之间存在着交互效应。0 K$ A6 p6 K) T, k
rm(list=ls()) #清空当前工作空间8 Y. f1 c0 ?7 _ }# [# M
setwd("D:/回归分析")
- Z+ E1 R4 X i' c; va=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a% n. g' Q2 i2 w, l/ D9 ^
View(a) V! K& |* g5 {; Y
attach(a)! ]: i* r) x0 O8 @* H
names(a)+ ^+ o* d9 A# M" o4 F
g, o n- A9 F6 V8 [
" m \3 Y7 m, Z9 o6 k: p6 d" ~##描述性统计3 F* G# N8 e% x2 x' [4 S
; L: J3 g: k: D$ q1 N. b
8 @8 [! |+ C q+ H+ M: L; P
#未做处理的响应变量分布情况
& d3 P" V& P8 r6 r3 u# {par(mfrow=c(1,1))( H7 Y- U% u) u* v" p' F
hist(price)
8 U6 B9 }& \, _# F# t+ n( s& asummary(price) #查看响应变量的描述统计量
/ g. T: M) w9 m- [1 L) D#连续型变量描述性统计
& g; u6 S9 l. z% ~ \windows()
) @1 \; B! I7 i H8 [- rpairs(a[,c(6:10)]) #所有连续型变量间的散点图
; }* _' s) [% c0 a) Ppar(mfrow=c(2,2)) ( n1 P$ K @4 J8 Z
plot(rong,price) #每个连续型因变量与响应变量间的散点图
# D7 @0 g l8 \, o5 P1 jplot(lv,price)0 R# l$ L4 ~/ N
plot(area,price)
6 a9 B/ {4 B& R$ P) ` Mplot(ratio,price)0 c# g/ d& ]9 O/ u5 H6 I+ @- i
summary(a[,c(6:10)]) #查看连续型变量的描述统计量" ]+ u/ `9 W1 ^9 c5 p+ `2 o" P6 h
cor(a[,c(6:10)]) #查看连续型变量的相关系数: j8 l# ^' i8 _: Y
#属性变量描述性统计- d; c/ T7 l1 c4 }1 J! M$ H
windows()* g9 B! W4 l. [, K$ Z) ^( Z
par(mfrow=c(2,3))
% k8 g$ O, O* zboxplot(price~dis) #每个属性变量关于响应变量的箱型图
0 f& i# P+ \2 u4 b8 p, zboxplot(price~wuye) . i1 }) V" q/ M# O) R p
boxplot(price~fitment)
9 ^# z! h, P; J& Kboxplot(price~ring)
; c5 v6 O& g% R$ uboxplot(price~contype)& X3 @. D- C, F0 N2 U1 w
2 R6 A+ t* l7 D! g0 s0 J' m* o5 r- Z1 H1 F5 w( L
3 s" U7 q+ V. S9 v, T7 C2 X0 t6 h) X5 n% [, n8 r
##模型建立
0 P) `9 p0 z' |0 p% k! ]+ \6 [, o3 F C* H" l7 h q9 h4 Z9 L' C+ `
+ C; w/ V% Z6 I
#在方差分析模型基础上加入连续型变量6 I H7 }; Y/ u8 G3 N$ p7 I
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)" [* y# g2 Q) i4 r3 O8 ]& L# F
anova(lm1) #方差分析
" @0 y% E z) Ysummary(lm1) #模型参数估计等详细结果) `8 B; C2 d! ^" i
windows()
# v) I, P1 r3 ?) ^. t5 @* A* `par(mfrow=c(2,2))7 z6 O ^' v5 d1 }. F! ?
plot(lm1,which=c(1:4)) #回归诊断做残差图
- n! R n/ \- f P5 q
- S; M l+ B: P" U
0 ^1 {, ?# X4 a! I; {4 j
/ N. p( k# u7 m$ ~5 |2 n) z
. L2 L) I) g) @# N- N# D- s1 d. G4 b##变量处理
& K* z: B' [7 G+ X* ]$ `8 C
, Y2 l0 [/ n! i2 ^0 b
1 Q* O) h& `$ K$ P o2 z/ ?3 }. Y###对不显著的变量采用分组的方式希望能达到显著的效果
2 ^, u. \7 w4 U. |+ z0 Q) K* v. s##对容积率的处理
0 v1 g: x6 J& ^- }4 F0 nwindows()
! L1 {- s) Q0 @. Z8 N" a- r! _n = 4
: u1 Q, M: b4 C' G! h2 bboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 9 B- L' G' g4 q) W! _6 m! l
table(ceiling(rong/n)) #容积率各分组下的样本数* M3 ]% w. o3 y) K( B, G
ronggrp=1*(rong>n) #进行二分类
, i* V' r6 p9 V9 S4 f#ronggrp=ceiling(rong/n)
; o$ k' N8 |3 @4 X& R+ h* otable(ceiling(ronggrp)) #容积率二分类下的样本数
+ @) j2 p: \: u( [4 Kwindows()
, B, \+ f3 a6 C' {/ Zboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图5 w% V2 J# ^3 e; [' V
windows(): v* }0 o' Z# s9 [7 d
par(mfrow=c(1,2))
$ k# {9 C$ D& O6 P% C3 D; n; n: Jboxplot(rong~ring) #容积率与环线箱型图
b: H* ?3 P9 n1 q# aboxplot(price~ring) #房价与环线箱型图
( @, n( g: R+ F/ P#加入容积率分组和容积率分组*所在环线交互因子的模型8 Z3 z; I0 F9 K; N
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)
# c+ S$ S' _0 @7 M' O9 Yanova(lm2) #方差分析% S' @- S, S: X2 w/ _2 }8 m& l
summary(lm2) #模型参数估计等详细结果/ y& O1 e& D& \: I& @& ~) l
windows()
' \6 ]' d" q- |5 N) Y' ipar(mfrow=c(2,2))
, `) T7 O# P* Dplot(lm1,which=c(1:4)) #回归诊断
5 G( d t: q( _0 T( T2 ~4 Q4 x: ^1 I; M6 }: v0 i) m0 `
# e. {9 ^- i8 E+ w- B8 b##对小区面积的处理
2 s5 ^, o8 N- M! d' w9 ysummary(area)
4 \4 {4 z5 | ^( a0 Q4 U: K0 I/ ?plot(area,price)
$ N4 y+ e& d. q: `4 `+ w# ^windows()
5 s3 M& j8 ^) Cn = 150000
- V( m6 m+ e/ r5 ]3 k, l! r* O5 n5 hboxplot(price~ceiling(area/n)) ( Q; N! z. e& Y& q1 H i- Y3 s% | v
table(ceiling(area/n)) 9 T9 v9 c9 E5 i
areagrp=1*(area>n)
1 S7 p* E0 D' z( gtable(ceiling(areagrp))
$ K5 k# T0 z) W( G, bboxplot(price~ceiling(areagrp))
$ w, B0 N/ v- g4 v2 ? x& S#加入小区面积分组的模型
! @( V8 N$ ]+ S& f8 Qlm3=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)
) ]3 y8 s# h% @1 ianova(lm3) #方差分析
7 L3 |% C; _! R! y1 y4 D, isummary(lm3) #模型参数估计等详细结果
2 [; `7 U% u- `- X* V. ~windows()# o2 W/ V' h: o; |2 A
par(mfrow=c(2,2))
' }2 C1 c1 K" [. [plot(lm3,which=c(1:4)) #回归诊断2 O: P: m [1 X" o$ S) g
" e# J! P, _2 X/ s( W
% p8 _4 p1 i ]. z##变量选择
/ Q' F/ }; T" t5 b6 f% V% K$ j# I2 j8 _- f' [) N
6 Q0 M2 a! L" T) m$ M3 u. g##AIC准则下的变量选择
9 F5 d6 ?1 ?& U1 i' W" M: k$ ~lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
/ c8 x% u: b5 zsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
$ ?, X6 p- E1 t; u##BIC准则下的变量选择
8 ]( j g5 n4 |# klm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic! F% Q5 N( l# j) @3 R9 i/ X0 J
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
8 C- E7 m0 t# ~5 ]' z( x W
9 E/ c! I* i) J1 f! c, V3 z# a$ g. V l% D
#选用AIC准则下的模型进行回归诊断) f& {( l+ r! Q2 i
windows()8 B/ h1 e. Y4 C) V% a
par(mfrow=c(2,2))7 w8 C8 l% g) ~6 ]$ ?1 z
plot(lm4.aic,which=c(1:4))
& W5 _& C& L! {/ z9 f4 `/ i- U+ P& C$ F# ]/ ?3 G- }
0 [! H' t# L0 g2 c
& K' `5 L0 d S0 M+ `7 k
* Z* C0 @. S( H9 C% P##数据变换 L# ]: @- A4 Y2 t
0 i: R7 t! [4 {
" r+ Y8 f- P# {$ r) h. g#box-cox变换9 F. v& ?; H- Y# `' G
library(MASS)
+ e: K+ t5 H; z$ gb=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)): l1 k. h/ v/ \
I=which(b$y==max(b$y)) #定位似然函数最大的位置: X4 k' t8 B$ i/ V. |
lambda = b$x[I] #精确的λ值* W& ?) N) G4 t3 M/ Z% V! C
#λ接近于0,为模型简洁性,可以直接进行对数变换
* |5 B B/ Y& j, X5 w; f5 N/ llogprice <- log(price)" O+ g9 n' _# c2 G4 A8 A
hist(logprice)
$ F' W7 P# z S' B3 g6 i* L( s% `2 K
: G, Q2 a/ v- _* _6 ]( ^% |1 v" X; u2 v
##最终模型与诊断
& e( d! J, k5 [' E$ N
1 w1 l3 o J" n' }4 r+ w
6 @6 v( h3 j$ ^( |8 V% M' Glm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
, W% l g/ b2 v2 k- [$ K+ w# Twindows()
0 ]( @2 u! j' s; o. q6 L# k* r0 rpar(mfrow=c(2,2))4 L( A2 r) B1 v. e, ~) g7 W
plot(lm6,which=c(1:4))
$ z: \ V* z& l5 M: u. sanova(lm6)
5 e8 K: x% y4 a g. Gsummary(lm6)
+ {# O% J6 l7 m4 E
3 Z5 n8 C: i# l9 O. K
' u8 V2 ]: v j; j& _- G请关注数学中国网微博和数学中国公众号,联系QQ 3243710560- T, b7 l+ }: `; o! |
1 m1 \" f5 i8 }3 M% @* S# L3 z
2 e) w: E* S& v
( Z' C+ X. X# |+ t& j% r/ ]: _) N' Z
|
zan
|