একটি ভেরিয়েবলের স্কেল 0-100 তে পরিবর্তন করা হচ্ছে


20

আমি পিসিএ কৌশলটি ব্যবহার করে একটি সামাজিক মূলধন সূচক তৈরি করেছি। এই সূচকটি ধনাত্মক এবং নেতিবাচক উভয়ই মানের সমন্বিত। আমি ব্যাখ্যাটিকে সহজ করার জন্য এই সূচিটিকে 0-100 স্কেলে রূপান্তর / রূপান্তর করতে চাই। দয়া করে আমাকে এটি করার একটি সহজতম উপায় প্রস্তাব করুন।



লজিস্টিক ফাংশন logit মডেল ব্যবহৃত উপকারে পাশাপাশি লাগতে পারে। নির্দিষ্ট উদ্দেশ্যে নির্ভর করে।
ওন্দ্রেজ

2
ভবিষ্যতে (বা অতিরিক্ত) ডেটা প্রয়োগ করা হলে বিদ্যমান ডেটা 0-100 এ স্কেলিংয়ের গোপন ঝুঁকি রয়েছে। দেখুন consumerreports.org/cro/cars/... উদাহরণস্বরূপ, যেখানে উপভোক্তা প্রতিবেদন লিখেছিলেন, "... আমরা মুশকিল মুখোমুখি: দি টেসলা প্রাথমিকভাবে উপভোক্তা প্রতিবেদন রেটিং সিস্টেম, যা সংজ্ঞা দ্বারা বিগত 100 যেতে না 103 রান করেছিলেন। গাড়িটি একটি নতুন বেঞ্চমার্ক সেট করেছে, সুতরাং এটির অ্যাকাউন্টে আমাদের স্কোরিংয়ে পরিবর্তন আনতে হয়েছিল।
whuber

উত্তর:


33

কোন পরিবর্তনশীল (univariate ডিস্ট্রিবিউশন) সঙ্গে পর্যবেক্ষিত এবং মান (বা এই মান জন্য সম্ভাব্য সীমার প্রিসেট হতে পারে) পরিসরের rescaled যাবে থেকে মি একটি এক্স এন W নিম্নলিখিত সূত্র দ্বারা :বনামমিআমিএনমিএকটিএক্সমিআমিএনএনWমিএকটিএক্সএনW

মিএকটিএক্সএনW-মিআমিএনএনWমিএকটিএক্স-মিআমিএন(বনাম-মিএকটিএক্স)+ +মিএকটিএক্সএনW

অথবা

মিএকটিএক্সএনW-মিআমিএনএনWমিএকটিএক্স-মিআমিএন(বনাম-মিআমিএন)+ +মিআমিএনএনW


18

আর এর জন্য স্কেল প্যাকেজ rescaleথেকে ইতিমধ্যে উপলব্ধ ফাংশন রয়েছে যা আপনি যা চান ঠিক তা করেন এবং @ অ্যান্ড্রুটুলোক এবং @ এনটিএনফএনস বর্ণনা করেছেন:

library(scales)
rescale(c(-10, -9, -5, 2, 6), to = c(0, 100)) ## Use scales:::rescale() if you have several packages loaded using the same function name
[1]   0.00   6.25  31.25  75.00 100.00

7

প্রথমে কিছু উদাহরণ ডেটা পেতে দাও:

x <- runif(20, -10, 10)

এখানে দুটি ফাংশন যা আরে কাজ করবে

rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100
rescale(x)

অথবা, আপনি অন্যান্য রূপান্তর ব্যবহার করতে পারেন। উদাহরণস্বরূপ, লগইট রূপান্তরটি @ondrej দ্বারা উল্লেখ করা হয়েছিল

plogis(x)*100

বা, অন্যান্য রূপান্তর:

pnorm(x)*100
pnorm(x, 0, 100) * 100
punif(x, min(x), max(x))*100

4

শুধু টিটিএনএফএনএস এর উত্তরে যুক্ত করতে, পাইথনে এই প্রক্রিয়াটি প্রয়োগ করতে (উদাহরণস্বরূপ), এই ফাংশনটি কৌশলটি সম্পাদন করবে:

from __future__ import division

def rescale(values, new_min = 0, new_max = 100):
    output = []
    old_min, old_max = min(values), max(values)

    for v in values:
        new_v = (new_max - new_min) / (old_max - old_min) * (v - old_min) + new_min
        output.append(new_v)

    return output

print rescale([1, 2, 3, 4, 5])
# [0.0, 25.0, 50.0, 75.0, 100.0]

ধন্যবাদ, এই সূত্রটি কি নেতিবাচক মানগুলিতে প্রয়োগ হয় ?? উদাহরণস্বরূপ, যদি আমার মূল পরিবর্তনশীল -10 থেকে 10 হয়।
সোহেল আকরাম

হ্যাঁ - এটি সমস্ত মানগুলির জন্য কাজ করে - উদাহরণস্বরূপ, print rescale([-10, -9, -5, 2, 6]) # [0.0, 6.25, 31.25, 75.0, 100.0]
অ্যান্ড্রু টুলোক

3

আমি সূচকটি 0-100 ব্যবধানে আবদ্ধ না করার পরামর্শ দিচ্ছি, কারণ এটি ব্যাখ্যার উন্নতি করে না, বরং এটি আরও কঠিন করে তোলে। যদি সূচকের উপাদানগুলি নেতিবাচক হতে পারে, তবে এটি সম্ভবত সূচকটি নেতিবাচক হয়ে উঠবে, এবং এটি আমার মতে 0-100 রেঞ্জের কিছু কম মানের তুলনায় উপাদানগুলির সাথে কী চলছে তা প্রতিফলিত করে।


0

স্ট্যান্ডার্ড প্যাকেজযুক্ত লোডযুক্ত আর এর জন্য, আপনি কেবল 'বেস' প্যাকেজ থেকে স্কেল () ব্যবহার করতে পারেন:

x=c(2,4,8,16)
x.scaled = scale(x,FALSE,max(x))  # divide each value in x by max(x)
x.scaled = as.vector(x.scaled) 

পরিমণ্ডিত এক্সটিকে ভেক্টর হিসাবে পুনরুদ্ধার করতে 'as.vector ()' ব্যবহার করুন।


3
যেহেতু মূল মানগুলি নেতিবাচক হতে পারে, তাই বৃহত্তম মান দ্বারা ভাগ করা পর্যাপ্ত হবে না। দয়া করে প্রশ্নটি আরও মনোযোগ সহকারে বিবেচনা করুন এবং --- ডেভিড এবং মিক্কো ইতিমধ্যে এমন উত্তর পোস্ট করেছেন যা সেই দিকটিকে বিবেচনায় নিয়েছে - থাম্বগুলি উপরে যেতে, আপনার উত্তরগুলি সাধারণত দেয়নি এমন কিছুতে আপনাকে অবদান রাখতে হবে।
গ্লেন_বি -রিনস্টেট মনিকা

আপনি একেবারে ঠিক বলেছেন, এর জন্য দুঃখিত।
ব্যবহারকারী 161922
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.