【因果推斷python】10_分組和虛擬變量回歸1

目錄

分組數據回歸


分組數據回歸

并非所有數據點都是一樣的。 如果我們再次查看我們的 ENEM 數據集,相比小規模學校的分數,我們更相信規模較大的學校的分數。 這并不是說大型學校更好或什么, 而只是因為它們的較大規模意味著更小的方差。

import warnings
warnings.filterwarnings('ignore')import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import style
import seaborn as sns
from matplotlib import pyplot as plt
import statsmodels.formula.api as smfstyle.use("fivethirtyeight")np.random.seed(876)
enem = pd.read_csv("./data/enem_scores.csv").sample(200)
plt.figure(figsize=(8,4))
sns.scatterplot(y="avg_score", x="number_of_students", data=enem)
sns.scatterplot(y="avg_score", x="number_of_students", s=100, label="Trustworthy",data=enem.query(f"number_of_students=={enem.number_of_students.max()}"))
sns.scatterplot(y="avg_score", x="number_of_students", s=100, label="Not so Much",data=enem.query(f"avg_score=={enem.avg_score.max()}"))
plt.title("ENEM Score by Number of Students in the School");

在上面的數據中,直觀上,左邊的點對我的模型的影響應該比右邊的點小。本質上,右邊的點實際上是許多其他數據點組合成一個。如果我們可以拆分它們并對未分組的數據進行線性回歸,那么它們對模型估計的貢獻確實比左側的未捆綁點要大得多。

這種同時具有一個低方差區域和另一個高方差區域的現象稱為異方差。簡而言之,異方差是指因變量的方差在各個特征變量的值域內方差不是恒定的。在上面的例子中,我們可以看到因變量方差隨著特征樣本大小的增加而減少。再舉一個我們有異方差的例子,如果你按年齡繪制工資,你會發現老年人的工資差異大于年輕人的工資差異。但是,到目前為止,方差不同的最常見原因是分組數據。

像上面這樣的分組數據在數據分析中非常常見。原因之一是保密。政府和公司不能泄露個人數據,因為這會違反他們必須遵守的數據隱私要求。如果他們需要將數據導出給外部研究人員,他們只能通過對數據進行分組的方式來完成。這樣,個人集合在一起,不再是唯一可識別的。

對我們來說幸運的是,回歸可以很好地處理這些類型的數據。要了解如何做,讓我們首先采用一些未分組的數據,例如我們在工資和教育方面的數據。在這些數據集中,每個工人對應一行數據,所以我們知道這個數據集中每個人的工資以及他或她有多少年的教育。

wage = pd.read_csv("./data/wage.csv")[["wage", "lhwage", "educ", "IQ"]]wage.head()

如果我們運行一個回歸模型來找出教育與對數小時工資的關系,我們會得到以下結果。

model_1 = smf.ols('lhwage ~ educ', data=wage).fit()
model_1.summary().tables[1]

現在,讓我們暫時假設這些數據有某種保密限制, 它的提供者無法提供個性化數據。 因此,我們請他將每個人按受教育年限分組,并只給我們平均對數小時工資和每個組中的人數。 這讓我們只剩下 10 個數據點。

group_wage = (wage.assign(count=1).groupby("educ").agg({"lhwage":"mean", "count":"count"}).reset_index())group_wage

不要怕! 回歸不需要大數據就可以工作! 我們可以做的是為我們的線性回歸模型提供權重。 這樣,相對樣本量稍小的群體,模型會更多地考慮樣本量更大的群體。 請注意我是如何用 smf.wls 替換 smf.ols 的,以獲得加權最小二乘法。 新方法會讓一切變得不同,雖然這點不容易被注意到。

model_2 = smf.wls('lhwage ~ educ', data=group_wage, weights=group_wage["count"]).fit()
model_2.summary().tables[1]

注意分組模型中 edu 的參數估計與未分組數據中的參數估計完全相同。 此外,即使只有 10 個數據點,我們也設法獲得了具有統計意義的系數。 那是因為,雖然我們的點數較少,但分組也大大降低了方差。 還要注意參數估計的標準誤差是變得大了一點,t 統計量也是如此。 那是因為丟失了一些關于方差的信息,所以我們必須更加保守。 一旦我們對數據進行分組,我們不知道每個組內的方差有多大。 將上面的結果與我們在下面的非加權模型中得到的結果進行比較。

model_3 = smf.ols('lhwage ~ educ', data=group_wage).fit()
model_3.summary().tables[1]

參數估計值相對較大。 這里發生的事情是回歸對所有點施加了相等的權重。 如果我們沿著分組點繪制模型,我們會看到非加權模型對左下角小點的重視程度高于應有的重視程度。 因此,該模型的回歸線具有更高的斜率。

sns.scatterplot(x="educ", y = "lhwage", size="count", legend=False, data=group_wage, sizes=(40, 400))
plt.plot(wage["educ"], model_2.predict(wage["educ"]), c="C1", label = "Weighted")
plt.plot(wage["educ"], model_3.predict(wage["educ"]), c="C2", label = "Non Weighted")
plt.xlabel("Years of Education")
plt.ylabel("Log Hourly Wage")
plt.legend();

歸根結底,回歸就是這個奇妙的工具,可以處理單個數據或聚合數據,但在最后一種情況下您必須使用權重。 要使用加權回歸,您需要平均統計量。 不是總和,不是標準差,不是中位數,而是平均值! 對于自變量和因變量都需要這么處理。 除了單一自變量回歸的情況外,分組數據的加權回歸結果與未分組數據的回歸結果不會完全匹配,但會非常相似。

我將用在分組數據模型中使用附加自變量的最后一個例子來結束。

group_wage = (wage.assign(count=1).groupby("educ").agg({"lhwage":"mean", "IQ":"mean", "count":"count"}).reset_index())model_4 = smf.wls('lhwage ~ educ + IQ', data=group_wage, weights=group_wage["count"]).fit()
print("Number of observations:", model_4.nobs)
model_4.summary().tables[1]
Number of observations: 10.0

在此示例中,除了先前添加的教育年限之外,我們還包括 IQ 作為一個特征。運作機制幾乎相同:獲取均值并計數,回歸均值并將計數用作權重。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21030.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bootstrap5-學習筆記1-容器+布局+按鈕+工具

參考: Bootstrap5 教程 | 菜鳥教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文檔 v5.3 | Bootstrap 中文網 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比較多,最近用到了5&a…

SRE視角下的DevOps構建之道

引言: 隨著數字化時代的飛速發展,軟件成為了企業競爭力的核心。為了更高效地交付高質量的軟件,DevOps(Development和Operations的組合)作為一種文化、實踐和工具集的集合,逐漸成為了行業內的熱門話題。然而…

OpenFHE 使用樣例

參考文獻: 編譯 OpenFHEOpenFHE 源碼解析:PKE 部分[ABB22] Al Badawi A, Bates J, Bergamaschi F, et al. Openfhe: Open-source fully homomorphic encryption library[C]//Proceedings of the 10th Workshop on Encrypted Computing & Applied Ho…

渲染100為什么是高性價比網渲平臺?渲染100邀請碼1a12

市面上主流的網渲平臺有很多,如渲染100、瑞云、炫云、渲云等,這些平臺各有特色和優勢,也都聲稱自己性價比高,以渲染100為例,我們來介紹下它的優勢有哪些。 1、渲染100對新用戶很友好,注冊填邀請碼1a12有3…

【CTF MISC】XCTF GFSJ0008 low Writeup(LSB隱寫+QR Code識別)

low 暫無 解法 用 StegSolve 打開,Green plane 1 中疑似隱藏有二維碼。 使用大佬寫的代碼: from PIL import Imageimg Image.open("./low.bmp") img_tmp img.copy() pix img_tmp.load() width, height img_tmp.size for w in range(wid…

每日一題——Python實現PAT甲級1046 Shortest Distance(舉一反三+思想解讀+逐步優化)

一個認為一切根源都是“自己不夠強”的INTJ 個人主頁:用哲學編程-CSDN博客專欄:每日一題——舉一反三Python編程學習Python內置函數 Python-3.12.0文檔解讀 目錄 我的寫法 專業點評 優點 改進建議 時間復雜度分析 空間復雜度分析 總結 我要更…

Python模塊導入的寫法

關于Python模塊導入的寫法有 相對路徑導入 和 絕對路徑導入 兩種不同的導入路徑的寫法。 文章目錄 相對路徑導入絕對路徑導入總結 相對路徑導入 from .utils import upblock2d, crossattn_upblock2d使用了相對導入,以(“.”)開頭這種導入方…

HCIP-Datacom-ARST自選題庫__MAC【14道題】

一、單選題 1.缺省情況下,以下哪種安全MAC地址類型在設備重啟后表項會丟失? 黑洞MAC地址 Sticky MAC地址 安全動態MAC地址 安全靜態MAC地址 2.華為交換機MAC地址表中的動態sticky MAC地址的默認老化時間是多少秒? 300 不會老化 400 500 3.華為交換機MA…

【BeyondCompare官方免費版下載鏈接】

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、BeyondCompare官方免費版下載鏈接 前言 該軟件用于比較兩個文本或文件夾之間的不同之處,查看代碼修改時非常好用。 一、BeyondCompare官方免費…

Polar Web【簡單】login

Polar Web【簡單】login 本文旨在記錄此題的探索和解決過程。 Contents Polar Web【簡單】login探索&思路EXP (python)結果&總結 探索&思路 查看源碼,發現存在用戶信息泄露。嘗試用獲取信息登錄,顯示成功,但其后沒有可做的操作。…

有損線、上升邊退化與材料特性(七)

有損線的不良影響 當信號沿著實際有損線傳輸時,高頻分量的幅度減小,而低頻分量的幅度保持不變。由于這個種選擇性的衰減,信號的帶寬降低,信號的上升邊會增長。如果上升邊的退化與單位間隔比很小,同位模式將比較穩定與…

Django視圖與路由:打造你的網絡帝國

Hello,我是阿佑,上期給大家講了 Django ORM魔法:用Python代碼召喚數據庫之靈! 今天將帶大家深入探討了視圖的工作原理、如何編寫高效的函數視圖和類視圖,以及如何巧妙地利用URL路由來提升應用的用戶體驗和可維護性。通…

最新h5st(4.7.2)參數分析與純算法還原(含算法源碼)

文章目錄 1. 寫在前面2. 加密分析3. 算法還原 【🏠作者主頁】:吳秋霖 【💼作者介紹】:擅長爬蟲與JS加密逆向分析!Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致力于Python…

操作系統 實驗29 同步與互斥

1、并發線程同步與互斥 源程序&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <string.h> int num30,count10; pthread_mutex_t mylockPTHREAD_MUTEX_INITIALIZER; void *sub1(voi…

圖解 Python 編程(10) | 錯誤與異常處理

&#x1f31e;歡迎來到Python的世界 &#x1f308;博客主頁&#xff1a;卿云閣 &#x1f48c;歡迎關注&#x1f389;點贊&#x1f44d;收藏??留言&#x1f4dd; &#x1f31f;本文由卿云閣原創&#xff01; &#x1f4c6;首發時間&#xff1a;&#x1f339;2024年6月2日&…

LangChain學習之prompt格式化與解析器使用

1. 學習背景 在LangChain for LLM應用程序開發中課程中&#xff0c;學習了LangChain框架擴展應用程序開發中語言模型的用例和功能的基本技能&#xff0c;遂做整理為后面的應用做準備。視頻地址&#xff1a;基于LangChain的大語言模型應用開發構建和評估高 2. 先準備嘗試調用O…

數據結構(C):從初識堆到堆排序的實現

目錄 &#x1f31e;0.前言 &#x1f688; 1.堆的概念 &#x1f688; 2.堆的實現 &#x1f69d;2.1堆向下調整算法 &#x1f69d;2.2堆的創建&#xff08;堆向下調整算法&#xff09; ??2.2.1 向下調整建堆時間復雜度 &#x1f69d;2.3堆向上調整算法 &#x1f69d;2.…

testcontainer

在我們的項目中&#xff0c;單元測試是保證我們代碼質量非常重要的一環&#xff0c;但是我們的業務代碼不可避免的需要依賴外部的系統或服務如DB&#xff0c;redis&#xff0c;其他外部服務等。如何保證我們的測試代碼不受外部依賴的影響&#xff0c;能夠穩定的運行成為了一件比…

c++------類和對象(下)包含了this指針、構造函數、析構函數、拷貝構造等

文章目錄 前言一、this指針1.1、this指針的引出1.2、 this指針的特性 二、類的默認的六個構造函數2.1、構造函數簡述2.2構造函數 三、析構函數3.1、析構函數引出3.2、特點&#xff1a; 四、拷貝構造4.1、引入4.2、特征&#xff1a;4.3、默認拷貝構造函數 總結 前言 在本節中&a…

中國的歷史看中國的經濟發展

從中國的歷史看中國的經濟發展&#xff0c;可以發現其經歷了幾個顯著的階段&#xff0c;每個階段都有其獨特的特點和成就&#xff1a; 古代經濟&#xff1a;中國古代經濟以農業為主&#xff0c;實行井田制&#xff0c;重視水利工程的建設&#xff0c;如都江堰、靈渠等。 商業發…