2012-11-27 20 views
6

Tôi đang cố gắng để tạo ra một đường cong cho thấy một xu hướng trong dữ liệu trong một đồ thị, nhưng tôi không thể tìm ra cách để tạo ra các điểm dữ liệu cần thiết, tương tự như đồ thị thứ hai trong hình ảnh này:Làm cách nào để sử dụng d3.js để tạo đường xu hướng hồi quy/theo hàm mũ?

Least Squares Fitting Graphs

Tất cả tài liệu và ví dụ tôi tìm thấy sử dụng toán học đi qua đầu của tôi, bất kỳ mã giả sẽ là tuyệt vời.

Trả lời

10

tôi đã có thể vẽ một đường hồi quy hàm mũ với mã dưới đây:

function square(x){return Math.pow(x,2);}; 

function array_sum(arr){ 
    var total = 0; 
    arr.forEach(function(d){total+=d;}); 
    return total; 
} 

function exp_regression(Y){ 
    var n = Y.length; 
    var X = d3.range(1,n+1); 

    var sum_x = array_sum(X); 
    var sum_y = array_sum(Y); 
    var y_mean = array_sum(Y)/n; 
    var log_y = Y.map(function(d){return Math.log(d)}); 
    var x_squared = X.map(function(d){return square(d)}); 
    var sum_x_squared = array_sum(x_squared); 
    var sum_log_y = array_sum(log_y); 
    var x_log_y = X.map(function(d,i){return d*log_y[i]}); 
    var sum_x_log_y = array_sum(x_log_y); 

    a = (sum_log_y*sum_x_squared - sum_x*sum_x_log_y)/
     (n * sum_x_squared - square(sum_x)); 

    b = (n * sum_x_log_y - sum_x*sum_log_y)/
     (n * sum_x_squared - square(sum_x)); 

    var y_fit = []; 
    X.forEach(function(x){ 
    y_fit.push(Math.exp(a)*Math.exp(b*x)); 
    }); 

    return y_fit; 
} 
+0

Nếu có bất kỳ nhà toán học có thể kiểm tra lại công việc của tôi, nó sẽ được nhiều đánh giá cao. Cảm ơn. – Zikes

+2

http://bl.ocks.org/zikes/raw/4279121/ Cảm ơn bạn Zikes! Có thể có được biểu thức đường xu hướng không ?? – aloplop85

Các vấn đề liên quan