เป้าหมายพื้นฐานเบื้องหลัง
การสร้างแบบจำลองการถดถอยเชิงเส้นที่เรียบง่ายตามแนวคิด
คือการค้นหาเส้นตรงที่ดีที่สุดจากระนาบสองมิติที่ประกอบด้วยคู่ของค่า X และ Y (เช่น การวัด X และ Y)เมื่อพบเส้นโดยใช้วิธีความแปรปรวนขั้นต่ำแล้ว การทดสอบทางสถิติต่างๆ ก็สามารถดำเนินการได้เพื่อพิจารณาว่าเส้นตรงกับค่าเบี่ยงเบนที่สังเกตจากค่า Y ได้ดีเพียงใด
สมการเชิงเส้น (y = mx + b) มีพารามิเตอร์สองตัวที่ต้องประมาณจากข้อมูล X และ Y ที่ให้มา นั่นคือความชัน (m) และค่าตัดแกน y (b) เมื่อประมาณพารามิเตอร์ทั้งสองนี้แล้ว คุณสามารถป้อนค่าที่สังเกตได้ลงในสมการเชิงเส้นและสังเกตการทำนาย Y ที่สร้างโดยสมการ
ในการประมาณค่าพารามิเตอร์ m และ b โดยใช้วิธีความแปรปรวนขั้นต่ำ เราจำเป็นต้องค้นหาค่าประมาณของ m และ b ที่ลดค่าที่สังเกตและทำนายของ Y สำหรับค่า X ทั้งหมดให้เหลือน้อยที่สุด ความแตกต่างระหว่างค่าที่สังเกตและค่าที่ทำนายเรียกว่าข้อผิดพลาด ( y i- (mx i+ b) ) และหากคุณยกกำลังสองค่าความผิดพลาดแต่ละค่าแล้วรวมค่าที่เหลือเหล่านี้ ผลลัพธ์ที่ได้คือการทำนายกำลังสอง ตัวเลขที่ไม่ถูกต้อง การใช้วิธีความแปรปรวนขั้นต่ำเพื่อกำหนดขนาดที่เหมาะสมที่สุดเกี่ยวข้องกับการหาค่าประมาณของ m และ b ที่จะลดความแปรปรวนในการทำนายให้เหลือน้อยที่สุด
สามารถใช้วิธีพื้นฐานสองวิธีเพื่อค้นหาค่าประมาณ m และ b ที่เป็นไปตามวิธีความแปรปรวนขั้นต่ำ ในแนวทางแรก เราสามารถใช้กระบวนการค้นหาเชิงตัวเลขเพื่อตั้งค่าต่างๆ ของ m และ b และประเมินค่าเหล่านั้น ท้ายที่สุดแล้วจึงตัดสินใจเลือกค่าประมาณที่ให้ผลความแปรปรวนขั้นต่ำ วิธีที่สองคือใช้แคลคูลัสเพื่อค้นหาสมการในการประมาณค่า m และ b ฉันจะไม่เจาะลึกแคลคูลัสที่เกี่ยวข้องกับการหาสมการเหล่านี้ แต่ฉันใช้สมการวิเคราะห์เหล่านี้ในคลาส SimpleLinearRegression เพื่อค้นหาค่าประมาณกำลังสองน้อยที่สุดของ m และ b (ดู getSlope() และ getYIntercept ในเมธอดคลาส SimpleLinearRegression)
แม้ว่าคุณจะมีสมการที่สามารถใช้หาค่าประมาณกำลังสองน้อยที่สุดของ m และ b ไม่ได้หมายความว่าหากคุณแทนค่าพารามิเตอร์เหล่านี้เข้ากับสมการเชิงเส้น ผลลัพธ์ที่ได้จะเป็นเส้นตรงที่เหมาะกับข้อมูลได้ดี ขั้นตอนต่อไปในกระบวนการถดถอยเชิงเส้นอย่างง่ายนี้คือการพิจารณาว่าค่าความแปรปรวนของการทำนายที่เหลือนั้นยอมรับได้หรือไม่
คุณสามารถใช้กระบวนการตัดสินใจทางสถิติเพื่อปฏิเสธสมมติฐานทางเลือกที่ว่าเส้นตรงเหมาะสมกับข้อมูล กระบวนการนี้ขึ้นอยู่กับการคำนวณสถิติ T โดยใช้ฟังก์ชันความน่าจะเป็นเพื่อค้นหาความน่าจะเป็นของการสังเกตขนาดใหญ่แบบสุ่ม ตามที่กล่าวไว้ในส่วนที่ 1 คลาส SimpleLinearRegression จะสร้างค่าสรุปจำนวนหนึ่ง ค่าสรุปที่สำคัญอย่างหนึ่งคือสถิติ T ซึ่งสามารถใช้เพื่อวัดว่าสมการเชิงเส้นเหมาะสมกับข้อมูลได้ดีเพียงใด หากความพอดีดี สถิติ T จะมีค่ามาก หากค่า T น้อย คุณควรแทนที่สมการเชิงเส้นของคุณด้วยแบบจำลองเริ่มต้นที่ถือว่าค่าเฉลี่ยของค่า Y เป็นตัวทำนายที่ดีที่สุด ( เพราะค่าเฉลี่ยของชุดค่าต่างๆ มักจะเป็นตัวทำนายที่มีประโยชน์ของการสังเกตครั้งต่อไปได้)
เพื่อทดสอบว่าสถิติ T มีขนาดใหญ่พอที่จะไม่ใช้ค่า Y เฉลี่ยเป็นตัวทำนายที่ดีที่สุดหรือไม่ คุณต้องคำนวณความน่าจะเป็นที่จะได้สถิติ T โดยการสุ่ม หากความน่าจะเป็นต่ำ ก็สามารถละทิ้งสมมติฐานว่างที่ว่าค่าเฉลี่ยเป็นตัวทำนายที่ดีที่สุดได้ และด้วยเหตุนี้ เราจึงสามารถมั่นใจได้ว่าแบบจำลองเชิงเส้นอย่างง่ายเหมาะสมกับข้อมูล (ดูส่วนที่ 1 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการคำนวณความน่าจะเป็นของสถิติ T)
กลับไปสู่กระบวนการตัดสินใจทางสถิติ มันบอกคุณว่าเมื่อใดที่จะไม่ยอมรับสมมติฐานว่าง แต่ไม่ได้บอกคุณว่าจะยอมรับสมมติฐานทางเลือกหรือไม่ ในการตั้งค่าการวิจัย จำเป็นต้องสร้างสมมติฐานทางเลือกของแบบจำลองเชิงเส้นผ่านพารามิเตอร์ทางทฤษฎีและสถิติ
เครื่องมือวิจัยข้อมูลที่คุณจะสร้างจะใช้กระบวนการตัดสินใจทางสถิติสำหรับแบบจำลองเชิงเส้น (การทดสอบ T) และให้ข้อมูลสรุปที่สามารถใช้ในการสร้างพารามิเตอร์ทางทฤษฎีและทางสถิติที่จำเป็นในการสร้างแบบจำลองเชิงเส้น เครื่องมือวิจัยข้อมูลสามารถจัดเป็นเครื่องมือสนับสนุนการตัดสินใจสำหรับผู้ปฏิบัติงานที่มีความรู้เพื่อศึกษารูปแบบในชุดข้อมูลขนาดเล็กถึงขนาดกลาง
จากมุมมองของการเรียนรู้ การสร้างแบบจำลองการถดถอยเชิงเส้นอย่างง่ายคุ้มค่าที่จะศึกษา เนื่องจากเป็นวิธีเดียวที่จะเข้าใจรูปแบบขั้นสูงของแบบจำลองทางสถิติ ตัวอย่างเช่น แนวคิดหลักหลายประการเกี่ยวกับการถดถอยเชิงเส้นอย่างง่ายสร้างรากฐานที่ดีสำหรับการทำความเข้าใจการถดถอยพหุคูณ (การถดถอยหลายรายการ) การวิเคราะห์ปัจจัย (การวิเคราะห์ปัจจัย) และอนุกรมเวลา (อนุกรมเวลา)
การถดถอยเชิงเส้นอย่างง่ายยังเป็นเทคนิคการสร้างแบบจำลองอเนกประสงค์อีกด้วย สามารถใช้ในการสร้างแบบจำลองข้อมูลเส้นโค้งโดยการแปลงข้อมูลดิบ (โดยปกติจะเป็นการแปลงลอการิทึมหรือกำลัง) การแปลงเหล่านี้ทำให้ข้อมูลเป็นเส้นตรง เพื่อให้สามารถจำลองแบบโดยใช้การถดถอยเชิงเส้นอย่างง่าย โมเดลเชิงเส้นที่ได้จะแสดงเป็นสูตรเชิงเส้นที่เกี่ยวข้องกับค่าที่แปลงแล้ว
ฟังก์ชันความน่าจะเป็น
ในบทความที่แล้ว ฉันหลีกเลี่ยงปัญหาในการใช้ฟังก์ชันความน่าจะเป็นใน PHP โดยขอให้ R ค้นหาค่าความน่าจะเป็น ฉันไม่พอใจกับโซลูชันนี้โดยสิ้นเชิง ดังนั้นฉันจึงเริ่มค้นคว้าคำถาม: สิ่งที่จำเป็นในการพัฒนาฟังก์ชันความน่าจะเป็นโดยใช้ PHP
ฉันเริ่มค้นหาข้อมูลและรหัสทางออนไลน์ แหล่งข้อมูลหนึ่งสำหรับทั้งสองคือหนังสือ Numerical Recipes in C. Probability Functions ฉันปรับใช้โค้ดฟังก์ชันความน่าจะเป็นบางส่วนใหม่ (ฟังก์ชัน gammln.c และ betai.c) ใน PHP แต่ฉันยังคงไม่พอใจกับผลลัพธ์ ดูเหมือนว่าจะมีโค้ดมากกว่าการใช้งานอื่นๆ เล็กน้อย นอกจากนี้ ฉันต้องการฟังก์ชันความน่าจะเป็นแบบผกผัน
โชคดีที่ฉันสะดุดกับการคำนวณทางสถิติเชิงโต้ตอบของ John Pezzullo เว็บไซต์ของ John เกี่ยวกับฟังก์ชันการแจกแจงความน่าจะเป็นมีฟังก์ชันทั้งหมดที่ฉันต้องการ ซึ่งนำมาใช้ใน JavaScript เพื่อให้การเรียนรู้ง่ายขึ้น
ฉันย้ายฟังก์ชัน Student T และ Fisher F ไปยัง PHP ฉันเปลี่ยน API เล็กน้อยเพื่อให้สอดคล้องกับรูปแบบการตั้งชื่อ Java และฝังฟังก์ชันทั้งหมดไว้ในคลาสที่เรียกว่า Distribution คุณสมบัติที่ยอดเยี่ยมของการใช้งานนี้คือเมธอด doCommonMath ซึ่งถูกใช้ซ้ำโดยฟังก์ชันทั้งหมดในไลบรารีนี้ การทดสอบอื่นๆ ที่ฉันไม่ได้สนใจที่จะใช้ (การทดสอบภาวะปกติและการทดสอบไคสแควร์) ก็ใช้วิธี doCommonMath เช่นกัน
อีกแง่มุมหนึ่งของการปลูกถ่ายนี้ก็น่าสังเกตเช่นกัน เมื่อใช้ JavaScript ผู้ใช้สามารถกำหนดค่าที่กำหนดแบบไดนามิกให้กับตัวแปรอินสแตนซ์ เช่น:
วาร์ PiD2 = pi() / 2
คุณไม่สามารถทำเช่นนี้ใน PHP สามารถกำหนดค่าคงที่อย่างง่ายให้กับตัวแปรอินสแตนซ์ได้เท่านั้น หวังว่าข้อบกพร่องนี้จะได้รับการแก้ไขใน PHP5
โปรดทราบว่าโค้ดในรายการ 1 ไม่ได้กำหนดตัวแปรอินสแตนซ์ เนื่องจากในเวอร์ชัน JavaScript ตัวแปรเหล่านี้จะได้รับการกำหนดค่าแบบไดนามิก
รายการ 1. การใช้ฟังก์ชันความน่าจะเป็น
<?php
// Distribution.php
// ลิขสิทธิ์ John Pezullo
// เผยแพร่ภายใต้เงื่อนไขเดียวกับ PHP
// PHP Port และ OO'fying โดย Paul Meagher
class Distribution {
function doCommonMath($q, $i, $j, $b) {
$zz = 1;
$z = $zz;
$k = $i;
ในขณะที่($k <= $j) {
$zz = $zz * $q * $k / ($k - $b);
$z = $z + $zz;
$เค = $เค + 2;
-
กลับ $z;
-
ฟังก์ชั่น getStudentT($t, $df) {
$t = abs($t);
$w = $t / sqrt($df);
$th = อาทาน($w);
ถ้า ($df == 1) {
ส่งคืน 1 - $th / (pi() / 2);
-
$sth = บาป($th);
$cth = cos($th);
ถ้า( ($df % 2) ==1 ) {
กลับ
1 - ($th + $sth * $cth * $this->doCommonMath($cth * $cth, 2, $df - 3, -1))
/ (ปี่()/2);
} อื่น {
ส่งคืน 1 - $sth * $this->doCommonMath($cth * $cth, 1, $df - 3, -1);
-
-
ฟังก์ชั่น getInverseStudentT($p, $df) {
$วี = 0.5;
$dv = 0.5;
$t = 0;
ในขณะที่($dv > 1e-6) {
$t = (1 / $v) - 1;
$dv = $dv / 2;
ถ้า ( $this->getStudentT($t, $df) > $p) {
$วี = $วี - $dv;
} อื่น {
$วี = $วี + $dv;
-
-
กลับ $t;
-
ฟังก์ชั่น getFisherF($f, $n1, $n2) {
// ใช้งานแต่ไม่แสดง
}
ฟังก์ชัน getInverseFisherF($p, $n1, $n2) {
// ใช้งานแต่ไม่แสดง
}
}
?>
วิธีการส่งออก
ตอนนี้คุณได้ใช้ฟังก์ชันความน่าจะเป็นใน PHP แล้ว ความท้าทายเดียวที่เหลืออยู่ในการพัฒนาเครื่องมือวิจัยข้อมูลที่ใช้ PHP คือการออกแบบวิธีการแสดงผลการวิเคราะห์
วิธีแก้ไขง่ายๆ คือแสดงค่าของตัวแปรอินสแตนซ์ทั้งหมดบนหน้าจอตามต้องการ ในบทความแรก ฉันทำเช่นนั้นเมื่อแสดงสมการเชิงเส้น ค่า T และความน่าจะเป็นแบบ T สำหรับการศึกษา Burnout การเข้าถึงค่าเฉพาะเพื่อวัตถุประสงค์เฉพาะจะเป็นประโยชน์ และ SimpleLinearRegression รองรับการใช้งานนี้
อย่างไรก็ตาม อีกวิธีหนึ่งในการแสดงผลผลลัพธ์คือการจัดกลุ่มส่วนของเอาต์พุตอย่างเป็นระบบ หากคุณศึกษาผลลัพธ์ของแพ็คเกจซอฟต์แวร์ทางสถิติหลักที่ใช้ในการวิเคราะห์การถดถอย คุณจะพบว่าแพ็คเกจเหล่านี้มักจะจัดกลุ่มผลลัพธ์ในลักษณะเดียวกัน ซึ่งมักจะประกอบด้วยตารางสรุป ตารางการวิเคราะห์ความแปรปรวน ตารางการประมาณค่าพารามิเตอร์ และค่า R ในทำนองเดียวกัน ฉันได้สร้างวิธีการส่งออกบางอย่างด้วยชื่อต่อไปนี้:
showSummaryTable()
แสดงการวิเคราะห์ความแปรปรวน()
แสดงค่าประมาณพารามิเตอร์ ()
showRValues()
ฉันยังมีวิธีการแสดงสูตรการทำนายเชิงเส้น ( getFormula() ) แพคเกจซอฟต์แวร์ทางสถิติจำนวนมากไม่ได้ส่งออกสูตร แต่คาดว่าผู้ใช้จะสร้างสูตรตามผลลัพธ์ของวิธีการข้างต้น ส่วนหนึ่งเป็นเพราะรูปแบบสุดท้ายของสูตรที่คุณใช้ในการสร้างแบบจำลองข้อมูลของคุณอาจแตกต่างจากสูตรเริ่มต้นด้วยเหตุผลดังต่อไปนี้:
จุดตัดแกน Y อาจไม่มีการตีความที่มีความหมาย หรือค่าอินพุตอาจถูกแปลง ในลักษณะที่คุณอาจต้อง Unconvert พวกเขาเพื่อรับคำอธิบายขั้นสุดท้าย
วิธีการทั้งหมดนี้ถือว่าสื่อเอาท์พุตเป็นเว็บเพจ เมื่อพิจารณาว่าคุณอาจต้องการส่งออกค่าสรุปเหล่านี้ในสื่ออื่นที่ไม่ใช่หน้าเว็บ ฉันจึงตัดสินใจรวมวิธีการส่งออกเหล่านี้ไว้ในคลาสที่สืบทอดคลาส SimpleLinearRegression รหัสในรายการ 2 มีวัตถุประสงค์เพื่อแสดงตรรกะทั่วไปของคลาสเอาต์พุต เพื่อให้ตรรกะทั่วไปโดดเด่นยิ่งขึ้น โค้ดที่ใช้วิธีการแสดงต่างๆ ได้ถูกลบออกแล้ว
รายการ 2. การสาธิตตรรกะทั่วไปของคลาสเอาต์พุต
<?php
// HTML.php
// ลิขสิทธิ์ 2003, พอล เมเกอร์
// เผยแพร่ภายใต้ GPL
include_once "slr/SimpleLinearRegression.php";
คลาส SimpleLinearRegressionHTML ขยาย SimpleLinearRegression {
function SimpleLinearRegressionHTML($X, $Y, $conf_int) {
SimpleLinearRegression::SimpleLinearRegression($X, $Y, $conf_int);
}
ฟังก์ชัน showTableSummary($x_name, $y_name) { }
ฟังก์ชัน showAnalysisOfVariance() { }
ฟังก์ชัน showParameterEstimates() { }
ฟังก์ชัน showFormula($x_name, $y_name) { }
ฟังก์ชัน showRValues() {}
}
?>
ตัวสร้างของคลาสนี้เป็นเพียงตัวหุ้มรอบตัวสร้างคลาส SimpleLinearRegression ซึ่งหมายความว่า หากคุณต้องการแสดงเอาต์พุต HTML ของการวิเคราะห์ SimpleLinearRegression คุณควรสร้างอินสแตนซ์คลาส SimpleLinearRegressionHTML แทนที่จะสร้างอินสแตนซ์คลาส SimpleLinearRegression โดยตรง ข้อดีคือ คุณจะไม่ทำให้คลาส SimpleLinearRegression ยุ่งเหยิงด้วยวิธีการที่ไม่ได้ใช้มากมาย และคุณสามารถกำหนดคลาสสำหรับสื่อเอาต์พุตอื่นๆ ได้อย่างอิสระมากขึ้น (อาจใช้ API เดียวกันสำหรับสื่อประเภทต่างๆ)
เอาท์พุทแบบกราฟิก
วิธีการส่งออกที่คุณได้นำไปใช้จนถึงขณะนี้แสดงค่าสรุปในรูปแบบ HTML นอกจากนี้ยังเหมาะสำหรับการแสดงแผนภูมิกระจายหรือแผนภูมิเส้นของข้อมูลเหล่านี้ในรูปแบบ GIF, JPEG หรือ PNG
แทนที่จะเขียนโค้ดเพื่อสร้างเส้นและแผนผังการแจกจ่ายด้วยตัวเอง ฉันคิดว่าจะดีกว่าถ้าใช้ไลบรารีกราฟิก PHP ที่เรียกว่า JpGraph JpGraph กำลังได้รับการพัฒนาอย่างแข็งขันโดย Johan Persson ซึ่งเว็บไซต์โครงการอธิบายในลักษณะนี้:
ไม่ว่าจะเป็นกราฟ "ได้มาด้วยวิธีที่รวดเร็วแต่ไม่เหมาะสม" ด้วยโค้ดที่น้อยที่สุด หรือสำหรับกราฟระดับมืออาชีพที่ซับซ้อนซึ่งต้องการการควบคุมที่ละเอียดมาก สามารถใช้ JpGraph ได้ การวาดภาพ มันกลายเป็นเรื่องง่าย JpGraph เหมาะสำหรับกราฟประเภทวิทยาศาสตร์และธุรกิจไม่แพ้กัน
การกระจาย JpGraph มีสคริปต์ตัวอย่างจำนวนหนึ่งที่สามารถปรับแต่งตามความต้องการเฉพาะได้ การใช้ JpGraph เป็นเครื่องมือวิจัยข้อมูลนั้นง่ายดายพอๆ กับการค้นหาสคริปต์ตัวอย่างที่ทำสิ่งที่คล้ายกับสิ่งที่ฉันต้องการและปรับให้เหมาะกับความต้องการเฉพาะของฉัน
สคริปต์ในรายการที่ 3 แยกมาจากเครื่องมือสำรวจข้อมูลตัวอย่าง (explore.php) และสาธิตวิธีเรียกไลบรารีและเติมคลาส Line และ Scatter ด้วยข้อมูลจากการวิเคราะห์ SimpleLinearRegression ความคิดเห็นในโค้ดนี้เขียนโดย Johan Persson (ฐานโค้ด JPGraph ทำงานได้ดีในการจัดทำเอกสาร)
รายการ 3. รายละเอียดฟังก์ชันจากเครื่องมือสำรวจข้อมูลตัวอย่าง explore.php
<?php
// ตัวอย่างที่แยกมาจากสคริปต์ explore.php
ได้แก่ ("jpgraph/jpgraph.php");
รวม ("jpgraph/jpgraph_scatter.php");
รวม ("jpgraph/jpgraph_line.php");
// สร้างกราฟ
$graph = กราฟใหม่ (300,200,'อัตโนมัติ');
$graph->SetScale("linlin");
// ชื่อการตั้งค่า
$graph->title->Set("$title");
$graph->img->SetMargin(50,20,20,40);
$graph->xaxis->SetTitle("$x_name","center");
$graph->yaxis->SetTitleMargin(30);
$graph->yaxis->title->Set("$y_name");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
// ตรวจสอบให้แน่ใจว่าแกน X อยู่ที่
// ด้านล่างสุดของโครงเรื่อง ไม่ใช่แค่ที่ Y=0 เท่านั้น
// ตำแหน่งเริ่มต้น
$graph->xaxis->SetPos('min');
// สร้างพล็อตกระจายด้วยสีที่สวยงาม
$sp1 = ScatterPlot ใหม่($slr->Y, $slr->X);
$sp1->เครื่องหมาย->SetType(MARK_FILLEDCIRCLE);
$sp1->เครื่องหมาย->SetFillColor("สีแดง");
$sp1->SetColor("สีน้ำเงิน");
$sp1->SetWeight(3);
$sp1->mark->SetWidth(4);
// สร้างเส้นการถดถอย
$lplot = LinePlot ใหม่($slr->PredictedY, $slr->X);
$lplot->SetWeight(2);
$lplot->SetColor('navy');
// เพิ่ม pltos เข้าไปในบรรทัด
$กราฟ->เพิ่ม($sp1);
$graph->Add($lplot);
// ... และเส้นขีด
$graph_name = "temp/test.png";
$graph->โรคหลอดเลือดสมอง($graph_name);
?
<img src='<?php echo $graph_name ?>' vspace='15'>
?>
สคริปต์การวิจัยข้อมูล
เครื่องมือวิจัยข้อมูลประกอบด้วยสคริปต์เดียว (explore.php) ที่เรียกเมธอดของคลาส SimpleLinearRegressionHTML และไลบรารี JpGraph .
สคริปต์ใช้ตรรกะการประมวลผลอย่างง่าย ส่วนแรกของสคริปต์ทำการตรวจสอบเบื้องต้นกับข้อมูลแบบฟอร์มที่ส่ง หากข้อมูลแบบฟอร์มนี้ผ่านการตรวจสอบ ส่วนที่สองของสคริปต์จะถูกดำเนินการ
ส่วนที่สองของสคริปต์ประกอบด้วยโค้ดที่วิเคราะห์ข้อมูลและแสดงผลสรุปในรูปแบบ HTML และกราฟิก โครงสร้างพื้นฐานของสคริปต์ explore.php แสดงอยู่ในรายการที่ 4:
รายการ 4 โครงสร้างของ explore.php
<?php
// explore.php
ถ้า (!empty($x_values)) {
$X = ระเบิด(",", $x_values);
$numX = จำนวน($X);
}
ถ้า (!ว่าง($y_values)) {
$Y = ระเบิด(",", $y_values);
$numY = จำนวน($Y);
}
// แสดงแบบฟอร์มป้อนข้อมูลหากตัวแปรไม่ได้ตั้งค่า
ถ้า ( (empty($title)) OR (empty($x_name)) OR (empty($x_values)) OR
(ว่างเปล่า($y_name)) หรือ (ว่างเปล่า($conf_int)) หรือ (ว่างเปล่า($y_values)) หรือ
($numX != $numY) ) {
// ละเว้นโค้ดสำหรับแสดงแบบฟอร์มรายการ
} อื่น {
include_once "slr/SimpleLinearRegressionHTML.php";
$slr = new SimpleLinearRegressionHTML($X, $Y, $conf_int);
echo "<h2>$title</h2>";
$slr->showTableSummary($x_name, $y_name);
เสียงสะท้อน "<br><br>";
$slr->showAnalysisOfVariance();
echo "<br><br>";
$slr->showParameterEstimates($x_name, $y_name);
echo "<br>";
$slr->showFormula($x_name, $y_name);
echo "<br><br>";
$slr->showRValues($x_name, $y_name);
echo "<br>";
รวม ("jpgraph/jpgraph.php");
รวม ("jpgraph/jpgraph_scatter.php");
รวม ("jpgraph/jpgraph_line.php");
// รหัสสำหรับการแสดงกราฟิกเป็นแบบอินไลน์ใน
// explore.php script โค้ดสำหรับสองบรรทัดนี้
// ปิดท้ายสคริปต์:
// ละเว้นโค้ดสำหรับการแสดงแผนภาพกระจายบวกเส้น
// ละเว้นโค้ดสำหรับแสดงพล็อตที่เหลือ
}
?>
การศึกษาความเสียหายจากไฟไหม้
เพื่อสาธิตวิธีการใช้เครื่องมือวิจัยข้อมูล ฉันจะใช้ข้อมูลจากการศึกษาความเสียหายจากไฟไหม้เชิงสมมุติ การศึกษานี้เกี่ยวข้องกับปริมาณความเสียหายจากไฟไหม้ในพื้นที่ที่อยู่อาศัยหลักๆ กับระยะทางจากสถานีดับเพลิงที่ใกล้ที่สุด ตัวอย่างเช่น บริษัทประกันภัยจะสนใจในการศึกษาความสัมพันธ์นี้เพื่อวัตถุประสงค์ในการกำหนดเบี้ยประกัน
ข้อมูลสำหรับการศึกษานี้จะแสดงอยู่ในหน้าจอป้อนข้อมูลในรูปที่ 1
รูปที่ 1 หน้าจออินพุตแสดงข้อมูลการศึกษา
หลังจากส่งข้อมูลแล้ว จะมีการวิเคราะห์และผลลัพธ์ของการวิเคราะห์เหล่านี้จะปรากฏขึ้น ชุดผลลัพธ์แรกที่แสดงคือ Table Summary ดังแสดงในรูปที่ 2
รูปที่ 2 ตารางสรุปคือชุดผลลัพธ์แรกที่แสดง
สรุปตารางจะแสดงข้อมูลที่ป้อนในรูปแบบตารางและคอลัมน์เพิ่มเติมที่ระบุ ค่าที่คาดการณ์ Y ที่สอดคล้อง กับ ค่า ที่สังเกตได้
รูปที่ 3 แสดงตารางสรุปข้อมูลระดับสูงสามตารางตามตารางสรุป
รูปที่ 3 แสดงตารางสรุปข้อมูลระดับสูงสามตารางตามตารางสรุป
ตาราง การวิเคราะห์ความแปรปรวน แสดงให้เห็นว่าค่าเบี่ยงเบนในค่า Y สามารถนำมาประกอบกับแหล่งที่มาหลักสองประการของการเบี่ยงเบนได้อย่างไร ความแปรปรวนที่อธิบายโดยแบบจำลอง (ดูแถวแบบจำลอง) และความแปรปรวนที่ไม่ได้อธิบายโดยแบบจำลอง (ดูแถวข้อผิดพลาด) ค่า F ที่สูงหมายความว่าโมเดลเชิงเส้นจับค่าเบี่ยงเบนส่วนใหญ่ในการวัดค่า Y ตารางนี้มีประโยชน์มากกว่าในสภาพแวดล้อมการถดถอยพหุคูณ โดยที่ตัวแปรอิสระแต่ละตัวจะมีแถวอยู่ในตาราง
ตาราง การประมาณค่าพารามิเตอร์ จะแสดงจุดตัดแกน Y (จุดตัด) และความชัน (ความชัน) โดยประมาณ แต่ละแถวมีค่า T และความน่าจะเป็นที่จะสังเกตค่า T สุดขั้ว (ดูคอลัมน์ Prob > T) Prob > T สำหรับความชันสามารถใช้เพื่อปฏิเสธโมเดลเชิงเส้นได้
หากความน่าจะเป็นของค่า T มากกว่า 0.05 (หรือความน่าจะเป็นเพียงเล็กน้อยในทำนองเดียวกัน) คุณสามารถปฏิเสธสมมติฐานว่างได้ เนื่องจากความน่าจะเป็นที่จะสังเกตค่าสุดขั้วแบบสุ่มนั้นมีน้อย ไม่เช่นนั้นคุณจะต้องใช้สมมติฐานว่าง
ในการศึกษาการสูญเสียไฟ ความน่าจะเป็นที่จะสุ่มได้รับค่า T ขนาด 12.57 นั้นน้อยกว่า 0.00000 ซึ่งหมายความว่าโมเดลเชิงเส้นเป็นตัวทำนายที่มีประโยชน์ (ดีกว่าค่าเฉลี่ยของค่า Y ) ของค่า Y ที่สอดคล้องกับช่วงของค่า X ที่พบในการศึกษานี้
รายงานขั้นสุดท้ายจะแสดงค่าสัมประสิทธิ์สหสัมพันธ์หรือ ค่า R สามารถใช้เพื่อประเมินว่าโมเดลเชิงเส้นเหมาะสมกับข้อมูลได้ดีเพียงใด ค่า R ที่สูงแสดงถึงข้อตกลงที่ดี
รายงานสรุปแต่ละฉบับจะให้คำตอบสำหรับคำถามเชิงวิเคราะห์ต่างๆ เกี่ยวกับความสัมพันธ์ระหว่างแบบจำลองเชิงเส้นและข้อมูล ปรึกษาหนังสือเรียนของ Hamilton, Neter หรือ Pedhauzeur เพื่อใช้การวิเคราะห์การถดถอยขั้นสูงยิ่งขึ้น
องค์ประกอบรายงานขั้นสุดท้ายที่จะแสดงคือแผนผังการกระจายและกราฟเส้นของข้อมูล ดังแสดงในรูปที่ 4
รูปที่ 4 องค์ประกอบรายงานขั้นสุดท้าย—แผนภาพการกระจายและกราฟเส้น
คนส่วนใหญ่คุ้นเคยกับคำอธิบายของกราฟเส้น (เช่นกราฟแรกในชุดนี้) ดังนั้นฉันจะไม่แสดงความคิดเห็นเกี่ยวกับเรื่องนี้ยกเว้นจะบอกว่าไลบรารี JPGraph สามารถสร้างกราฟทางวิทยาศาสตร์คุณภาพสูงสำหรับเว็บได้ นอกจากนี้ยังทำงานได้ดีเมื่อคุณป้อนข้อมูลการกระจายหรือข้อมูลเส้นตรง
โครงเรื่องที่สองเกี่ยวข้องกับค่าคงเหลือ (สังเกต Y , ทำนาย Y ) กับค่า Y ที่คุณทำนายไว้ นี่คือตัวอย่างของกราฟที่ใช้โดยผู้สนับสนุนการวิเคราะห์ข้อมูลเชิงสำรวจ (EDA) เพื่อช่วยเพิ่มความสามารถของนักวิเคราะห์ในการตรวจจับและทำความเข้าใจรูปแบบในข้อมูล ผู้เชี่ยวชาญสามารถใช้แผนภาพนี้เพื่อตอบคำถามเกี่ยวกับ:
เครื่องมือศึกษาข้อมูลนี้สามารถขยายได้อย่างง่ายดายเพื่อสร้างกราฟประเภทต่างๆ มากขึ้น — ฮิสโตแกรม กล่อง แปลง และแปลงควอไทล์ - เหล่านี้เป็นเครื่องมือ EDA มาตรฐาน
สถาปัตยกรรมห้องสมุดคณิตศาสตร์
งานอดิเรกคณิตศาสตร์ของฉันทำให้ฉันสนใจห้องสมุดคณิตศาสตร์ในช่วงหลายเดือนที่ผ่านมา การวิจัยลักษณะนี้ทำให้ฉันนึกถึงวิธีจัดระเบียบฐานโค้ดและคาดการณ์การเติบโตในอนาคต
ฉันจะใช้โครงสร้างไดเร็กทอรีในรายการ 5 ในตอนนี้:
รายการ 5. โครงสร้างไดเร็กทอรีที่เติบโตได้ง่าย
PHPMATH/ burnout_study.php สำรวจ.php fire_study.php navbar.php แยก/ การกระจาย.php ฟิชเชอร์.php นักเรียน.php ที่มา.php เจพีกราฟ/ ฯลฯ... SLR/ SimpleLinearRegression.php SimpleLinearRegressionHTML.php อุณหภูมิ/ |
ในอนาคต การตั้งค่าตัวแปร PHP_MATH จะดำเนินการผ่านไฟล์กำหนดค่าสำหรับไลบรารีคณิตศาสตร์ PHP ทั้งหมด
คุณเรียนรู้อะไร?
ในบทความนี้ คุณได้เรียนรู้วิธีใช้คลาส SimpleLinearRegression เพื่อพัฒนาเครื่องมือวิจัยข้อมูลสำหรับชุดข้อมูลขนาดเล็กถึงขนาดกลาง ในระหว่างนี้ ฉันยังได้พัฒนาฟังก์ชันความน่าจะเป็นดั้งเดิมสำหรับใช้กับคลาส SimpleLinearRegression และขยายคลาสด้วยวิธีเอาท์พุต HTML และโค้ดการสร้างกราฟโดยอิงจากไลบรารี JpGraph
จากมุมมองของการเรียนรู้ การสร้างแบบจำลองการถดถอยเชิงเส้นอย่างง่ายคุ้มค่าที่จะศึกษาเพิ่มเติม เนื่องจากได้รับการพิสูจน์แล้วว่าเป็นวิธีเดียวที่จะเข้าใจรูปแบบขั้นสูงของแบบจำลองทางสถิติ คุณจะได้รับประโยชน์จากความเข้าใจอย่างถ่องแท้เกี่ยวกับการถดถอยเชิงเส้นอย่างง่าย ก่อนที่จะเจาะลึกเทคนิคขั้นสูง เช่น การถดถอยพหุคูณหรือการวิเคราะห์ความแปรปรวนหลายตัวแปร
แม้ว่าการถดถอยเชิงเส้นอย่างง่ายจะใช้เพียงตัวแปรเดียวในการอธิบายหรือทำนายความเบี่ยงเบนของตัวแปรอื่น การค้นหาความสัมพันธ์เชิงเส้นอย่างง่ายระหว่างตัวแปรการศึกษาทั้งหมดยังคงเป็นขั้นตอนแรกในการวิเคราะห์ข้อมูลการวิจัย เพียงเพราะข้อมูลมีหลายตัวแปรไม่ได้หมายความว่าจะต้องศึกษาโดยใช้เครื่องมือหลายตัวแปร ที่จริงแล้ว การเริ่มต้นด้วยเครื่องมือพื้นฐาน เช่น การถดถอยเชิงเส้นอย่างง่ายเป็นวิธีที่ดีในการเริ่มสำรวจรูปแบบในข้อมูลของคุณ