1. 程式人生 > >多元線性迴歸-Part1(以醫療費用為例)

多元線性迴歸-Part1(以醫療費用為例)

相較於一元線性迴歸,多元線性迴歸是用來確定2個或2個以上變數間的統計分析方法,其基本的分析方法和一元線性迴歸是類似的。

優點:

1.可適用於幾乎所有的資料;
2.提供了特徵與結果之間關係的強度和大小的估計。

缺點:

1.對資料做出了很強的假設;
2.模型形式必須事先指定;
3.不能很好地處理缺失資料。

基本步驟:對選取的多元資料集定義數學模型,進行引數估計,對引數進行顯著性檢驗、殘差分析、異常點檢驗,最後確定迴歸方程進行模型預測。特別地,對於多元迴歸方程有一項很重要的操作就是自變數的優化,要挑選出相關性最顯著的自變數,同時去除不顯著的自變數。

接下來以醫療費用為例,通過分析病人的資料,來預測這部分群體的平均醫療費用,從而來為年度保費價格的設定提供參考。

(一)收集和觀察資料

檔案包含1338個案例,即目前已經登記過的保險計劃受益者以及表示病人特點和歷年計劃計入的總醫療費用的特徵。這些特徵分別是:

  • age:整數,受益者的年齡(不包括超過64歲的人,因為這部分人群的費用由政府承擔);
  • sex:保單持有人的性別,male或者female;
  • bmi:身體質量指數(Body Mass Index, BMI),它等於體重(公斤)除以身高(米)的平方,理想的BMI指數在18.5和24.9之間;
  • children:整數,保險計劃中包括的孩子或者受撫養者的數量;
  • smoker:被保險人是否吸菸,yes或者no;
  • region:根據受益人在美國的居住地,分為4個地理區域,分別是northeast, southeast, southwest和northwest。

如何將這些變數與已結算的醫療費用聯絡起來很重要,在迴歸分析中,特徵之間的關係通常是由使用者指定,而不是自動檢測出來的。

(二)探索和準備資料

> insurance <- read.csv("insurance.csv", stringsAsFactors = T)
> str(insurance)

'data.frame':   1338 obs. of  9
variables: $ age : int 19 18 28 33 32 31 46 37 37 60 ... $ sex : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ... $ bmi : num 27.9 33.8 33 22.7 28.9 ... $ children: int 0 1 3 0 0 0 1 3 2 0 ... $ smoker : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ... $ region : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ... $ charges : num 16885 1726 4449 21984 3867 ... $ age2 : num 361 324 784 1089 1024 ... $ bmi30 : num 0 1 1 0 0 0 1 0 0 0 ...
  • read.csv()函式讀入資料,用stringsAsFactors = T將名義變數轉換成因子變數;
  • str()函式檢視資料結構,確認各個變數的讀取是否有異常;
  • summary()函式檢視charges的分佈情況;
  • hist()函式可得到資料分佈的直方圖,表明保險費用的分佈是右偏的,其平均數大於中位數,同時我們可以知道絕大數的人每年的費用在0到15000美元之間。

接下來面臨的一個問題是如何處理因子型別的特徵,因為迴歸模型需要每一個特徵值都是數值型的。

2.1 探索特徵之間的關係(相關係數矩陣)

在使用迴歸模型擬合數據之前,有必要確定自變數與因變數之間以及自變數之間是如何相關的。相關係數矩陣(correlation matrix)可以為每一對變數之間的關係提供一個相關係數。

> cor(insurance[c("age", "bmi", "children", "charges")])

               age       bmi   children    charges
age      1.0000000 0.1092719 0.04246900 0.29900819
bmi      0.1092719 1.0000000 0.01275890 0.19834097
children 0.0424690 0.0127589 1.00000000 0.06799823
charges  0.2990082 0.1983410 0.06799823 1.00000000
  • cor()函式為insurance中的4個數值型變數建立了一個相關係數矩陣。

相關係數矩陣中存在著一些顯著的相關,例如age和bmi,這就說明隨著年齡的增長,身體質量指數也會增加。此外,age和charges、bmi和charges以及children和charges也都呈現出相關性。

2.2 視覺化特徵之間的關係(散點圖矩陣)

散點圖矩陣(sactterplot matrix)是一個簡單地將散點圖集合排列在網格中,並且包含相互緊鄰的多種因素的圖表。

> pairs(insurance[c("age", "bmi", "children", "charges")])
  • pairs()函式可用於繪製散點圖矩陣。

在散點圖矩陣中,每個行和列的交叉點所在的散點圖表示其所在的行與列的兩個變數的相關關係,在對角線上方的圖和下方的圖是互為轉置的。大部分的散點圖看上去像是隨機密佈的點,但還是有一些會呈現出某種趨勢,例如age和charges之間的關係呈現出幾條相對的直線,而bmi和charges則構成了兩個不同的群體。

> pairs.panels(insurance[c("age", "bmi", "children", "charges")])
  • pairs.panels()函式屬於R包psych,其產生的散點圖矩陣有著更多的資訊。

對角線的上方表示的是相關係數矩陣,對角線上的直方圖描繪了每個特徵的數值分佈,對角線下方的散點圖帶有更多的視覺化資訊。

散點圖中的橢圓被稱為相關橢圓(correlation ellipse),它提供了一種變數之間是如何密切相關的視覺化資訊。相關橢圓中心的點表示x軸變數的均值和y軸變數的均值。兩個變數的相關性由橢圓的形狀所表示,橢圓越被拉伸,其相關性越強。若形狀近似於圓,如bmi和children,則表示一種非常弱的相關性。

散點圖中的曲線是區域性迴歸平滑(loess smooth)曲線,它表示x軸和y軸變數之間的一般關係。例如,對於age和bmi而言,區域性迴歸平滑曲線是一條傾斜的逐步上升的線,這說明bmi會隨著age的增長而增長,這個結論從相關係數矩陣中也能得出。

(三)基於資料訓練模型
> ins_model <- lm(charges ~ age + children + bmi + sex + smoker + region, data = insurance)
> ins_model

Call:
lm(formula = charges ~ age + children + bmi + sex + smoker + 
    region, data = insurance)

Coefficients:
    (Intercept)              age         children              bmi          sexmale        smokeryes  regionnorthwest  
       -11938.5            256.9            475.5            339.2           -131.3          23848.5           -353.0  
regionsoutheast  regionsouthwest  
        -1035.0           -960.1  
  • lm()函式用於對資料擬合線性迴歸模型;
  • 直接輸入模型物件名稱ins_model,就可以輸出估計的係數。

需要注意的是,我們在模型公式中僅僅指定了6個變數,但是卻輸出8個係數(除截距外)。這是因為lm()函式自動將虛擬編碼(dummy coding)應用於模型所包含的每一個因子型別的變數中。當新增一個虛擬編碼的變數到迴歸模型中時,一個類別總是被排除在外作為參照類別,然後估計的係數就是相對於參照類別解釋的。在我們的模型中,自動保留了sexfemale、smokerno和regionnortheast變數,使東北地區的女性非吸菸者作為參照組。因此,相對於女性來說,男性每年的醫療費用要少131.30美元,吸菸者平均多花費23848.50美元,遠遠超過非吸菸者。此外,模型中另外3個地區的係數是負的,這意味著東北地區傾向於具有最高的平均醫療費用。

線性迴歸模型的結果是合乎邏輯的,因為高齡、吸菸和肥胖往往與其它健康問題聯絡在一起,而額外的家庭成員或者受撫養者可能會導致就診次數增加和預防保健費用的增加。

至此,我們已經得到了迴歸模型,但是目前並不知道該模型對資料的擬合有多好。下一篇再接著講解吧!

相關推薦

多元線性迴歸-Part1醫療費用

相較於一元線性迴歸,多元線性迴歸是用來確定2個或2個以上變數間的統計分析方法,其基本的分析方法和一元線性迴歸是類似的。 優點: 1.可適用於幾乎所有的資料; 2.提供了特徵與結果之間關係的強度和大小的估計。

Tensorflow之多元線性迴歸問題波士頓房價預測

一、根據波士頓房價資訊進行預測,多元線性迴歸+特徵資料歸一化 #讀取資料 %matplotlib notebook import tensorflow as tf import matplotlib.pyplot as plt import numpy as np

uboot中 make xxx_config 的作用make smdk2410_config

mdk nbsp xxx cpu clu samsung uboot 作用 頭文件 1、創建到目標板相關文件的鏈接 ln -s asm-arm asm ln -s arch-s3c24x0 asm-arm/arch ln -s proc-armv asm-arm/pr

基於TI Davinci架構的多核/雙核開發高速掃盲OMAP L138,dm8168多核開發參考以及達芬奇系列資料user guide整理

uwa 全部 dap setting pos eclips develop serial ger 基於TI Davinci架構的雙核嵌入式應用處理器OMAPL138開發入門 原文轉自http://blog.csdn.net/wangpengqi/article/de

C#語言中數組與集合的區別List集合

類型 添加元素 list 添加 一個 保存 操作方法 適用於 length 數組用於保存固定數量的數據,定長,占用內存少,遍歷速度快; 集合保存的數據數量,可以在程序的執行過程中,不斷發生變化,不定長,占用內存多,遍歷速度慢; 在功能上,數組能實現的所有功能,集合都能實現;

centos7設置服務開機自啟動crond.serivce

centos7服務開機自啟動一、設置crond.serivice服務為開機自啟動步驟1:查看crond.serivce服務的自啟動狀態[root@localhost ~]# systemctl is-enabled crond.servicedisabled此時crond.serivce的自啟動狀態為disa

python爬蟲簡書

split agen jieba分詞 nco spa 數據保存 列表 style regular 1.主題: 簡單爬取簡書中的專題‘’@IT·互聯網“中的文章,爬取信息之後通過jieba分詞生成詞雲並且進行分析; 2.實現過程: 第一步:打開簡書並進入到@I

Vue二十三vuex + axios + 緩存 運用 登陸功能

right nms error http 登錄 password osi ref local (一)axios 封裝 (1)axios攔截器 可以在axios中加入加載的代碼。。。 (2)封裝請求 後期每個請求接口都可以寫在這個裏面。。。 (二)vuex

PHPEmailer使用簡介qq郵箱

reply Opens 安全 client 下載 attach 後來 問題: from 1、從網上下載PHPEmailer; 2、確保PHP環境支持sockets擴展,還要開啟openssl,如下圖: 3、配置QQ郵箱   1.開啟SMTP服務      2.驗證密保

Centos 7Linux環境下安裝PHP編譯添加相應動態擴展模塊soopenssl.so

linu *** bz2 restart lan openssl 發現 不知道 tails https://blog.csdn.net/shinesun001/article/details/54312402 在centos 7環境下搭建好Lnmp環境之後,發現安裝的php

Springboot中Aspect實現切面記錄日誌

前言今天我們來說說spring中的切面Aspect,這是Spring的一大優勢。面向切面程式設計往往讓我們的開發更加低耦合,也大大減少了程式碼量,同時呢讓我們更專注於業務模組的開發,把那些與業務無關的東西提取出去,便於後期的維護和迭代。 好了,廢話少說!我們直接步入正題 以系統日誌為例首先,我們先做一些準

17Spring事務管理的四種方式銀行轉賬

寫這篇部落格之前我首先讀了《Spring in action》,之後在網上看了一些關於Spring事務管理的文章,感覺都沒有講全,這裡就將書上的和網上關於事務的知識總結一下,參考的文章如下: Spring事務機制詳解 Spring事務配置的五種方式 Spring中

flask和django在建立專案了和配置上的區別hello world

對比flask和django建立專案: flask確實簡單: # 匯入庫 # 例項化一個app # 定義一個檢視函式 # 建立templates模板(這裡需要注意的是templates檔案的目錄需要和有(app.run())的檔案要是在同一級目錄,不然會報模板找不到) #啟動

windows下Libevent的多執行緒封裝檔案傳輸

1、主執行緒負責監聽,子執行緒負責響應連線,同時每個子執行緒增加了連結串列來管理連線進來的客戶端,將上一節中的記憶體管理類也封裝進去。總體框架是不變的。 2、封裝類的實現: #pragma once #include "winsock2.h" #include "event2/liste

資料結構——圖的遍歷鄰接矩陣

  #include<stdio.h> #define N 20 #define TRUE 1 #define FALSE 0 int visited[N]; typedef struct /*佇列的定義*/ { int data[N]; i

回溯法解決N皇后問題四皇后

回溯法解決N皇后問題(以四皇后為例) 其他的N皇后問題以此類推。所謂4皇后問題就是求解如何在4×4的棋盤上無衝突的擺放4個皇后棋子。在國際象棋中,皇后的移動方式為橫豎交叉的,因此在任意一個皇后所在位置的水平、豎直、以及45度斜線上都不能出現皇后的棋子,例子 要求程式設計求出符合要求的情

詳解如何用爬蟲程式採集新聞資訊資料中國日報

半個世紀以來,隨著計算機技術全面融入社會生活,資訊爆炸已經積累到了一個開始引發變革的程度。它不僅使世界充斥著比以往更多的資訊,而且其增長速度也在加快,創造出了“大資料(Big Data)”這個概念。如今,這個概念幾乎應用到了所有人類智力與發展的領域中。  Big Data是近來的一個技術熱點,歷

如何合理封裝你的輪子、飛機、大炮封裝OkHttp

前言 對於程式設計師來說,很多時候,我們都在造房子,從學會框架或者是學會構建整個專案之後,慢慢的我們就會覺得自己在做的事情是一種重複勞動,很多時候只不過是換個面孔而已。而更快的造房子,造好看的房子可能是進一步你想要做的。 封裝 可能是你要學會的第一步,它能幫你學會造出你需要的合適的工具,而這些工具能幫你

CentOS 7.x版本選擇1810版本

如下表: package name size description CentOS-7-x86_64-DVD-1810.iso 4.3 GiB 標準版(推薦)

Spring AOP 的實現方式日誌管理

一、為什麼需要AOP 假如我們應用中有n個業務邏輯元件,每個業務邏輯元件又有m個方法,那現在我們的應用就一共包含了n*m個方法,我會抱怨方法太多。。。現在,我有這樣一個需求,每個方法都增加一個通用的功能,常見的如:事務處理,日誌,許可權控制。。。最容易想到的方法,先定義一個